Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
Спасибо за отклики



Страницы: 1 вся ветка

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

Наверх





Память: 0.48 MB
Время: 0.008 c
3-69732
neos
2002-03-29 12:36
2002.04.22
Кнопка поля просмотра в TDBGrid


14-70013
hooky-mars
2002-03-13 12:41
2002.04.22
Проверка


1-69855
gray1
2002-04-09 09:41
2002.04.22
pageUP pageDOWN


7-70035
ATLANTIDO
2002-01-25 20:26
2002.04.22
F8 - DISABLE


14-69968
B@Nt
2002-03-11 11:45
2002.04.22
Где мона слить книгу по Базам?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский