我的Delphi数据库组件有问题。我试图为程序添加一些功能,但是遇到了奇怪的问题。我将其分解为一个简单的示例项目,行为仍然存在。
我在Delphi 2007上创建了一个新的Forms应用程序,添加了TSQLConnection,TSQLTable,TDataSetProvider和TClientDataSet。我插入了本地MS SQL数据库和内部表的信息,这是一个简单的测试表:
CREATE TABLE dbo.Test1(
[Name] varchar(32) not null primary key,
[Type] varchar(16) not null,
[Selected] BIT not null)
然后我添加了一个TEdit,TListBox和2个按钮。该功能应该是:按Add,将名为Edit1的记录输入数据库。按更新,列表视图将填入数据库中已有的条目。
代码:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
ClientDataSet1.Refresh;
ClientDataSet1.First;
while not ClientDataSet1.Eof do
begin
ListBox1.AddItem(ClientDataSet1Name.AsString,nil);
ClientDataSet1.Next;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.Append;
ClientDataSet1Name.AsString := Edit1.Text;
ClientDataSet1Type.AsString := 'A1';
ClientDataSet1Selected.AsBoolean := false;
ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(-1);
end;
现在奇怪的是,在启动程序时,添加2条记录(在管理工作室中检查它们确实存在),现在我点击更新,列表保持为空,因为ClientDataSet的RecordCount是一旦执行了Button1Click的Refresh,就立即执行0。但是条目是并保留在数据库中。
另一个奇怪的是,只要我退出程序,然后再次启动并尝试添加另一条记录,我就会收到错误“无法创建新连接,因为在手动或分布式事务模式下”。一旦我从表中删除记录并重新启动程序,我就可以再次添加。
有人能告诉我这种奇怪的行为是如何发生的以及我如何解决它?
提前致谢。
答案 0 :(得分:0)
也许这一个:
“问题:
将MSSQL dbExpress驱动程序与ClientDataSet和Provider一起使用时,在调用ApplyUpdate时不断收到以下错误:无法创建新连接,因为在手动或分布式事务模式下
建议的工作:
将“poFetchDetailsOnDemand”(对于Provider)设置为False。当它设置为True时,这是一个已知问题。“
(引自this Embarcadero article引用SQLOLEDB Allows Only One Connection in Scope of Transaction。
“无法创建新连接,因为在手动或分布式事务模式下”有一小部分搜索结果