Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1225437365
axd
2008-10-31 10:16
2008.12.28
Вопрос по трафику


2-1227002330
Проходящий
2008-11-18 12:58
2008.12.28
Запуск программы без наличия Interbase


15-1224837526
kaif
2008-10-24 12:38
2008.12.28
Хороший хостинг


15-1225530974
Riply
2008-11-01 12:16
2008.12.28
О пользе закрытия Handle`ов :)


2-1226862680
Лешка
2008-11-16 22:11
2008.12.28
Картинка из интернета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский