Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизКак устранить ошибку подключения к базе данных? Найти похожие ветки
← →
Сергей (2012-03-06 18:42) [0]Использую 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;
← →
sniknik © (2012-03-06 19:52) [1]убрать все лишнее, не используемые переменные, дублирующиеся запросы, дублирующиеся операции... и главное идиотскую "обработку" ексепта.
← →
Сергей (2012-03-06 20:14) [2]Что в ней не правильно?
← →
Anatoly Podgoretsky © (2012-03-06 21:00) [3]Утечка памяти
← →
sniknik © (2012-03-06 21:01) [4]да все.
← →
Loginov Dmitry © (2012-03-06 23:32) [5]За гарантированное освобождение занятых ресурсов отвечает оператор TRY...FINALLY. Можете о нем почитать:
http://www.loginovprojects.ru/index.php?page=tryfinally
TRY...EXCEPT выполняет другие задачи: позволяет перехватить исключение (ошибку), организовать действия по его обработке. Если не знаете, то лучше TRY...EXCEPT не используйте.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.053 c