1

我正在尝试在Delphi 10.1 BerlinTADODataSet上运行一个程序

这是我的代码:

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;

DataSet的Connection属性设置如下:

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 Native Client 10 和 11(分别)运行Provider=SQLNCLI10.1Provider=SQLNCLI11.1

我计划稍后将这个 TADODataSet 与一个 Grid 组件(通过 TDataSet)一起使用,但我无法让这个东西在 XE8、西雅图和现在的柏林工作。它只是挂着rsGrid.Active := True。我也尝试过rsGrid.Open,但效果不佳。

同时它完美地在我的 XE4 上编译和执行。我在柏林做错了什么?

4

1 回答 1

2

这就是发生的事情。我将它作为答案发布,因此它可以帮助将代码从早期版本的 Delphi XE(XE8 之前)移植到 XE8/Seattle/Berlin 的其他人。

由于某种原因,当您移植带有 TADODataSet 组件的表单时,它会丢失一些关键属性。换句话说,当组件被转移时,会丢失一些LockType := ltOptimistic在我的特定情况下很重要的属性(即 )。

如何使它工作
要让您的代码恢复活力,只需将组件重新放置TADODataSet在您的表单上(删除它并放置一个新组件)。

于 2016-05-30T08:33:02.060 回答