Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
ВнизQuery.Eof или Query.recordcount. Найти похожие ветки
← →
noob_one (2008-11-17 16:28) [0]Какой вариант правильнее использовать для обработки всех строк запроса?
Возник спор.
Я пользуюсьwhile not Query.Eof do
begin
...
Query.next;
end;
Человек настаивает наrec:=Query.RecordCount;
i:=0;
while i<rec do
begin
...
inc(i);
Query.next;
end;
На тестах оба варианта отрабатывали примерно равное время. Какой все же правильный? И каким тестом это можно выявить?
← →
Sergey13 © (2008-11-17 16:34) [1]Попроси человека отработать свой вариант например на интербейсовском сервере.
Ну или справку по RecordCount почитать.
← →
Anatoly Podgoretsky © (2008-11-17 16:34) [2]> noob_one (17.11.2008 16:28:00) [0]
Человека выгнать на переобучение.
← →
Palladin © (2008-11-17 16:39) [3]
> Какой все же правильный?
вне всяких сомнений Eof
> И каким тестом это можно выявить?
создаете базу mdb (Access)
создаете таблицу test любой структуры, заносите несколько записейq:=TADOQuery.Create(Nil);
Try
q.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyDocuments\db3.mdb;Persist Security Info=False";
q.CursorType:=ctOpenForwardOnly;
q.sql.text:="select * from test";
q.Open;
ShowMessage(IntToStr(q.RecordCount));
q.Close;
Finally
q.Free;
End;
и друг, с визгом дикого поросенка, признает свою неправоту... и компенсирует моральный ущерб...
← →
Ega23 © (2008-11-17 16:43) [4]
> Какой вариант правильнее использовать для обработки всех
> строк запроса?
TDataSet.RecordCount + F1
← →
noob_one (2008-11-17 16:45) [5]>
> Попроси человека отработать свой вариант например на интербейсовском
> сервере.
> Ну или справку по RecordCount почитать.
Дело в том, что человек работает на Interbase и справка ему не указ. 8-(Note: Use RecordCount with care, because record counting can be a costly operation, especially for SQL queries that return large result sets. Generally, an application should only use RecordCount with Paradox and dBASE tables.
Утверждает, что некоторые обработки при применении второго варанта работают быстрее. Показать, правда, отказался.
← →
noob_one (2008-11-17 16:46) [6]> [1] Sergey13 © (17.11.08 16:34)
> Попроси человека отработать свой вариант например на интербейсовском
> сервере.
> Ну или справку по RecordCount почитать.
Дело в том, что он как раз работает на Interbase и справка ему не указ. утверждает что некоторые обработки стали работать быстрее.
← →
Anatoly Podgoretsky © (2008-11-17 16:49) [7]> Ega23 (17.11.2008 16:43:04) [4]
Плюс курсоры
← →
Sergey13 © (2008-11-17 16:57) [8]> [5] noob_one (17.11.08 16:45)
Что то сомнительно мне что указанный код без доработок будет правильно работать на ИБ чеерз БДЕ.
← →
noob_one (2008-11-17 17:02) [9]> Что то сомнительно мне что указанный код без доработок будет
> правильно работать на ИБ чеерз БДЕ.
В том-то и дело, что все запросы исправно возвращают Recordcount.
Может действительно есть какая-то доработка. Ее можно каким-либо образом обнаружить?
← →
Anatoly Podgoretsky © (2008-11-17 17:04) [10]> noob_one (17.11.2008 17:02:09) [9]
Зачем?
Когда есть работающий во всех случаях первый вариант, что за желание играть в рулетку?
← →
noob_one (2008-11-17 17:06) [11]Я проверял на разных запросах.
безо всяких fetchall. простоQuery.Open;
rec:=Query.RecordCount;
срабатывает
← →
noob_one (2008-11-17 17:07) [12]> Когда есть работающий во всех случаях первый вариант, что
> за желание играть в рулетку?
Говорит стало намного быстрее...
← →
Сергей М. © (2008-11-17 17:22) [13]
> срабатывает
RecordCount обязано либо вернуть некое ц/ч значение N >= 0 ("сработало") либо возбудить исключение ("не сработало")
Т.е. ты не получил исключение, так ?
← →
noob_one (2008-11-17 17:35) [14]> Т.е. ты не получил исключение, так ?
Да.
И на проверенных запросах это число совпадает с количеством строк результата.
Количество строк небольшое - до 2000.
← →
Сергей М. © (2008-11-17 18:53) [15]
> на проверенных запросах
С произвольным курсором ?
С сервером на хосте в Задрищенске ?
← →
asail (2008-11-17 18:58) [16]А в BDE оно и должно работать... А вот в IBX не будет однозначно!
Мы тут как-то переходили с BDE на IBX - пришлось все RecordCount на EOF менять, а иначе - никак.
← →
Сергей М. © (2008-11-17 19:13) [17]
> в BDE оно и должно работать
Эт что, в Талмуте так завещано ?
Или отсебячина ?
← →
asail (2008-11-17 20:19) [18]
> Сергей М. © (17.11.08 19:13) [17]
>
> > в BDE оно и должно работать
>
>
> Эт что, в Талмуте так завещано ?
> Или отсебячина ?
С практики собственной... Хотя самому странно - я понимаю, что RecordCount возвращает кол-во закэшированных в датасете записей, но вот у нас несколько прог работало с десяток лет и ничего - значения возвращались верные, даже на датасетах в сотни тысяч записей... Причем, в параметрах BDE-алиаса всегда стояло по дефолту: "BATCH COUNT = 200". Перевести все поголовно на Eof пришлось при переходе c BDE на IBX.
Так-что можно считать отсебячиной... :-)
← →
Сергей М. © (2008-11-17 20:27) [19]
> Так-что можно считать отсебячиной.
Оно и видно.
BDE <> Paradox
← →
MsGuns © (2008-11-17 21:50) [20]аднака развод
← →
asail (2008-11-17 22:20) [21]
> BDE <> Paradox
Причем тут Paradox?.. Ну да ладно...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c