Я пытаюсь работать в TADODataSet
в программе на Delphi 10.1 БерлинПроблема с TADODataSet на Delphi 10.1 Берлин. Запрос висит
Вот мой код:
rsGrid.Connection := MyADOConn;
rsGrid.CommandType := cmdText;
rsGrid.CommandText := 'my_StoredProc 100';
rsGrid.IndexName := 'ObjectID';
rsGrid.Active := True; //***** Showstopper here! *****//
while not rsGrid.Eof do
begin
Memo1.Lines.Add(rsGrid.FieldByName('ObjectID').AsString);
rsGrid.Next;
end;
Connection
свойство DataSet устанавливает следующим образом:
function TMainForm.MyADOConn: TADOConnection;
begin
Result := TADOConnection.Create(nil);
with Result do
begin
ConnectionString := 'Provider=SQLNCLI11.1;Persist Security Info=False;User ID=user15;Password=mypassword;Initial Catalog=MyDB;Data Source=my.server.com;Initial File Name="";Server SPN=""'';
KeepConnection := True;
IsolationLevel := ilCursorStability;
Mode := cmUnknown;
LoginPrompt := False;
Connected := True;
end;
end;
База данных SQL Server 2012, поэтому я попытался запустить ее с помощью собственного клиента SQL Server 10 и 11 (Provider=SQLNCLI10.1
и Provider=SQLNCLI11.1
соответственно).
Я планирую использовать этот TADODataSet позже с компонентом Grid (через TDataSet), но я не мог заставить эту работу работать в XE8, Сиэтле и сейчас в Берлине. Он просто висит на rsGrid.Active := True
. Я также пробовал rsGrid.Open
, но он не работает.
В то же время он отлично компилируется и исполняется на моем XE4. Что я делаю неправильно в Берлине?
Довольно точно, что это не связано с вашей проблемой, но способ создания объекта соединения - это кричать утечку памяти. Каждый раз, когда вы вызываете эту функцию «MyADOConn», он создает новый экземпляр подключения, и единственная ссылка, которую вы поддерживаете, находится внутри 'rsGrid'. Я надеюсь, что вы освободите его где-нибудь позже, но даже если это так, дизайн по-прежнему является основным недостатком и все еще может вызвать большую утечку. –
Спасибо за упоминание, что Джерри, но вот только пример. В моем реальном приложении объект соединения строится и освобождается должным образом;) Проверено MadExcept. –
Если вы замените TAdoDataSet на TAdoQuery, можете ли вы успешно открыть его в среде IDE с помощью Object Inspector? – MartynA