![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TQuery и Win98.
Dripus © (2003-07-30 16:25:00)
Толи это WIN98 так работает c TQuery, толи я что то не так сделал. Помогите разобраться. А суть вопроса такова.
Несколько запросов выполняются по очереди неограниченное количество раз:
Пример:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("SELECT * FROM .....................") ;
Query1.Open;
//Всяки разны деяния.
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("UPDATE .....................") ;
Query1.ExecSQL;
//Всяки разны деяния.
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("SELECT * FROM .....................") ;
Query1.Open;
И так далее и тому подобное.
И все это хозяйство работает неограниченное количество раз (как пользователь за хочет).
В итоге ВИНДА(98) начинает погибать, а именно заканчивается память. При попытке открыть что-нибудь еще какой-нибудь Word ВИНДА меня радостно оповещает, что память благополучно закончилась, и было бы не плохо закрыть, что-нибудь.
Комп у меня П4-2ГГц. ОЗУ 256.
А в WINХР все работает не на что не жалуется.
Помогите разобраться, в чем дело. Толи ВИНДА(98) тормозит, толи я.
MsGuns (2003-07-31 12:25:00) [1]
Советую отделять декларации объектов БД (в т.ч.компонентов доступа) от контролов, их использующих. Для этого (в том числе), собственно, и придуман модуль данных.
Dripus (2003-07-31 10:08:00) [2]
Еще раз всех благодарю. А особенно HSolo ©. Все заработало и с памятью все в порядке. Выходит это не TQuery и не WIN98 глючил, а Я. Спасибо еще раз.
Dripus (2003-07-31 09:58:00) [3]
Благодарствую буду пробовать.
HSolo (2003-07-31 09:51:00) [4]
Лучше form2.Free или form2.Release
А еще можно в form2.OnClose написать:
Action := caFree;
Тогда форма при закрытии самоистребится, и никаких Free не надо.
Dripus (2003-07-31 09:47:00) [5]
Вот так form2.Destroy;
HSolo (2003-07-31 09:43:00) [6]
Да. Или создайте один раз - или уничтожайте каждый раз.
Dripus (2003-07-31 09:41:00) [7]
Каждый раз. Касяк?
HSolo (2003-07-31 09:37:00) [8]
Вот это:
Application.CreateForm(TForm2,Form2);
у Вас один раз выполняется? Или каждый раз при обращении к форме?
Dripus (2003-07-31 09:34:00) [9]
> В коде очень подозрительные //Всяки разны деяния.
> Сделать проверку так
>
> for I := 1 to N do begin
> Query1.Close;
> Query1.SQL.Clear;
> ( "SELECT * FROM .....................")
> В коде очень подозрительные //Всяки разны деяния.
> Сделать проверку так
>
> for I := 1 to N do begin
> Query1.Close;
> Query1.SQL.Clear;
> Query1.SQL.Add("SELECT * FROM .....................")
> ;
> Query1.Open;
> end;
"Всяки разны деяния"-это вычисления по полученным результатам из запрося для следующего запроса на изменение, добавление и наоборот. А зачем мне запрос в цикл ставить и что я этим проверю?
Dripus (2003-07-31 09:23:00) [10]
Главная форма стартует один раз это точно (т.к. я её сам запускаю, а больше пользователей нет), а все остальные формы в программе являются модальными. Интерфейс одного из модальных окон особо и нет ничего ( GroupBox 8шт., Edit 5шт., DBLookupComboboxEh 1шт., BitBtn 2шт с картинками, Query 2шт., DataSource 1шт.) вот и все. А запускаю я её таким образом:
Application.CreateForm(TForm2,Form2);
with Form2 do begin
//Тут сякие дела. Капшены разные, Запросы работают.
Showmodal;
if WindowState = wsMinimized then WindowState := wsNormal;
А закрываю обычным Сlose;
Может сдесь я ошибаюсь.
end;
Anatoly Podgoretsky (2003-07-31 09:08:00) [11]
В коде очень подозрительные //Всяки разны деяния.
Сделать проверку так
for I := 1 to N do begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("SELECT * FROM .....................") ;
Query1.Open;
end;
Sergey13 (2003-07-31 08:49:00) [12]
2Dripus (30.07.03 16:25)
Это больше похоже на нехватку ресурсов. Но не памяти, а GDI и/или User. И возникать такая штука могет при перегруженности интерфейса пользователя всякими контролами и созданием одновременно большого множества экземпляров таких форм. Покопай в эту сторону.
Dripus (2003-07-30 19:03:00) [13]
Со свободным местом все в прорядке. А системы разные и стоят на разных компах. На работе Win98 а дома WinXP. Дома работает без вопросов а на работе парит мозги.
Desdechado (2003-07-30 17:29:00) [14]
ну, у 98 с памятью и правда не гаразд
но, похоже, у тебя не память закончилась, а место на диске или файловые хендлы (БДЕ их кушает при запросах и может не освобождать). Если у тебя несущие диски разные для разных ОС, то см. свободное место