Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+ADO / 25 сообщений из 27, страница 1 из 2
07.02.2003, 11:14
    #32102854
Eugeni
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
У меня хранимая процедура возвращает несколько Recordset.
Перемещаться по ним я знаю как .NextRecordset()
Вопрос: А как при перемещении по ним мне узнать, что этот RecordSet последний?
...
Рейтинг: 0 / 0
07.02.2003, 23:25
    #32103310
shane54
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Ну наверно в цикле типа

while NOT ADOQuery.EOF do begin
... чо то там делаешь;
ADOQuery.NextRecordSet; end;
...
Рейтинг: 0 / 0
10.02.2003, 07:52
    #32103619
Eugeni
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Это все понятно.
while NOT ADOQuery.EOF do begin
... чо то там делаешь;
ADOQuery.NextRecordSet;-А если следующего recordset не существует, то будет ошибка.
Вообще я так и сделал только
try
ADOQuery.NextRecordSet
except
end;
Но хотелось бы без try. Как узнать существует RecordSet или нет? Всю башку сломал.
...
Рейтинг: 0 / 0
12.02.2003, 22:15
    #32105426
senyag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Мне кажется, что вам надо последовать совету shane54. Когда отлавливаешь EOF в цикле, то насколько я понимаю, исключение не выбрасывается. Вы, на данный момент, просто пишете Next, не проверяя EOF - и, понятное дело, получаете исключение. По крайней мере я кучу раз так делал, и всё было нормально.
...
Рейтинг: 0 / 0
13.02.2003, 07:34
    #32105479
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
2 shane54, senyag
С каких пор EOF свидетельствует о том, что нет следующего рекордсета?

2 Eugeni
А NextRecordSet разве не возвращает _Recordset ? Может, получится проверить на nil?
...
Рейтинг: 0 / 0
13.02.2003, 07:51
    #32105483
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
В MSDN-е, по крайне мере, написано так:
When there are no more results, recordset will be set to Nothing.
...
Рейтинг: 0 / 0
13.02.2003, 08:30
    #32105496
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
а просто NEXT чем отличается?
...
Рейтинг: 0 / 0
13.02.2003, 08:38
    #32105497
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Отличается от чего?

Если от NextRecordSet, то Next - возвращает следующую запись в текущем RecordSet-е, а NextRecordSet - следующий объект RecordSet (с другим набором данных).
...
Рейтинг: 0 / 0
13.02.2003, 08:50
    #32105500
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
спрошу попутно
while not adoquery1.eof do
begin
....
adoquery1.next;
end;
выдает ошибку
как надо?
...
Рейтинг: 0 / 0
13.02.2003, 09:23
    #32105519
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Все правильно, так и надо. Ошибки быть не должно. (Если adoquery1 не закрыто или не nil )
...
Рейтинг: 0 / 0
13.02.2003, 09:34
    #32105529
Natalka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
а ведь есть!
list index out
...
Рейтинг: 0 / 0
13.02.2003, 09:41
    #32105537
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Не смог добится этой ошибки. Можно исходник посмотреть?
...
Рейтинг: 0 / 0
13.02.2003, 09:57
    #32105549
Natalka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
count:=ADOQuery1.recordCount;
Form_data.StringGrid1.RowCount:=count;
for i:=1 to count do
begin
for j:=1 to myconst do form_data.stringgrid1.cells[j-1,i-1]:=ADOQuery1.Fields[j-].Asstring;
if count<> i then ADOQuery1.next;
end;
вот этот бред работает
while not ADOQuery1.eof do
begin
for j:=1 to myconst do form_data.stringgrid1.cells[j-1,i-1]:=ADOQuery1.Fields[j-].Asstring;
ADOQuery1.next;
end;
а здесь ошибка
...
Рейтинг: 0 / 0
13.02.2003, 10:01
    #32105556
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Код: plaintext
1.
2.
3.
4.
while not ADOQuery1.eof do 
begin 
for j:= [b]1  to myconst do form_data.stringgrid1.cells[j- 1 ,i- 1 ]:=ADOQuery1.Fields[j-].Asstring; 
ADOQuery1.next; 
end; [/b]

А как здесь i считается?
...
Рейтинг: 0 / 0
13.02.2003, 10:09
    #32105564
Natalka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
забыла дописать
inc(i) в цикле
но ошибка не в этом
...
Рейтинг: 0 / 0
13.02.2003, 10:17
    #32105569
Jozo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
На сколько я помню в цыкле For никаких Inc(i), т.к. цикл сам увеличивает начальную точку на 1 и потом если писпать for i:=1 to recordcount
то первая запись выборки выпадет из цыкла
...
Рейтинг: 0 / 0
13.02.2003, 10:17
    #32105570
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Похоже, что ошибка при расчете i или j. ListIndexOutOfBound - это же ошибка из коллекций, может быть Fields или Cells?
...
Рейтинг: 0 / 0
13.02.2003, 10:18
    #32105571
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
2 Jozo
Inc(i) - Это про второй кусок кода
...
Рейтинг: 0 / 0
13.02.2003, 10:25
    #32105573
Natalka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
вы меня совсем запутали
напишите, плз, как из адоквейри записать в стринггрид правильно
Jozo, я там где-то 1 потеряла (j-)
...
Рейтинг: 0 / 0
13.02.2003, 10:35
    #32105593
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
form_data.stringgrid1.RowCount := ADOQuery1.RecordCount;
i :=  0 ;
ADOQuery1.First;
while not ADOQuery1.eof do 
begin 
  for j :=  1  to ADOQuery1.Fields.Count -  1  do 
    form_data.stringgrid1.cells[j -  1 , i] := ADOQuery1.Fields[j -  1 ].AsString; 
  ADOQuery1.Next; 
  Inc(i);
end;
...
Рейтинг: 0 / 0
13.02.2003, 10:36
    #32105594
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Пардон

for j := 0 to ADOQuery1.Fields.Count - 1 do
...
Рейтинг: 0 / 0
13.02.2003, 10:37
    #32105596
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
Еще раз

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
form_data.stringgrid1.RowCount := ADOQuery1.RecordCount;
i :=  0 ;
ADOQuery1.First;
while not ADOQuery1.eof do 
begin 
  for j :=  0  to ADOQuery1.Fields.Count -  1  do 
    form_data.stringgrid1.cells[j, i] := ADOQuery1.Fields[j].AsString; 
  ADOQuery1.Next; 
  Inc(i);
end;
...
Рейтинг: 0 / 0
13.02.2003, 10:39
    #32105597
senyag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
По поводу первого вопроса Eugeni: в борландовском хелпе (DevGuide: Developing database applications - Fetching multiple result sets) написано нижеследующее:

The first time you call NextRecordSet, it returns the second set of records. Calling NextRecordSet again returns a third dataset, and so on, until there are no more sets of records. When there are no additional cursors, NextRecordSet returns nil.

То есть всего то надо проверить на нил, как Артём1 и советует.

2 Артем1: насчет ЕОФ - это была лажа... Сорри... :)

2 Natalka: ошибка точно не с запросом, вещи типа

while not adoquery1.eof do
begin
....
adoquery1.next;
end;

все многократно использовали в своей работе, и всё работает (только вчера писал такого типа код)
...
Рейтинг: 0 / 0
13.02.2003, 10:42
    #32105599
Natalka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
вообще то у меня тоже самое
но не работает
eoleexception
...
Рейтинг: 0 / 0
13.02.2003, 10:42
    #32105601
senyag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ADO
2 Natalka: а вы дбгрид по какой-то причине не хотите использовать, или просто пострадать за правду охота?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+ADO / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]