[CLOSED]Delphi или C++ Builder - датасеты ADO
Не может такого быть!
который возвращает два датасета.
Может. Щас запостю код.
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>
<...>
А мне нужно сначала работать с последним датасетом, а потом с первыми.
Второе - смысл RecordsAffected станет ясен только после UPDATE или DELETE
Рекомендую не использовать оператор ";" в командах, а по-честному их разбить.У меня ситуация более сложная - работаю с хранимками, которые возвращают наборы датасетов.
Рекомендую не использовать оператор ";" в командах, а по-честному их разбить.может не в кассу, но в .NET для MSSQL очень даже рекомендую использовать ";", нагрузка на базу меньше, выполняется быстрее. Никаких побочных негативных эффектов нет.
А вообще - DataSet у тебя один, из него рекордсеты вытягиваются - это другое дело.
Как в дотнете это сделано - DataSet перегружается, доступ к его таблицам осуществляется через проперти Tables["name"].
Ну хорошо, как тогда осуществлять переходы между рекорсетами?
DS->First;
While not EOF do
{blablabla}
DS->Next
Так осуществляется переход от строки к строке в текущем рекордсете.
После вополнения запроса ADOConnection->Execute(CommandText); формируется список (по типу TList) возвращенных рекордсетов.
Дальше все должно стать просто красиво и удобно.
![](/images/graemlins/cool.gif)
Оставить комментарий
Slavaga
Работаю с TADODataSet.Есть у меня запрос, например:
который возвращает два датасета.
Как узнать сколько датасетов вернул запрос?
Как можно обращаться к произвольному датасету по индексу?