用一个ADOQuery就行,ADOQuery支持多表更新;用两个ADOQuery需要分别插入

解决方案 »

  1.   

    SELECT * FROM TVCH JOIN T_MAIN ON TVCH.MAIN_ID=T_AMIN.INDEX;即可。
      

  2.   

    但是我想一次更新多条数据,用UpdateBatch,我不想每次都写主表同的数据,主表数据只写一行,从表要写多行(主表一行对应从表多行),然后批量更新(分别更新到主从表),上述方法好像不行!
      

  3.   

    不用批量更新上述方法也不行呀!主表自动编号主键没能存到从中,好Indx值能存入从表的main_id中,如果这样的话,怎么关联两个表呢?我说的是Inset操做,而不是update!
      

  4.   

    这是因为你没给参数:index赋值
    如果主表用dbgrid1显示,则在
    procedure Tform1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin
      adoquery2.Parameters.ParamByName('index').Value := dbgrid1.DataSource.DataSet.FieldByName('indx').Value;end;
    这样就可以了
      

  5.   

    mfc2001:我按你的方法试了,但不行!
    主表取不到“Indx”的自动编号值,这个值是数据库给自动编号的主键值,还没“UpdateBatch”到数据库,请问老兄,你的这句:
    dbgrid1.DataSource.DataSet.FieldByName('indx').Value;
    会取到值吗?
      

  6.   

    这个问题在VB下是一个很简单的问题!难道Delphi就很难做到吗?
      

  7.   

    :index默认值设为1
    当dbgird1中用户选定不同的行时,:index也有不同的值
    我这样设通过了啊!
      

  8.   

    mfc2001:
    这是在dbgrid1中有数据的情况下,我是说当dggrid1中没有数据时,然后插入数据,在dbgrid1中写数据,写完主表数据,然后再写dbgrid2从表中的数据(要写多行),写完这些以后,然后把主、从表中的数据一块提交给数据库。要是这样的话,你那句:dbgrid1.DataSource.DataSet.FieldByName('indx').Value;
    根本取不到值!你试试看!
      

  9.   

    为什么不在插入主表数据之后返回index的值再插入从表数据呢?
      

  10.   

    cn_patriot:这样不能保证数据的一致性!
      

  11.   

    看来我的问题没人能回答了!不知那些Delphi高手哪去了!
      

  12.   

    或者先用select取出数据库分配的序列值,存到变量中。
    主从表的键值就等于该变量。
    (不知道非oracle数据库是否可行)
      

  13.   

    好象要先向主表inser一个记录并且update
    然后取键值
    再用取得的键值向从表添加记录
    用两个ADOQuery操作
    我是新手,只知道这样做
      

  14.   

    我想先建一个存储过程,用于插入主表,然后近回Indx主键值,然后再利用此值更新从表(内存中),然后再存入数据库从表中。
      

  15.   

    即使你要主表和从表一起post,也应该是主表先post,这样pk:Indx 才会有值,从表才能根据这个值插入main_id这个字段!
    建议在主表post后取出indx的值,然后从表再post