Проблема с 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 компонент в вашей форме (удалите его и поместите новый).

Другие вопросы по тегам