用TQuery+TUPdateSQL對一個表inv_dtl,在緩存模式下(CachedUpdates=true)修改,在觸發器內後台更改另一個表stock_dtl,保持兩者數據同步一致功能。表inv_dtl(trx_code, trx_no,item_code, qty),其中主鍵是(trx_code,trx_no),表stock_dtl 與inv_dtl 表結構一樣。假如inv_dtl 現有trx_code不變,trx_no數所記錄分別是: {1,2,3,4,5,6,7}
我做的操作: 先刪掉3,4,6,再增加三個空的記錄變成{1,2,5,7,'','',''},最後再遍歷數據集,編輯,對trx_no進行重新編號為{1,2,3,4,5,6,7} ,然後保存,ApplyUpdates.
可是在後台數據庫裡,查stock_dtl, 發現數據變為{1,2,3,4,6},其中inv_dtl裡的(5,7)都不在此表中。前面所有的操作對後面結果有何影響?

解决方案 »

  1.   

    stock_dtl中的数据和inv_dtl中trx_code,trx_no一样,但stock_dtl中item_code, qty可能和inv_dtl中的不一样
      

  2.   

    我查了一下,那個問題實際是由批更新模式下的保存時重新對行號排序編號,即修改關鍵字值引起的,裡面有這樣的語句:
        Qry_so.First ;
        i:=1;
        while not Qry_so.Eof do
         begin
               Qry_So.Edit;
               Qry_so.fieldbyname('trx_no').asinteger := i;
    .....
      Qry_So.next;
      inc(i)
        end;
     Qry_so.ApplyUpdates;
     Qry_so.CommitUpdates;
    這一段引起了重復的行號
    //------------------------------
    原來要求實現兩個表數據同步功能,直接對編輯保存提交,應該沒有問題。但是要求實現對行號進行重新排序更改編號,有什麼好的方式做到?我想在提交後,執行一個存儲過程,用游標來實現更改行號,不知還有沒有好的方法?