Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Количество RecordSet ов 


DmitryV   (2002-04-02 09:53) [0]

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

С уважением



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

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

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

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

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



Aleksandr   (2002-04-02 18:02) [9]

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

if FindField(Name1) then...

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



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

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



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

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

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

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

С уважением



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

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



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

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

С уважением



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

Действительно провайдер 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;



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

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



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

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

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

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



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

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



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

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

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

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




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.039 c
6-69958           ctapik-net            2002-01-18 06:52  2002.04.22  
Как зная IP адрес компа в сети получить его имя?


14-70021          KvORubin              2002-03-17 18:24  2002.04.22  
RichEdit - как в нём отобразить непечатаемые символы (как в M.Office)


3-69735           Ежик                  2002-04-01 13:30  2002.04.22  
Как програмно посчитать кол-во записей в БД?


3-69705           stal67                2002-03-30 20:21  2002.04.22  
ComboBox для отображения связанных таблиц


1-69835           Lego                  2002-04-11 02:50  2002.04.22  
Как остановить ?