[CLOSED]Delphi или C++ Builder - датасеты ADO

Slavaga

Работаю с TADODataSet.
Есть у меня запрос, например:
 
TADODataSet->CommandText = "SELECT * FROM Table1; SELECT * FROM Table2";  

который возвращает два датасета.
Как узнать сколько датасетов вернул запрос?
Как можно обращаться к произвольному датасету по индексу?

evgen5555



который возвращает два датасета.
Не может такого быть!

Slavaga

Может. Щас запостю код.

Slavaga

 
TADODataSet * DS = new TADODataSet(this);
DS->Connection = GetConnection;
DS->CommandText = "SELECT * FROM Table1; SELECT * FROM Table2";
DS->Open;
<...>
<работаем с первым датасетом - данные из Table1>
<...>
int RecordsAffected = 0;
DS->Recordset = DS->NextRecordset(RecordsAffected); //Смысл RecordsAffected - не понятен. Возвращается все время -1.
//В хелпе написано "RecordsAffected is the number of rows in the returned recordset."
DS->Recordset = Proc->Recordset;
<...>
<работаем со вторым датасетом - данные из Table2>
<...>
  

Slavaga

А мне нужно сначала работать с последним датасетом, а потом с первыми.

evgen5555

Рекомендую не использовать оператор ";" в командах, а по-честному их разбить.
Второе - смысл RecordsAffected станет ясен только после UPDATE или DELETE

Slavaga

Рекомендую не использовать оператор ";" в командах, а по-честному их разбить.
У меня ситуация более сложная - работаю с хранимками, которые возвращают наборы датасетов.

6yrop

Рекомендую не использовать оператор ";" в командах, а по-честному их разбить.
может не в кассу, но в .NET для MSSQL очень даже рекомендую использовать ";", нагрузка на базу меньше, выполняется быстрее. Никаких побочных негативных эффектов нет.

evgen5555

А вообще - DataSet у тебя один, из него рекордсеты вытягиваются - это другое дело.

evgen5555

Как в дотнете это сделано - DataSet перегружается, доступ к его таблицам осуществляется через проперти Tables["name"].

Slavaga

Ну хорошо, как тогда осуществлять переходы между рекорсетами?

evgen5555

Вообще, конечно, в дельфи лет пять не писал, но чую, что
DS->First;
While not EOF do
{blablabla}
DS->Next

Slavaga

Так осуществляется переход от строки к строке в текущем рекордсете.

Slavaga

Проблема решилась после того, как была написана обертка над TADOConnection.
После вополнения запроса ADOConnection->Execute(CommandText); формируется список (по типу TList) возвращенных рекордсетов.
Дальше все должно стать просто красиво и удобно.
Оставить комментарий
Имя или ник:
Комментарий: