![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Счетчик таблицы в IB [IB4.x, IB5.x, IB6.x]
Piero © (2005-08-26 10:47:00)t : TIBTable
Не могу узнать число записей в таблице - t.RecordCount - почему-то не работае, приходиться действовать так:
result:=0;
with t do
begin
open;active:=true;first;
while not EOF do
begin
result := result+1;
next;
end;
active:=false;close;
end;
есть ли способ попроще, спасибо
Zacho (2005-08-30 17:41:00) [1]tomkat (30.08.05 17:18) [17]
еще не было ни одного случая, чтоб это не сработало
Тебе просто повезло.
Читай хелп по IBX.
И больше никогда так не делай.
tomkat (2005-08-30 17:18:00) [2]А чем не нравится
myvar:integer;
myvar:=ibDataSet1.RecordCount;
еще не было ни одного случая, чтоб это не сработало ....
даже fetchAll не надобилось ....
Zacho (2005-08-30 05:28:00) [3]Piero (29.08.05 15:03) [15]
Я же тебе уже ответил в [6]
В чём проблемы ?
Piero (2005-08-29 15:03:00) [4]Запрос сделал, работает нормально
IbQuery1.text.sql:='SELECT Count(*) FROM T_Obj',
но как в программе, получить результат этого запроса?
}{ander (2005-08-27 13:05:00) [5]2 Zacho © (27.08.05 10:50) [13]
Это дело вкуса :-)
Zacho (2005-08-27 10:50:00) [6]}{ander © (27.08.05 9:39) [11]
А зачем использовать TIBQuery с его функциональнстью, когда достаточно TIBSQL ?
}{ander (2005-08-27 09:41:00) [7]Кстати, в догонку:
TIBSQL provides an object for executing an InterBase SQL statement with minimal overhead.
TIBSQL, в принципе, позиционируется, как компонент для выполнения операций, не связанных с выборкой данных, хотя и имеет (мне кажется зря) такую функциональность.
}{ander (2005-08-27 09:39:00) [8]2 Zacho © (26.08.05 20:06) [10]
> Не соглашусь. В чём нелогичность ?
А зачем использовать TIBDataSet с его функциональностью, если нет изменения данных - нужно-то всего лишь получить одну цифру! И изменять ее никто не собирается.
А насчет TIBQuery vs TIBSQL, то
Use TIBQuery to access one or more tables in a database using SQL statements. The TIBQuery component provides a read-only dataset, and adapts well to the InterBase client/server environment.
Честно говоря, не вижу причин, почему его не использовать...
Zacho (2005-08-26 20:06:00) [9]P.N.P. © (26.08.05 19:39) [9]
но вот для readonly датасетов
(например для справочников) использовать TIBDataSet это как-то
нелогично, согласитесь?
Не соглашусь. В чём нелогичность ?
>использование TIBQuery
> вполне приемлимо.
Да, приемлемо. Но зачем, когда этой задаче полностью соответствует гораздо более простой TIBSQL ? (также см. п.4 в [8] )
P.N.P. (2005-08-26 19:39:00) [10]>Zacho © (26.08.05 19:18) [8]
Хорошо. Для задач read/write TIBDataSet - самое оно, я не спорю,
и даже не собирался спорить, но вот для readonly датасетов
(например для справочников) использовать TIBDataSet это как-то
нелогично, согласитесь? И в данном случае, для отображения результата запроса select count... использование TIBQuery
вполне приемлимо.
Zacho (2005-08-26 19:18:00) [11]P.N.P. © (26.08.05 18:39) [7]
А зачем это использовать ? Вообще, моё предубеждение к TIBQuery и TIBTable скорее субъективно, чем объективно, так что извеняюсь, что не добавил imho ...
Но:
Во-первых, (хотел привести текст из хелпа, но не нашёл, хотя точно помню, что это было в хелпе к IBX, возможно это было в D6) TIBTable и TIBQuery предназначены для облегчения перевода проектов с BDE на IBX или в случае, если в дальнейшем планируется перевод на BDE-like компоненты.
Во-вторых: для всех случаев вполне достаточно TIBDataSet и TIBSQL.
В-третьих: Нафига использовать два компонента (TIBQuery и TIBUpdateSQL) вместо одного TIBDataSet ?
В 4-х: Нафиг оверхэд при использовании TIBQuery, когда для задачи достаточно TIBSQL ?
В 5-х: Честно скажу, не знаю как в современных версиях IBX, но в IBX 6.0 при использовании TIBQuery+TIBUpdateSQL невозможно было использовать ХП в ModifySQL, InsertSQL и DeleteSQL. А вот в TIBDataSet - без проблем.
В 6-х: (подтверждать - ломы, так что можете считать недостоверным). Неоднократно на этом форуме проблемы решались тем, что вместо TIBQuery вопрошающий применял TIBDataSet.
В общем, использование только TIBDataSet и TIBSQL и неиспользование TIBQuery и TIBTable облегчает разработку и уменьшает возможные проблемы :)
P.N.P. (2005-08-26 18:39:00) [12]>Zacho © (26.08.05 17:21) [6]
>1. Не стоит использовать TIBQuery вообще.
Это почему это вдруг??
Zacho (2005-08-26 17:21:00) [13]Piero (26.08.05 17:06) [5]
1. Не стоит использовать TIBQuery вообще. А именно для таких запросов самое подходящее - TIBSQL.
2. См. help по компоненту. Там всё есть.
Например, в случае с TIBQuery : MyVar:=IBQuery1.Fields[0].AsInteger;
Piero (2005-08-26 17:06:00) [14]IBQuery1.sql.text:='SELECT Count(*) FROM T_Obj'
запрос сделал, работает нормально, а как получить значение в Delphi? т.е. непосредственно количество записей
Piero (2005-08-26 11:28:00) [15]Спасибо
dolmat (2005-08-26 11:03:00) [16]open; это и есть active:=true; оставь что-нить одно
Desdechado (2005-08-26 10:55:00) [17]1. Не используй Table для работы с IB. Это устаревший неэффективный путь. Почему - см. ibase.ru
2. Работай с IB через запросы. Количество записей определяется SELECT Count(*) FROM Tab
P.N.P. (2005-08-26 10:55:00) [18]TIBTable -фтопку!
Используй TIBDataSet или TIBQuery. Это вопервых.
Во вторых сделай датасету Last,First
или после открытия FetchAll и RecordCount
вернет нормальное значение.