为了防止DSN不存在或其设置被他人修改时造成应用程序运行错误,可以用ADODB.Connection创建一个临时ODBC数据源,这样可以保证我们使用的系统DSN的参数设置是正确的.下面的语句可以创建一个临时ODBC系统DSN,对应一个ACCESS数据库,路径为 C:\Inetpub\wwwroot\test.mdb AConnection.open('Driver={Microsoft
 Access Driver (*.mdb)};DBQ=
C:\inetpub\wwwroot\test.mdb')

解决方案 »

  1.   

    to atyzy(笑笑):接受你的建议,现将关键部分贴出来.sub form_load()
    '显示主表,子表的内容,主表显示在txtemp(),cboemp()中,子表显示在grddetails中.
    strDB = App.Path + "\data\temptest.MDB;Jet OLEDB:Database Password=;"
        strSQL = "SHAPE {SELECT icebox_id,icebox_name,icebox_number,icebox_buydate,icebox_repair,name FROM [icebox] ORDER BY icebox_id} AS ParentCMD" & _
                " APPEND ({SELECT icebox_id,iceboxdoor_id,temperature_upperlimit,temperature_lowerlimit FROM [icebox_door] ORDER BY icebox_id} AS ChildCMD" & _
                " RELATE icebox_id TO icebox_id) AS ChildCMD"
    Set db = New ADODB.Connection
            db.CursorLocation = adUseClient
            db.Open "PROVIDER=MSDataShape;Data PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDB
        
            Set adoPrimaryRS = New ADODB.Recordset
            adoPrimaryRS.Open strSQL, db, adOpenStatic, adLockOptimistic
    For Each oText In Me.txtEmp
            Set oText.DataSource = adoPrimaryRS
        Next    If adoPrimaryRS.RecordCount <> 0 Then
            adoPrimaryRS.MoveFirst
            Set grdDetails.DataSource = adoPrimaryRS("ChildCMD").UnderlyingValue
            
            For i = 0 To 2
                Set CboEmp(i).DataSource = adoPrimaryRS
            Next i
            End If
    end sub
    Public Sub cmdAdd_Click()
        ' 按增加键
        On Error GoTo AddErr
        Dim i
        With adoPrimaryRS
             .AddNew
        End With
            txtEmp(0).SetFocus
    End SubPublic Sub cmdUpdate_Click()
        ' 按存盘键 
        'On Error GoTo UpdateErr
        
            adoPrimaryRS.UpdateBatch adAffectAll
            End Sub我的子表用datagrid显示,可是输入数据在datagrid后,存盘时,竟然没存进去,但修改数据时,又可存盘,请大家邦我看一下.谢谢  
      

  2.   

    不妨试一下用adOpenDynamic打开,然后更新时用Update
      

  3.   

    Set adoPrimaryRS = New ADODB.Recordset
            adoPrimaryRS.Open strSQL, db, adOpenStatic, adLockOptimistic是不是这句的问题?所带的几个参数对不对取得的记录集的状态可能是locked
      

  4.   

    to fangoxyz(小虫):你认为这两条语句应如改为怎样的?
      请大家都来邦我看看,对于同时输入两个相关联的一对多表,大家用的什么控件?
      

  5.   

     用 .update 存盘.
     改用 adOpenDynamic