C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: доступ к результатам запроса  (Прочитано 1671 раз)
direk
Участник


Сказали спасибо: +6/-0
Offline

Сообщений: 79


доступ к результатам запроса
« : 25 Ноябрь 2015, 21:06:27 »

Есть база MS SQL Server2012, пишу в RAD XE3.

До сих пор делал разные запросы через ADOQuery, сохранял результат в переменные, а потом уже с ними работал.

Потом подумал, почему не вынести все тексты запросов в отдельный файл.

Сделал так:
Код
ADOQuery->SQL->Clear();
ADOQuery->Parameters->Clear();
ADOQuery->SQL->LoadFromFile(ExtractFilePath(Application->ExeName)+ "\\sqlquery\\ZapytForFilm.txt") ;
ADOQuery->Parameters->ParamByName("find_id")->DataType  = ftInteger;
ADOQuery->Parameters->ParamByName("find_id")->Direction = pdInput;
ADOQuery->Parameters->ParamByName("find_id")->Value = IdFilm;
ADOQuery->Prepared = true;
try
{
ADOQuery->Open();
}
catch (EADOError& e)
{
MessageDlg("Error while connecting", mtError, TMsgDlgButtons() mbOK, 0);
return;
}

текст запроса (для примера):

Код
USE emty_base; 
SELECT FileTableRootPath() AS fullpath;
 
DECLARE @ID_FILM INT
SET @ID_FILM = :find_id
SELECT film.film_id,  film.nazva FROM film WHERE film.film_id = @ID_FILM

Вот тут возникает вопрос. У меня получается достучатся только до первого SELECT.

Код
Memo->Lines->Add(ADOQuery->FieldByName("fullpath")->AsString);  
Memo->Lines->Add(ADOQuery->FieldByName("nazva ")->AsString);  
Первая строка выводит результат нормально, а на второй выдает "ADOQuery:Field 'nazva' not found."

Но ведь в Menedgment Studio такие вопросы выполняются без проблем (смотри рисунок).

Так как ролучить все результаты запроса???  Или единственный выход делать несколько последовательных запросов?


Записан
Valdemar
Давний друг


Сказали спасибо: +60/-4
Offline

Сообщений: 285


Re: доступ к результатам запроса
« Ответ #1 : 26 Ноябрь 2015, 09:50:39 »

Запрос, в котором несколько SELECT, возвращает несколько RecordSet'ов. SQL Management Studio показывает каждый набор в отдельной таблице.
Посмотрите у TADOQuery метод NextRecordset.
Записан
direk
Участник


Сказали спасибо: +6/-0
Offline

Сообщений: 79


Re: доступ к результатам запроса
« Ответ #2 : 26 Ноябрь 2015, 21:25:04 »

Спасибо за подсказку. Уже что-то получается...
Записан
direk
Участник


Сказали спасибо: +6/-0
Offline

Сообщений: 79


« Ответ #3 : 29 Ноябрь 2015, 22:00:27 »

еще такой вопрос вдогонку (просто для расширения кругозора) -
 в справочной системе RAD XE есть пример:

Код
C++ Winapi::Adoint::_di__Recordset __fastcall NextRecordset(int &RecordsAffected);
 
ADODataSet1->Recordset = ADOQuery1->NextRecordset;

то есть количество строк (RecordsAffected) в Recordset вроде бы можно задавать, но с примера видим, что как бы и не нужно.

Интересно, как должно быть, потому как с кода
Код
 int i;
DataModule1->ADODataSet1_mitka->Recordset  =   DataModule1->ADOQuery2->NextRecordset(i) ;
DataModule1->ADODataSet2_ganr->Recordset   =   DataModule1->ADOQuery2->NextRecordset() ;
DataModule1->ADODataSet3_strana->Recordset =   DataModule1->ADOQuery2->NextRecordset

последние две строчки возвращают ошибку:

[bcc32 Error] Holovna.cpp(455): E2193 Too few parameters in call to '_fastcall TCustomADODataSet::NextRecordset(int &)'

[bcc32 Error] Holovna.cpp(456): E2235 Member function must be called or its address taken
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.14 секунд. Запросов: 19.