Delphi 10.1 Berlin上的TADODataSet问题。查询挂起

时间:2016-05-29 16:10:33

标签: delphi ado tadodataset delphi-10.1-berlin

我正在尝试在 Delphi 10.1柏林

的程序中运行TADODataSet

这是我的代码:

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,Seattle和现在的Berlin中使用它。它只挂在rsGrid.Active := True上。我也试过rsGrid.Open,但它也没有用。

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

1 个答案:

答案 0 :(得分:2)

发生了什么事。我发布它作为答案,所以它可以帮助其他人将代码从早期版本的Delphi XE(在XE8之前)移植到XE8 / Seattle / Berlin。

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

如何使其发挥作用
要让您的代码恢复生机,只需重新放置您的表单上的TADODataSet组件(删除它并放置一个新组件)。