用的是delphi2010方法是:服务器端:
1、 连接数据库 
2、放置ADODataSet,假设命名为ADSMaster,主表
   Sql=select * from inhead where 1=2 
3、放置DataSouce,DataSet设为ADSMaster; 
4、放置另外一个ADODataset,假设命名为ADSDetail,从表,设置DataSouce为刚才主表的Datasource,
   这样在从表与主表建立连接关系, 然后在MasterFields 的Field   Link   Designer主表从表关联的字段 
   Sql=select * from inhouse where 1=2
 5、放置DataSetProvider,DataSet连接ADSMaster 
 客户端:  
1、 建立的服务器连接  
2、放置两个DataSouce、两个ClientDataSet,其中一个连接到服务器 (ADSMaster)       的DatatSetProvider,将所有字段  加入到Fields   Editor中,将看到有一个ADSDetail的字段  
3、在另外一个ClientDataSet中的DataSetField中加入ADSDetail,大致 是这样的字样ClientDataSet1ADSDetail  
4 新增按钮事件
  begin
   ADSMaster.close;
   ADSMaster.open;
   ADSMaster.append;
   ADSDetail.close;
   ADSDetail.open;
   ADSDetail.append;
   Adsspbm.close;
   Adsspbm.open;
  end;  执行新增时就出错 提示 stack overflow ;   我这样两层结构是可以的  请问三层应怎么设置呢?? 谢谢!!

解决方案 »

  1.   

    数据录入还是采用B/S结构中的录入方式吧,即:用Insert-SQL 命令来完成数据录入,其优点是无需像Dataset那样将部分或全部数据传送到前端。
      

  2.   

    从表的ADODataset里面的SQL语句必须传一个参数进去,必须为主表的一个外键或者主键
      

  3.   

    楼上的 cq_
      我也试过在从表转个值    不过也是同样出现stack overflow 错误。 能详细的说下操作方法吗??我的方法是:
    从表 Sql=select * from inhouse where djbh=:djbh  请问下一步后面怎么设置?
      

  4.   

    客户端不能直接操作服务器中的ADSMaster,而是通过ClientDataSet读写数据。
      

  5.   

    1.Clientdataset是否open 
    2.Append语句都改为ClientDataSet.Append,在客户端执行
      

  6.   

      ADSMaster.close;
      ADSMaster.open;
      ADSMaster.append;
      ADSDetail.close;
      ADSDetail.open;
      ADSDetail.append;
      Adsspbm.close;
      Adsspbm.open;
      end;都是ClientDataSet控件   只是我重名命了而已
      

  7.   

    主从表   从表  不能直接 使用类似 adoquery.insert  因为是从表......所以乃还是用sql 插入吧