我的更新方式如下:
  'update the 客户公司
                commStr = "select * from 客户公司"
           
                If companyRs.State <> adStateClosed Then
                    companyRs.Close
                End If
                    
                        
                GetRecordSet companyCmd, companyRs, commStr, conn
                BeginTransaction conn, companyRs
                
                ValuesCompany = Array(Trim(company), Trim(vocation), Trim(area), Trim(companywww), Trim(companyAddress))
                companyRs.MoveFirst
                
                Do While Not companyRs.EOF
                
                    If companyRs.Fields("公司") = company And companyRs.Fields("行业") = vocation _
                    And companyRs.Fields("地区") = area Then
                        companyRs.Update FieldsCompany, ValuesCompany
                        BeginTransaction conn, companyRs
                        Exit Do
                    End If
                    companyRs.MoveNext
                Loop
                
                If companyRs.EOF Then
                    companyRs.MoveFirst
                    companyRs.AddNew
                    Dim i As Integer
                    For i = 0 To UBound(FieldsCompany)
                        companyRs(FieldsCompany(i)) = ValuesCompany(i)
                    Next
                    BeginTransaction conn, companyRs
                End If
                
                
                If companyRs.State <> adStateClosed Then
                            companyRs.Close
                End If
                
                commStr = "select * from 客户"
                
                GetRecordSet companyCmd, companyRs, commStr, conn
                BeginTransaction conn, companyRs
                ValuesClient = Array(Trim(company), Trim(dept), Trim(deptEmail), Trim(cName), Trim(cMobilePhone), Trim(cFax), _
                        Trim(cPhone), Trim(clientEmail))
                        
                If isNew = True And newChanged = False Then 'addNew
                     companyRs.AddNew
                    For i = 0 To UBound(FieldsClient)
                        companyRs(FieldsClient(i)) = ValuesClient(i)
                    Next
                    BeginTransaction conn, companyRs
                
                    MsgBox "新增成功", vbOKOnly, "新增"
                Else                       'update
                    'get the company parameter,connect to commpany table
               'update the 客户
                        Do While Not companyRs.EOF
                            If companyRs.Fields("客户编号") = ClientNo Then
                                companyRs.Update FieldsClient, ValuesClient
                                BeginTransaction conn, companyRs
                                Exit Do
                            End If
                                companyRs.MoveNext
                        Loop
                        
                        MsgBox "更新成功", vbOKOnly, "更新"
                        
                    'isCompanyInfoChanged companyRs, company, vocation, area, companywww, companyAddress
                    
                End If
                                
                InfoTree_NodeClick NodeX.Previous
            End If
            
                      
            isNew = False
            newChanged = False

解决方案 »

  1.   

    其中关键的代码如下,而且我现在直接把客户公司的主键更改为公司,行业,地区,
     现在的问题是:如果用户更改了 公司 字段信息,则可以正常将数据正常update,但是如果不更改 公司 信息 而直接去更改 行业 或 地区,就不会将数据正常Update,这是什么问题呢?
    ValuesCompany = Array(Trim(company), Trim(vocation), Trim(area), Trim(companywww), Trim(companyAddress))
                    companyRs.MoveFirst
                    
                    Do While Not companyRs.EOF
                    
                        If companyRs.Fields("公司") = company And companyRs.Fields("行业") = vocation _
                        And companyRs.Fields("地区") = area Then
                            companyRs.Update FieldsCompany, ValuesCompany
                            BeginTransaction conn, companyRs
                            Exit Do
                        End If
                        companyRs.MoveNext
                    Loop
                    
                    If companyRs.EOF Then
                        companyRs.MoveFirst
                        companyRs.AddNew
                        Dim i As Integer
                        For i = 0 To UBound(FieldsCompany)
                            companyRs(FieldsCompany(i)) = ValuesCompany(i)
                        Next
                        BeginTransaction conn, companyRs
                    End If
      

  2.   

    在试图关系中可以建立级联,
      这样就可以更新主表同时更新细表,
    但是通过sql语句得出的记录集就不一定可以同步更新,
      这是因为通过sql查询出的记录集中的某些字段也许不存在,也许某些字段是关键字,这样就不能同步更新操作
    建议单步更新操作,先更新主表,通过细表在更新细表