数据环境:ACCESS 2003
各表之间的关系如下:
主表字段              关系              子表字段
--------------------------------------------
销售单号  1  --------------------  n  销售单号
客户编号                                  产品型号
销售总数  1  --------------------  n  销售数量
--------------------------------------------
销售数据:
销售单号:S001,客户编号:C001,
销售总数:800,其中:产品A:500,产品B:300问:
如何在向主表写入
-------------------------------
销售单号      客户编号      销售总数
-------------------------------
 S001        C001         800
-------------------------------的同时,再向子表写入
-------------------------------
销售单号      产品型号      销售数量
-------------------------------
 S001        产品A         500
 S001        产品B         300
-------------------------------类似下面这样的方法好像要不得,谁能教我更好的方法?感激不尽!Call OpenConn
  rs.Open "select 销售单号,客户编号,销售总数 From 主表",cn,3,3
  rs.AddNew
  rs1.Fields("销售单号") =S001
  ...
  rs.Update
Call CloseConnCall OpenConn
  rs.Open "select 销售单号,产品型号,销售数量 From 子表",cn,3,3
  rs.AddNew
  rs.Fields("销售单号") =S001
  rs.Fields("产品型号") =产品A
  rs.Fields("销售数量") =500
  rs.Update
  rs.AddNew
  rs.Fields("销售单号") =S001
  rs.Fields("产品型号") =产品B
  rs.Fields("销售数量") =300
  rs.Update
Call CloseConn分就剩30了,请各位见谅!谢谢!

解决方案 »

  1.   

    为什么要不得?即便是sql或者oracle也不应该用触发器来实现主从表更新/
      

  2.   


    ADO的事务处理示例如下吧:
        Dim cnn As ADODB.Connection
        Dim intTrans As Integer
        
    On Error GoTo Err_Check    '启动错误处理程序
        
        '连接数据库
        Set cnn = New ADODB.Connection
        cnn.Open "......"
        
        intTrans = cnn.BeginTrans   '开始一个更新事务
        
        '这儿就是数据处理代码
        'insert into tb .......
        'insert into tb_1......    cnn.CommitTrans  '提交事务
        intTrans = 0
        cnn.Close
    Exit_Check:
        Set cnn = Nothing
        Exit Function
        
    Err_Check:
        If intTrans = 1 Then cnn.RollbackTrans  '错误回滚
        MsgBox Err.Description
        Resume Exit_Check
      

  3.   

    意思是在cnn.CommitTrans之前,所有的数据操作都被读入内存而并没有写入数据库,只有过程中未发生错误,才提交到数据库?