![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
InterBase SQL. Узнать количество записей. [D2005, XP]
Философ Огня © (2006-12-22 08:23:00)Есть код
with DataModule1 do begin
ibTransaction.StartTransaction;
ibSQL1.GoToFirstRecordOnExecute := True;
ibSQL1.SQL.Clear;
ibSQL1.SQL.Text := 'SELECT * FROM CALLS WHERE '+ SQL + ' ORDER BY "DATE"';
ibSQL1.ExecQuery;
Result := ibSQl1.RecordCount;
{ while not ibSQL1.Eof do with ibSQL1 do begin
Application.ProcessMessages;
Inc(Result);
Next;
end;}
ibTransaction.Commit;
ibSQL1.Close;
end;
таквыделено то, как я пытался сделать. тупо - записей больше 100000.
так получается ерунда, в справке написано, что надо пройтись по всем записям, чтобы это число стало правильным.а это значит - вернуться к тому же.
Пожалуйста, подскажите, как?
Anatoly Podgoretsky (2006-12-22 11:48:00) [1]> Философ Огня (22.12.2006 8:23:00) [0]
Ерунда из-за того, что тупо 100 000 записей.
А они нужны?
DrPass (2006-12-22 10:23:00) [2]
> ЮЮ © (22.12.06 08:36) [6]
Телепатор, особо не напрягаясь, предположил, что у IBSQL1 тип TIBSQL. Это не наследник TDataSet.
> Там дело в том, что нужно получать количество звонков за
> последний час по выборке SELECT * FROM CALLS WHERE дата
> время
Лучший вариант - либо select count(*) from..., либо, если возвращаемый набор невелик, вытащить его целиком и посчитать
ЮЮ (2006-12-22 08:36:00) [3]
> Кстати, у ibSQL1 нет метода last
кстати тип ibSQL1 не указан, но по косвенным признакам он похож не наследника TDataSet, а значит и Last у него быть должен.
Философ Огня (2006-12-22 08:33:00) [4]Кстати, у ibSQL1 нетметода last
ЮЮ (2006-12-22 08:33:00) [5]Если нужно только количечество и в Label, то - первый. Если же все записи в грид-е показать и где-то их кол-во - то второй.
Философ Огня (2006-12-22 08:32:00) [6]Кстати, у ibSQL1 нетметода last
Философ Огня (2006-12-22 08:29:00) [7]Извините. Не сообразил :-)
Там дело в том, что нужно получать количество звонков за последний час по выборке SELECT * FROM CALLS WHERE дата время и выдавать в Label'е это количество. И какой вариант лучше использовать?
ЮЮ (2006-12-22 08:27:00) [8]Если интересует именно количество, то его и надо спрашивать у сервера:
SELECT СOUNT(*)FROM CALLS WHERE
Если же интересует сколько записей закачал с сервера на клиент, то, естественно, их надо сначал закачать. ibSQL1.Last; ibSQL1.RecordCount;