Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как выбрать и записать общее количество записей из


Автор: Guest 31.1.2005, 22:20
Здрасте всем!!!
Скажите пожалуйста, как мне выбрать общее количество записей из Базы, запихнуть это число в переменную, и затем эту переменную присвоить Label1.Caption := AllRecords; ?
У меня используется Access, запросы делаю через ADOQuery на DBGrid.
Плиз!
Заранее благодарю!

Автор: Kesh 31.1.2005, 23:53
А что, разве ADOQuery.RecordCount - не работает?..

Автор: Medved 1.2.2005, 00:55
Код

  with ADOQuery1 do
  begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT Count(*) as FiledResult FROM MyTable');
     try
       Open;
     
       Label1.Caption := FieldValues['FiledResult'];
     finally
        Close;
     end;
 end;  

Автор: Kesh 1.2.2005, 01:04
Pegas Я понимаю, что предложенное тобой решение оптимальнее с точки зрения экономии ресурсов, но обрати внимание, что человек все равно
Цитата(Guest @ 31.1.2005, 22:20)
запросы делаю через ADOQuery на DBGrid.

Так имеет ли смысл прогонять еще один запрос для того, чтобы получить количество записей?..

Автор: Medved 1.2.2005, 01:41
Я просто показал, как это можно сделать через запрос.
а вообще-то конечно в этом случае лучше:
Код

Label1.Caption := IntToStr(ADOQuery1.RecordCount);

Автор: Vit 1.2.2005, 16:46
Цитата(Pegas @ 31.1.2005, 16:41)
а вообще-то конечно в этом случае лучше:

Код

Label1.Caption := IntToStr(ADOQuery1.RecordCount);



не будет работать smile

Надо так:

Код

ADOQuery1.Last;
Label1.Caption := IntToStr(ADOQuery1.RecordCount);


Только не считайте меня идиотом и не возражайте что "У МЕНЯ РАБОТАЕТ". Собака порылась в том что ADO - это клиент сервер, и прием данных осуществляется по частям в зависимости от размера буффера поэтому пока не перейдёшь на последнюю запись RecordCount будет для маленьких выборок показывать правильное значение, а для больших - то количество записей которое поместилось в локальный буффер. Однако на серьёзном клиент сервере такое хождение по выборке вперёд назад, особенно если выборка большая, приводит к 2м негативным явлениям:

1) Сетевой трафик, несколько раз перебрасываются данные с сервера на клиент
2) Накладывание дополнительных блокировок на сервер, обычно стоит на сервере page lock - т.е. блокируется страница на которой находится курсор, "гуляние" курсора по таблице вызывает увеличение блокировок и негативно сказывается на других клиентах работающих с таблицей.

Поэтому если выборка маленькая, то этот метод применим, а если большая, то лучше тем же или отдельным запросом сделать Select Count(*)

Автор: Kesh 1.2.2005, 18:25
Vit Спасибо... как то не задумывался об этом...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)