主表有的东西用text框录入。
从表的东西可以用datagrid或者其他的网格类控件录入;或者你自己加一个按钮,一按就弹出另外一个对话框来让用户录入一条从表里的信息,这样他想录多少条都可以自己控制了。
最灵活的是用代码来控制,就象我用ADO时,通常是做一个没有连接的记录集,直接把记录集合绑给Datagrid,任用户修改,如果确定保存,再一条条的加入到从表里。不想保存就把它cancel掉就是了。

解决方案 »

  1.   

    谢谢你的回复:
    bokei 可能理解了我的意思,我试着用了datagrid这个控件,但是我不知道怎样把记录集合绑给Datagrid,你能给我发一段代码吗?谢谢
      

  2.   

    参考计算机世界"http://www.computerworld.com.cn/99/tips/9906/062803_11.asp"的
    《利用VB动态设计多“主细表”应用》
      

  3.   

    创建没有连接的记录集的代码如下:
    conSell.Open SOURCE    ‘打开连接
        
    rstSell.CursorLocation = adUseClient
    rstSell.CursorType = adOpenStatic
    rstSell.SOURCE = strSource    
    rstSell.ActiveConnection = conSell
    rstSell.LockType = adLockBatchOptimistic
    rstSell.Open    ‘打开记录集合
      
    Set rstSell.ActiveConnection = Nothing    '让记录集变成没有连接的记录集合把记录集绑定给Datagrid的代码如下:
    Set DataGrid.DataSource = rstSell如果让用户修改过的记录集更新数据,代码如下:
    rstSell.MarshalOptions = adMarshalModifiedOnly    
    Set rstSell.ActiveConnection = conSell    '从新设置连接
    rstSell.UpdateBatch    ‘更新
      

  4.   

    bokei:
        如果要检验明细表里每条数据的有效性,如:没有该产品代码(需要在另外的数据表里查出得到)怎么办?我用了一个axgrid的控件,并不是很方便。
      

  5.   

    在UpdateBacth之前可以象操作普通记录集那样操作无连接的记录集,你可以自己用代码来检验一下。
    也可以不用UpdateBatch,自己做一个循环来把记录集里的记录一条条的检验,再一条条的加入明细表里。
      

  6.   

    bokei:
         当提交的时候,先录入主表的数据,然后录入明细表的数据,都在一个事件里完成。
    我不知道明细表的外键怎样加入
      

  7.   

    如果是用循环来保存明细表的记录,通常是用一个变量存下明细表的外键(如主表的编号),然后在保存明细表时再一个个记录的赋值。
    象这样:
    conData.Excute("insert......")    '加入主表的记录
    Do Until rstTemp.EOF
       rstSave.AddNew
       rstSave.Fields("Key")=外键的值
       rstSave.Fields("xxx")=rstTemp.Fields("xxx")    'rstTemp是绑定给DataGrid的无连接记录集,由于没有连接,所以对它里面的字段作的任何修改都不会直接作用于数据库,这里把它当作一个临时的存放数据的地方,rstSave是有连接的记录集合,用它来更新明细表   
       ......          
       rstSave.update
       rstTemp.MoveNext
    Loop
      

  8.   

    bokei:
         感谢你耐心的回答,我的问题已解决,但不知道怎样给你加分,我是不是很笨?
    不管怎么样,我都非常的感谢你!
      

  9.   

    bokei:
         还请问:rstSave与rstTemp怎样建立关系,是重定义一个recordset,再写一个sql语句吗?