Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL&C++ работа с результатами запроса. Помогите пожалста, мну замкнуло( 
V
    Опции темы
SimpAlex
Дата 4.6.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Собстна голова уже кругом идет( ...

проблемма в чем - при написании курсовой передо мной стоит такая задачка. Есть БД в формате дбф, в ней допустим список группы с полями : Имя, Фамилия, Пол, Средний бал. Пуская будет 100 записей.

Далее: Соединение с компонентами и прочее я понимаю, равно как и нет никаких проблемм с языком SQL. Моя трабла заключается в том, чтобы понять ЧТО я получаю в результате - массив данных, какаято виртуальная таблица - что я получу в результате выполнения моего запроса в ADOQuery и как мне потом с этими данными работать.

Зачем мне это нада? С результатами запроса (какаято новая выборка) провести следующую операцию - перегнать эту новую выборку в Эксель и построить диаграммку (это я знаю как тоже) ...

Итак вопрос: Как имея эти данные получить массив данных MyGroup выполнив запрос типа : SELECT Name, Sex WHERE AdvScore>=3. Поидее непонятно где и непонятно как пощупать то что получится, создастся какаято таблица в которой будут 2 поля Имя и Пол, строки отсеятся по условию средний бал больше либо равен 3. Как мне теперь обратиться к этим живим данным, как с ними работать?

З.Ы. Под рукой Билдера нет, пишу с работы в ожидании бессонной ночи дома, все вроде продумал, а на этом ступор и дальше не могу нормально моделировать ход работы своей ...

Заранее АГРОМНОЕ спасибо, Знатоки) ...
PM MAIL   Вверх
Palladin
Дата 4.6.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Сори ничего непонятно, можешь конкретизировать что тебе надо?


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
kin
Дата 4.6.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 9.5.2008

Репутация: 1
Всего: 6



Цитата(SimpAlex @  4.6.2008,  16:42 Найти цитируемый пост)
Собстна голова уже кругом идет( ...

чувствуется, глядя на сообщение smile 
Цитата

проблемма в чем - при написании курсовой передо мной стоит такая задачка. Есть БД в формате дбф, в ней допустим список группы с полями : Имя, Фамилия, Пол, Средний бал. Пуская будет 100 записей.

Далее: Соединение с компонентами и прочее я понимаю, равно как и нет никаких проблемм с языком SQL. Моя трабла заключается в том, чтобы понять ЧТО я получаю в результате - массив данных, какаято виртуальная таблица - что я получу в результате выполнения моего запроса в ADOQuery и как мне потом с этими данными работать.

Зачем мне это нада? С результатами запроса (какаято новая выборка) провести следующую операцию - перегнать эту новую выборку в Эксель и построить диаграммку (это я знаю как тоже) ...

Итак вопрос: Как имея эти данные получить массив данных MyGroup выполнив запрос типа : SELECT Name, Sex WHERE AdvScore>=3. Поидее непонятно где и непонятно как пощупать то что получится, создастся какаято таблица в которой будут 2 поля Имя и Пол, строки отсеятся по условию средний бал больше либо равен 3. Как мне теперь обратиться к этим живим данным, как с ними работать?

З.Ы. Под рукой Билдера нет, пишу с работы в ожидании бессонной ночи дома, все вроде продумал, а на этом ступор и дальше не могу нормально моделировать ход работы своей ...

Заранее АГРОМНОЕ спасибо, Знатоки) ... 

Мил человек, давай с начала. Я надеюсь речь идет о Builder-е от дяди Borland-a
Если все что ты написал перевести на нормальный язык, то получится следующее: у тебя есть dbf-таблица и из нее вытаскиваются данные при помощи компонента TADOQuery . Глупый вопрос, а  такое вообще возможно (из dbf -  при помощи TADOQuery,) smile , для этой цели есть TQuery. Но это не суть, эти компоненты работают с такой штукой, как набор записей (recordset), перебирай их в цикле и пихай в Excel. Зачем тебе массив?  


PM MAIL   Вверх
SimpAlex
Дата 5.6.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Массив нужен, чтобы не все поля передавать в эксель ...

Да, Билдер 6.0 от дяди Борланда) ...

Мне нужно из ДБФ вырвать кусок таблицы, хочу это сделать СКЛ-запросом, чтобы юзверь мог сам выбирать какие поля ему интересно увидеть в отчете (именно для формирования красивого отчета с диаграммками и выводу на печть использую Эксель), по каким полям ему захочется построить диаграммку.

Меня интересует - реально ли выполнив СКЛ-запрос, полуич результат в виде набора данных - записать этот набор данных в массив, а потом уже работать с этим массивом (массив 2 мерный получается, строки и столбцы) ...

Ну предстаьте сее матрицу 100*100 достим А, я создаю запрос с уловием и мне не нада 100 полей-параметров, а всего 47, а по этим параметрам отсеивается 59 человек, что должны получить в результате? Матрицу 41*47 пусть она будет Б. ну вот мне нужно работать уже с этой новой матрицей ...

Использую ADOQuery, если есть смысл использовать другой - подскажите в чем разница, в примерах подсоединениях ДБФа в программу, как правило использую схему ADOConnection->ADOQuery ну а дальше уже куда это собстна и нада будет юзать) ...

Надеюсь теперь понятнее обрисовал проблемму) ...
PM MAIL   Вверх
kin
Дата 5.6.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 9.5.2008

Репутация: 1
Всего: 6



Цитата(SimpAlex @  5.6.2008,  17:57 Найти цитируемый пост)
Мне нужно из ДБФ вырвать кусок таблицы, хочу это сделать СКЛ-запросом, чтобы юзверь мог сам выбирать какие поля ему интересно увидеть в отчете (именно для формирования красивого отчета с диаграммками и выводу на печть использую Эксель), по каким полям ему захочется построить диаграммку.

Меня интересует - реально ли выполнив СКЛ-запрос, полуич результат в виде набора данных - записать этот набор данных в массив, а потом уже работать с этим массивом (массив 2 мерный получается, строки и столбцы) ...

Ну предстаьте сее матрицу 100*100 достим А, я создаю запрос с уловием и мне не нада 100 полей-параметров, а всего 47, а по этим параметрам отсеивается 59 человек, что должны получить в результате? Матрицу 41*47 пусть она будет Б. ну вот мне нужно работать уже с этой новой матрицей ... 

Все намного проще,зачем усложнять, да и задача поставлена не верно. Сначала определяются критерии запроса (поля, условия, сортировка и т.д), затем он выполняется, а затем обрабатывается. 
Утебя же получается наоборот. Зачем выбирать 100 полей, если нужно всего 47? Ну, как говориться, хозяин - барин. Теперь по сути вопроса: У компонентов TQuery (TADOQuery) есть свойства и методы, наследуемые от TDataSet (First, Next, Fields и пр.). С помощью них перебирай записи, выбирай нужные тебе поля, и пихай их в Excel. Проще говоря, TDataSet и есть тот массив, который ты хочешь получить.

Цитата
Использую ADOQuery, если есть смысл использовать другой - подскажите в чем разница, в примерах подсоединениях ДБФа в программу, как правило использую схему ADOConnection->ADOQuery ну а дальше уже куда это собстна и нада будет юзать) ...

Честно говоря, никогда об этом не задумывался; TQuery использует BDE от Борланда, TADOQuery - ADO от Microsoft. TADOQuery легче TQuery в плане наследования, да и BDE таскать с программой ненужно. Насчет использования для доступа к dbf, честно говоря, ниразу не видел, чтобы использовался TADOQuery, по-этому и был удивлен. Посмотрев help, пришел к выводу, что можно использовать и тот, и другой. Вот собственно и все...

PM MAIL   Вверх
SimpAlex
Дата 8.6.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Спасибо огромное Kin) ... Не могу репутацию добавить, кто может - дайте +1) ...

Решил проблеммку немного иначе:


Код

void __fastcall TForm2::Button1Click(TObject *Sender)
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
String mySQL="SELECT "+Edit2->Text+" FROM 2004"; //тут формируется строка запроса.
ShowMessage(mySQL); //ну как не оттестить что получается)) ...
ADOQuery1->SQL->Add(mySQL); //делаем запросик.
ADOQuery1->Open();

}


После этого мы получаем Dataset (спасибо Kin).

Код

void __fastcall TForm2::Button3Click(TObject *Sender)
{
ADOQuery1->First();
for (int i=1; i<=ADOQuery1->RecordCount;i++) //Делаем цикл, где конечное значение - количество строк
        {
        if (ADOQuery1->Fields->Fields[0]->AsString==Edit3->Text) //считываем из Эдита имя Поля, значения которого нужно сравнивать.
                Memo1->Lines->Add(ADOQuery1->Fields->FieldByName("NAME")->AsString); //записываем например в Мэмо значения другого поля из этой же строки.
        ADOQuery1->Next();
        };
}


Мне немного тяжко было врубиться, так как больше работал в последнее время c PHP и прочими текствовыми вариациями( ...

Всем спасибо за помощь) ... надеюсь вдальнейшем тоже откликнитесь на просьбы) ...

Это сообщение отредактировал(а) SimpAlex - 8.6.2008, 18:24
PM MAIL   Вверх
orthrus
Дата 9.6.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: нет
Всего: 16



А почему бы не сделать запрос такого вида:
Код

String mySQL="SELECT "+Edit2->Text+" FROM 2004 WHERE field = " + Edit3->Text;

где field нужно заменить на имя поля по которому происходит отбор, а результаты получать без условия:
Код

ADOQuery1->First();
for (int i=1; i<=ADOQuery1->RecordCount;i++) //Делаем цикл, где конечное значение - количество строк
        {
         Memo1->Lines->Add(ADOQuery1->Fields->FieldByName("NAME")->AsString); //записываем например в Мэмо значения другого поля из этой же строки.
        ADOQuery1->Next();
        };

Цитата(SimpAlex @  8.6.2008,  18:21 Найти цитируемый пост)
Не могу репутацию добавить, кто может - дайте +1) ...

Без проблем, добавил плюсик smile 


--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
SimpAlex
Дата 10.6.2008, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Кстати именно так и сделал, но тут не обновил данные)) ...

Код

void __fastcall Prosmotr(int ProsmotrGod)
{

MainForm->ProsmotrConnection->Open();
AnsiString MySQLZapros="SELECT "+MainForm->MySQLPart1+" FROM "+IntToStr(ProsmotrGod)+" WHERE VIDD IN ("+MainForm->MySQLPart2+")";
/*где MainForm->MySQLPart1 глобальная переменная Параметров,а MainForm->MySQLPart2 набор необходимых значений) ...*/
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.