Проблема с 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. Что я делаю не так в Берлине?
1 ответ
Вот что случилось. Я публикую его как ответ, так что он может помочь другим, кто переносит код с более ранних версий Delphi XE (до XE8) на XE8/ Сиэтл / Берлин.
По какой-то причине, когда вы переносите формы с компонентом TADODataSet, он теряет некоторые ключевые атрибуты. Другими словами, при передаче компонент пропускает некоторые атрибуты (т.е. LockType := ltOptimistic
) которые важны в моем конкретном случае.
Как заставить это работать
Чтобы вернуть ваш код к жизни, просто замените TADODataSet
компонент в вашей форме (удалите его и поместите новый).