Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Insufficient memory for operation


Автор: z-END 12.3.2005, 13:18
BDE+Paradox:
Собственно проблема аналогична http://forum.vingrad.ru/index.php?showtopic=44277 но за одним исключением:
у меня используется такая конструкция (в отдельном модуле):
Код

Procedure dbGetRec(dbName:String; var Handle:TQuery; Key, Value: Variant);
begin
if not Assigned (Handle) then
 begin
  Handle := TQuery.Create(nil);
  Handle.DatabaseName := ini(DB_root);
 end;
if Key = null
  then  Handle.SQL.Add ('SELECT * FROM '+dbName)
  else  Handle.SQL.Add ('SELECT * FROM '+dbName+' WHERE '+String(Key)+' = "'+String(Value)+'"');
Handle.ExecSQL;
Handle.Open;
end;
{}

Procedure dbCloseRec(var Handle:TQuery);
begin
Handle.Active := False;
Handle.Close;
FreeAndNil (Handle);
end;

они в свою очередь используются в других функциях типа такого:

Код

Function dbGetValue (dbName:String; Key, Value: Variant; FieldName: String): Variant;
var Qws: TQuery;
begin
 Qws := nil;
 dbGetRec (dbName, Qws, Key, Value);
 Result:=Qws.FieldByName(FieldName).Value;
dbCloseRec(Qws);
end;


!такой код выполняется 21 smile раз, после чего та-же ошибка...
Код

Procedure TForm1.Button1Click (Sender: TObject);
var Q: TQuery;
 begin
ResList.Clear;
dbGetRec (dbName, Q, Key, Value);
 while not Q.eof do
   begin
    ResList.Add (dbGetValue (subDB, 'LINK_ID', Q.FieldByName('listID').Value,'RES'));
    {...}
    Q.next; 


Из выше указанного поста я понял что такое возникает при одновременном большом кол-ве запросов к БД, но у меня же они выполняются по очереди.
Есть вообще решение проблемы?

Автор: z-END 12.3.2005, 14:15
Вроде разобрался - после выполнения требуемых операций надо использовать TQuery(TTable).DBSession.Close

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)