我正在尝试在 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.1
和Provider=SQLNCLI11.1
)运行它。
我打算稍后使用这个TADODataSet和一个Grid组件(通过TDataSet),但是我无法在XE8,Seattle和现在的Berlin中使用它。它只挂在rsGrid.Active := True
上。我也试过rsGrid.Open
,但它也没有用。
同时它完美地编译并在我的XE4上执行。 我在柏林做错了什么?
答案 0 :(得分:2)
发生了什么事。我发布它作为答案,所以它可以帮助其他人将代码从早期版本的Delphi XE(在XE8之前)移植到XE8 / Seattle / Berlin。
由于某种原因,当您使用TADODataSet组件移植表单时,它会丢失一些键属性。换句话说,转移时,组件会遗漏某些属性(即LockType := ltOptimistic
),这些属性在我的特定情况下很重要。
如何使其发挥作用
要让您的代码恢复生机,只需重新放置您的表单上的TADODataSet
组件(删除它并放置一个新组件)。