Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Счетчик таблицы в IB   Найти похожие ветки 

 
Piero   (2005-08-26 10:47) [0]

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;

есть ли способ попроще, спасибо


 
Desdechado ©   (2005-08-26 10:55) [1]

1. Не используй Table для работы с IB. Это устаревший неэффективный путь. Почему - см. ibase.ru
2. Работай с IB через запросы. Количество записей определяется SELECT Count(*) FROM Tab


 
P.N.P. ©   (2005-08-26 10:55) [2]

TIBTable -фтопку!
Используй TIBDataSet или TIBQuery. Это вопервых.
Во вторых сделай датасету Last,First
или после открытия FetchAll и RecordCount
вернет нормальное значение.


 
dolmat   (2005-08-26 11:03) [3]

open; это и есть active:=true; оставь что-нить одно


 
Piero   (2005-08-26 11:28) [4]

Спасибо


 
Piero   (2005-08-26 17:06) [5]

IBQuery1.sql.text:="SELECT Count(*) FROM T_Obj"

запрос сделал, работает нормально, а как получить значение в Delphi? т.е. непосредственно количество записей


 
Zacho ©   (2005-08-26 17:21) [6]

Piero   (26.08.05 17:06) [5]

1. Не стоит использовать TIBQuery вообще. А именно для таких запросов самое подходящее - TIBSQL.
2. См. help по компоненту. Там всё есть.
Например, в случае с TIBQuery : MyVar:=IBQuery1.Fields[0].AsInteger;


 
P.N.P. ©   (2005-08-26 18:39) [7]

>Zacho ©   (26.08.05 17:21) [6]
>1. Не стоит использовать TIBQuery вообще.
Это почему это вдруг??


 
Zacho ©   (2005-08-26 19:18) [8]

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 19:39) [9]

>Zacho ©   (26.08.05 19:18) [8]
Хорошо. Для задач read/write TIBDataSet - самое оно, я не спорю,
и даже не собирался спорить, но вот для readonly датасетов
(например для справочников) использовать TIBDataSet это как-то
нелогично, согласитесь? И в данном случае, для отображения результата запроса select count... использование TIBQuery
вполне приемлимо.


 
Zacho ©   (2005-08-26 20:06) [10]

P.N.P. ©   (26.08.05 19:39) [9]
но вот для readonly датасетов
(например для справочников) использовать TIBDataSet это как-то
нелогично, согласитесь?


Не соглашусь. В чём нелогичность ?

>использование TIBQuery
> вполне приемлимо.

Да, приемлемо. Но зачем, когда этой задаче полностью соответствует гораздо более простой TIBSQL ? (также см. п.4 в [8] )


 
}{ander ©   (2005-08-27 09:39) [11]

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.

Честно говоря, не вижу причин, почему его не использовать...


 
}{ander ©   (2005-08-27 09:41) [12]

Кстати, в догонку:
TIBSQL provides an object for executing an InterBase SQL statement with minimal overhead.

TIBSQL, в принципе, позиционируется, как компонент для выполнения операций, не связанных с выборкой данных, хотя и имеет (мне кажется зря) такую функциональность.


 
Zacho ©   (2005-08-27 10:50) [13]

}{ander ©   (27.08.05 9:39) [11]

А зачем использовать TIBQuery с его функциональнстью, когда достаточно TIBSQL ?


 
}{ander ©   (2005-08-27 13:05) [14]

2 Zacho ©   (27.08.05 10:50) [13]

Это дело вкуса :-)


 
Piero   (2005-08-29 15:03) [15]

Запрос сделал, работает нормально

IbQuery1.text.sql:="SELECT Count(*) FROM T_Obj",
но как в программе, получить результат этого запроса?


 
Zacho ©   (2005-08-30 05:28) [16]

Piero   (29.08.05 15:03) [15]

Я же тебе уже ответил в [6]
В чём проблемы ?


 
tomkat   (2005-08-30 17:18) [17]

А чем не нравится
myvar:integer;
myvar:=ibDataSet1.RecordCount;

еще не было ни одного случая, чтоб это не сработало ....
даже fetchAll не надобилось ....


 
Zacho ©   (2005-08-30 17:41) [18]

tomkat   (30.08.05 17:18) [17]
еще не было ни одного случая, чтоб это не сработало


Тебе просто повезло.
Читай хелп по IBX.
И больше никогда так не делай.



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

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
4-1123407155
Sphinx
2005-08-07 13:32
2005.10.09
Код создания окна не работает в dll


1-1126781238
Aliv
2005-09-15 14:47
2005.10.09
установить ограничение после запятой


1-1126869452
Николай1
2005-09-16 15:17
2005.10.09
Проверить наличие события у компонента


8-1116243660
Fl@sh
2005-05-16 15:41
2005.10.09
Прозначный BitMap


1-1127215611
Aleksandr.
2005-09-20 15:26
2005.10.09
Похоже, я разучился собирать res-файл...