![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как устранить ошибку подключения к базе данных? [D7, XP]
Сергей © (2012-03-06 18:42:00)Использую dbExpress Через TSimpleDataSet подключаюсь к Oracle. Подключение осуществлялось. По непонятным пока причинам начала выдавать ошибку
DbExpressError: insufficient memory for operation.
Через SQLNovigator подключаюсь и работаю нормально.
Функция подключения
Function TfrmMain.LoadTable(NameTable:String; RecShowCount:String; SqlStringFilter:String): boolean;
var
ADOConnection:TADOConnection;
ADOQuery:TADOQuery;
ConnectString: String;
SqlString:String;
RecordCount: Integer;
ListNameCol: TStrings;
ListIndex: Integer;
SqlStringCol,SqlStringData,NOMER,SqlStrRecShow,RowIndMax: String;
begin
try
//Screen.Cursor := crSQLWait;
result:=false;
ListNameCol:=TStringList.Create;
// загружаю поля основной таблицы
SqlString:='SELECT * FROM ' +NameTable + ' ORDER BY NOMER DESC';
sdsBase.Active := false;
sdsBase.DataSet.Active := false;
sdsBase.DataSet.CommandText := SqlString;
sdsBase.DataSet.Active := true; // ЗДЕСЬ ВЫДАЕТ ОШИБКУ
sdsBase.Active := true;
sdsBase.Fields.GetFieldNames(ListNameCol);
// Готовлю фильтр отбора записей по коилеству
sdsBase.First;
RowIndMax:=sdsBase.FieldByName('NOMER').AsString;
SqlStrRecShow:=SqlRecShow('NOMER', RowIndMax, RecShowCount);
sdsBase.Active := false;
sdsBase.DataSet.Active := false;
SqlStringCol:= '';
SqlStringData:='';
// фомирую последовательность колонок для sgl запроса
For ListIndex:=0 to ListNameCol.Count-2 do
begin
SqlStringCol:= SqlStringCol+ ' '+ ListNameCol.Strings[ListIndex]+ ',';
end;
SqlStringCol:=AnsiMidStr(SqlStringCol,1, Length(SqlStringCol)-1);
// конечный запрос к базе данных
SqlString:='SELECT' +SqlStringCol+' FROM ' +NameTable+ ' WHERE ' + SqlStrRecShow+SqlStringFilter;
sdsBase.Active := false;
sdsBase.DataSet.Active := false;
sdsBase.DataSet.CommandText := SqlString;
sdsBase.DataSet.Active := true;
sdsBase.Active := true;
FillGridFromSQLOracle (stgrTask, sdsBase, GlobParam.gColWith);
ListNameCol.Free;
result:=true;
except on E:Exception do
begin
ListNameCol.Free;
end;
end;
end;
Loginov Dmitry (2012-03-06 23:32:00) [1]За гарантированное освобождение занятых ресурсов отвечает оператор TRY...FINALLY. Можете о нем почитать:
http://www.loginovprojects.ru/index.php?page=tryfinally
TRY...EXCEPT выполняет другие задачи: позволяет перехватить исключение (ошибку), организовать действия по его обработке. Если не знаете, то лучше TRY...EXCEPT не используйте.
sniknik (2012-03-06 21:01:00) [2]да все.
Anatoly Podgoretsky (2012-03-06 21:00:00) [3]Утечка памяти
Сергей (2012-03-06 20:14:00) [4]Что в ней не правильно?
sniknik (2012-03-06 19:52:00) [5]убрать все лишнее, не используемые переменные, дублирующиеся запросы, дублирующиеся операции... и главное идиотскую "обработку" ексепта.