Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Количество RecordSet ов [D5, MSSQL]


DmitryV ©   (2002-04-02 09:53:00) 

Привет всем!
Возник такой вот вопрос: как узнать количество возвращаемых сторедом рекордсетов? Никто с этим не сталкивался?

С уважением


DmitryV   (2002-04-03 11:18:00) [1]

>Delirium ©
Спасибо, учтем :-)

>Lusha ©
Эту процедуру я привел только, как пример... Хотя тоже занимаюсь программкой по администрированию :-))

>All
Спасибо за отклики


SergSuper   (2002-04-03 10:43:00) [2]

2 DmitryV
Скорее всего такого понятия как "количество возвращаемых рекордсетов" нет и поэтому узнать его невозможно. Если данные рекордсета приходят сразу (т.е. последовательно все записи без перерыва), то сами рекордсеты могут приходить время от времени по ходу выполнения запроса. Например так работают процедуры для Profiler-а: при наступлении какого-либо события они кидают рекордсет с какой-то строкой(тект запроса например), а клиентская программа постоянно ждет рекордсеты.


Lusha   (2002-04-03 09:05:00) [3]

>DmitryV ©
Не ошибаетесь. Я познакомился с sp_helplogins и в очередной раз убедился, что ребята Billy могут опошлить любую замечательную идею. Средств для работы с этой хренью у BDE я не нашел... :(

Видимо кесарю кесарево и работать с этой хренью можно только при помощи другой (то бишь ADO)...

Кстати, а если не секрет для чего Вы используете сию процедуру. В свое время писал программу по администрированию и для MS SQL. И необходимости в этой процедурке не было... как то без нее обошелся... :)


Delirium   (2002-04-02 19:37:00) [4]

> sniknik
пустой рекордсет возвращается не как nilЕсли RecordSet<>nil, то возможно что его _RecorSet.State=adStateClosed (ADOInt.pas) это надо учитывать при работе с хранимыми процедурами


Delirium   (2002-04-02 19:26:00) [5]

Действительно провайдер MSSQL поддерживает multiple recordsets - т.е. в результате выполнения одного блока SQL инструкций можно получить множество наборов данных. Найти их количество к сожалению можно только экспериментально - в процессе получения:

procedure TForm1.Button1Click(Sender: TObject);
var R:_RecordSet;
i:integer;
begin
R:=ADOQuery1.Recordset; // первый из набора
while true do
begin
R:=ADOQuery1.NextRecordset(i); // остальные
if R=nil then break;
ShowMessage(IntToStr(i)); // RecordCount
end;
end;


DmitryV   (2002-04-02 18:13:00) [6]

>sniknik © (02.04.02 18:10)
Примерно так:
...
ADODataSet1.RecordSet:=ADOQuery1.NextRecordSet(n);
...
Что потом делать с ADODataSet"ом - тебе виднее :-)

С уважением


sniknik   (2002-04-02 18:10:00) [7]

наверное имеется в виду NextRecordset но все одно как с ним работать?


DmitryV   (2002-04-02 18:09:00) [8]

>Mike_Goblin ©
Thanks, у меня была подобная мысль, но хотелось уточнить :-))
Кстати, при таком подходе не возникает коллизий, когда один из рекордсетов пустой? Иными словами, пустой рекордсет возвращается не как nil?

>sniknik ©
:-) Вопросов я и правда мало задаю, так что практики не хвататет...

>Lusha © (02.04.02 18:01)
Подобный код, если я не ошибаюсь, будет работать только с первым рекордсетом.

С уважением


sniknik   (2002-04-02 18:05:00) [9]

to Mike_Goblin ©
getNextRecordSet это к чему относится? поясни пожалуйста. и одари кусочком кода pls.


Aleksandr   (2002-04-02 18:02:00) [10]

В Делфи только неявными обращениями работать с ними... То есть не создавать в компоненте зашитых полей, а работать по принципу

if FindField(Name1) then...

Или сделать в процедуре выходной параметр, который и будет возвращать количество наборов данных... Если речь идет о количестве наборов данных...


Lusha   (2002-04-02 18:01:00) [11]

>DmitryV
ОК. Я вечером дома посмотрю, что возвращает sp_helplogins...

А Вам рекоммендую

Query.SQL.Text := "sp_helplogins";
Query.Open;
Query.FetchAll;

Query.RecordCount // Количество возвращеных записей


Mike_Goblin   (2002-04-02 18:00:00) [12]

Как получить количество тоже не нашел, однако оно мне и не надо было.
Делал цикл while и вызываел getNextRecordSet, и когда возвращаемый RecordSet = nil - то все прошли все RecordSet-ы


sniknik   (2002-04-02 17:54:00) [13]

в MSSQL можно так. и даже не в процедуре а в блоке несколько разнотипных селектов. в Query Analizer срабатывает. а как в Delphi не знаю.
DmitryV © тебе действительно нужна практика по заданию понятных вопросов!


DmitryV   (2002-04-02 17:52:00) [14]

Угу
Пример: sp_helplogins
возвращает два набора данных, разных по структуре :-)


Lusha   (2002-04-02 17:45:00) [15]

Не понял. Одномоментно одной и той же хранимой процедурой возвращаются наборы записей разной структуры?


DmitryV   (2002-04-02 17:40:00) [16]

>Lusha ©
сторед - это на самом деле хранимая процедура, а вот рекордсет - это набор записей, причем структура возвращаемых рекордсетов, как правило, разная :-)


Lusha   (2002-04-02 17:21:00) [17]

Если сторед это хранимая процедура, а рекордсет - запись, тогда открыть набор данных и посмотреть RecordCount. :)


DmitryV   (2002-04-02 17:09:00) [18]

Хм...
Это я вопросы задавать не умею или на самом деле никто не сталкивался :-)?


Наверх

Титульная страница Поиск, карта сайта Написать письмо