数据库是Sql Server2000,典型的C/S模式,客户机和服务器之间是用DataSetProvider和ClientDataSet交互,下面是一段在客户机上请求对服务器上数据库进行添加操作的代码片断:try
         with BBB.ClientDataSet2 do//BBB是模块名
      begin
//Append;
insert;
Fieldbyname('交易编号').AsString:=Edit1.Text;
Fieldbyname('商品ID').AsString:=Edit2.Text;
Fieldbyname('Price').AsFloat:=StrToFloat(Edit3.Text);
Fieldbyname('Number').AsInteger:=StrToInt(Edit4.Text);
Fieldbyname('小计').AsFloat:=StrToFloat(Edit5.Text);
Fieldbyname('Date').AsDateTime:=StrToDate(Edit6.Text);
post;
ApplyUpdates(0);
ShowMessage('交易提交成功!');
     end;
     except
       ShowMessage('交易提交失败!');
     end;
最后执行时有交易提交成功字样出现,但实际上发现却没有进行插入操作,请问为什么?

解决方案 »

  1.   

    提示交易成功并不一定成功的插入了
    需要判断ApplyUpdates(0)的返回值
    如果返回为0,则为成功,否则为不成功楼主还可以通过profiler进行跟踪查看一下,应该数据是回滚了
      

  2.   

    楼上叫段海那位大虾能不能把原因或者解决办法说得详细一点儿,我很菜,不过我真的希望能够把这个问题弄清楚。
    这个问题在C/S数据库程序中是很有代表性的,来看帖的朋友们都会有收获的。
    另外我事先忘了说了,我用的是Delphi 7.0,而且只会用一点SQL Server2000的企业管理器,你看看用我手头上的这些工具能不能解决问题?如果不行该怎么办?
    也欢迎其他高手来留言讨论
      

  3.   

    Server2000的企业管理器里有事件跟踪查看
      

  4.   

    楼主,你好!我最近也是打算开发和你一样模式的MIS,同样是SQL SERVER!可是到现在一点头绪都没有,不知用什么控件来实现C,S的通讯以及数据集的传输。不知道你主要使用那些控件和方法实现这些操作的,可以给我些建议吗!!谢谢我在很多帖子上看到他们用DCOM来实现数据库三层 的模式,据说这个可以自动识别局域网内的客户端,以及可以传输整个数据集, 可是我没弄清到底怎么用,请有这类开发经验的高手来指点指点吧,给我们这些菜鸟一些建议。谢谢啦
      

  5.   

    DCOM的确可以实现数据库三层的模式,它在服务器和客户端之间主要起连接作用,
    而负责两者之间数据交互的我只知道DataSetProvider和ClientDataSet数据控件,在DataAccess面板上,楼上的朋友可以试试
      

  6.   

    数据回滚,也就是回复到以前的状态。
    楼主可以用profiler来查看呀。