Database Delphi数据库组件的奇怪行为

Database Delphi数据库组件的奇怪行为,database,delphi,dbexpress,Database,Delphi,Dbexpress,我对Delphi数据库组件有问题。我试图给程序添加一些功能,但遇到了奇怪的问题。我将其分解为一个简单的示例项目,其行为仍然存在 我在Delphi2007上创建了一个新的表单应用程序,添加了TSQLConnection、TSQLTable、TDataSetProvider和TClientDataSet。我插入了本地MS SQL数据库的信息和其中的表,这是一个简单的测试表: CREATE TABLE dbo.Test1( [Name] varchar(32) not null primary key

我对Delphi数据库组件有问题。我试图给程序添加一些功能,但遇到了奇怪的问题。我将其分解为一个简单的示例项目,其行为仍然存在

我在Delphi2007上创建了一个新的表单应用程序,添加了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和两个按钮。该功能应为:按Add,并在数据库中输入一条名为Edit1的记录。按Update,listview将填充数据库中已有的条目

守则:

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条记录(在ManagementStudio中检查它们是否确实存在),现在我单击update,列表保持为空,因为只要执行Button1Click开始刷新,ClientDataSet的RecordCount就为0。但是,这些条目将保留在数据库中

另一件奇怪的事情是,当我退出程序,重新启动它并尝试添加另一条记录时,我得到错误“无法创建新连接,因为在手动或分布式事务模式下”。一旦我从表中删除记录并重新启动程序,我就可以再次添加

有人能告诉我这种奇怪的行为是怎么发生的吗?我怎样才能纠正它

提前谢谢。

也许这一个:

“问题:
将MSSQL dbExpress驱动程序与ClientDataSet和提供程序一起使用时,在调用ApplyUpdate时会出现以下错误:无法创建新连接,因为处于手动或分布式事务模式

建议的解决方法:
将“poFetchDetailsOnDemand”(用于提供程序)设置为False。如果将其设置为True,则这是一个已知问题

(引自,指的是


“无法创建新连接,因为处于手动或分布式事务模式”有大量搜索结果

好的,我发现如果调用SQLTable1.Refresh,在ClientDataSet1.Refresh之前调用SQLTable1.Refresh,第一个问题不会发生。但我认为这是数据集应该自己做的事情。对于刷新,您的SQLTable1是否在程序启动时关闭?有文档记录表明,如果基本数据集打开,则不会再次打开它。不,SQLTable1已打开。我检查了它。如果它已关闭,我也无法进行刷新,因为如果该表已关闭,则会出现错误。请关闭该表,然后在ClientDataSet上刷新记录。poFetchDetailsOnDemand为False,就像默认值一样。我知道有很多搜索结果,但我已经查看了le打开谷歌的前4页并尝试了一下。没有任何帮助。