![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
странное поведение IbQuery [D5, Firebird]
jack128 © (2003-09-16 20:51:00)
вот такой код
procedure TForm1.Button1Click(Sender: TObject);
var
t : Cardinal;
begin
if not ibquery1.Active then
ibQuery1.Open;
try
t := GetTickCount;
ibquery1.FetchAll;
Caption := IntToStr(GetTickCount() - t);
finally
ibquery1.Close;
end;
end;
(в ibQuery1 запрос select * from my_table)
если в дезин тайм выставить ibquery1.Active := true; то после нажатия кнопки Caption := "1000"
Если в дезин тайм ibquery1.Active := False; то Caption := "380";
Почему???
Zacho (2003-09-17 01:36:00) [1]
> jack128 © (17.09.03 00:24) [8]
> На том же компе, но конект "localhost:<путь к базе>" , разве
> для сервера в таком случае есть разница, на том же компе
> база или на другом??
А БД и не может находится на другом компе, не работает сервер IB с файлами БД в сети :) Разница есть, находится ли клинтское приложение на том же компе, что и сервер, или нет. Ведь все это память кушает (да еще и Дельфи запущена), а она не безразмерная.. А когда свободная физ. память кончается, что происходит ?
Ты просто посмотри, сколько у тебя свободной физическойпамяти в первом случае и во втором.
jack128 (2003-09-17 00:24:00) [2]
> На том же компе сервер, что и твоя программа, или в сети
> ?
На том же компе, но конект "localhost:<путь к базе>" , разве для сервера в таком случае есть разница, на том же компе база или на другом??
А вообще, замнем вопрос... Попробую без фетча, а-ля DBGrid сделать..
Zacho (2003-09-16 22:16:00) [3]
> jack128 © (16.09.03 22:06) [6]
> После серии экстерементов(из дельфей и из проводника) ситуция
> изменилась теперь в обоих случаях фетч длится одинаково..
Имхо, в памяти дело. И в кол-ве коннектов к серверу. В общем, сам посмотри и подумай, направление для размышллений я тебе уже дал.
> Firebird??
Без разницы, IB, FB, YA или вообще что-то другое.
На том же компе сервер, что и твоя программа, или в сети ?
jack128 (2003-09-16 22:06:00) [4]
После серии экстерементов(из дельфей и из проводника) ситуция изменилась теперь в обоих случаях фетч длится одинаково..
> Похоже, еще и сервер локальный ?
Firebird??
Zacho (2003-09-16 22:01:00) [5]
>
> jack128 © (16.09.03 21:56) [4]
> Из дельфей
Вот в этом все и дело. Похоже, еще и сервер локальный ?
jack128 (2003-09-16 21:56:00) [6]
> Кстати, ты это делаешь при запуске из Дельфи или нет ?
Из дельфей
А смысл в том, что о того, как быстро длится фетч зависит как мне заполнять дерево из базы..(юзер может подождать 300 мсек при распахивании дерева, но не 1 секунду..)
Zacho (2003-09-16 21:46:00) [7]
Да мало ли, почему. Например, в случае, если запрос уже открыт в design time, то при открытии его же (естественно, реально - уже в другом процессе и в другом коннекте) банально не хватает физической памяти, или время уходит на создание второго коннекта.
Еще могу что-нибудь придумать, только зачем, какой в этом практический смысл ?
P.S. Кстати, ты это делаешь при запуске из Дельфи или нет ?
jack128 (2003-09-16 21:37:00) [8]
Странно, то что если запрос открывают непосредственно перед FetchAll, то фетч выполняется в три раза быстрее, чем если запрос открыт открыт при загрузке программы(открыт в дезин тайм)..
Zacho (2003-09-16 21:03:00) [9]
Ну и что именно здесь странного ? И вообще, зачем тебе это надо ?
P.S. Вместо
if not ibquery1.Active thenдостаточно
ibQuery1.Open;ibquery1.Active:=true;