我的数据库为SQL Server 2000,数据表名为  tb1  字段为 ID,Name,Sex,CardNumber  (注意ID是主键,也是自增字段)TADOQuery  - > TDataSetProvider    服务端ClientDataSet.CommandText := 'select top 0 * from tb1',然后打开我插入记录  
ClientDataSet.Insert;
ClientDataSet.FieldByName('Name').AsString := '姓名';
ClinetDataSet.FieldByName('Sex').AsString := '男';
ClientDataSet.FieldByName('CardNumber').AsString := '001';
ClientDataSet.Post;
ClientDataSet.ApplyUpdates(-1);
插入成功然后
ClientDataSet.Edit
ClientDataSet.FieldByName('CardNumber').AsString := '0001';
ClientDataSet.Post;
ClientDataSet.ApplyUpdates(-1);
修改不成功 这是为什么//--------------------------------------
我试着插入记录后, ClientDataSet.Refresh; 之后我的ClientDataSet中的数据为空了。
对于有主键,有自增字段,及插入后,可能会修改的,在三层结构中有没有好的办法???  

解决方案 »

  1.   

    插入成功后,你看了数据库了吗?是插入了吗?
    另外,你用'select top 0 * from tb1'CommandText每次都没有选择数据过来,
    怎么Edit呢?
    如果插入没有成功,看看是不是服务器端的AllowCommandText选项没有选择。
      

  2.   

    看来你是用的有状态连接了。上面说的对,commandtext一直没有改变,实际每次都执行的这sql。在ClientDataSet.ApplyUpdates(-1);或ClientDataSet.Refresh之前改变你的commandtext就ok了
      

  3.   

    to : dxdmm AllowCommandText  设为 true 了
    我的意思是这样的:
    我的tb表中可能有1000000条记录,  我在ClientDataSet中的CommandText 只能这样写。
    我的tb表中有 主键ID(是自增的)在DBGird,用户可以会加一条记录,也有可能会修改这条记录,我不知中如何实现。
    能帮忙吗?
      

  4.   

    to : shuaigc(new man)  能说说具体点吗?
      

  5.   

    你的表中数据比较多,你可以这样:
    在服务器增加两个方法:GetData 和SaveData
    GetData用来仅仅取得你需要的数据
    SaveData通过回传Delta以保存客户端变更的数据。