我的更新方式如下:
'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
'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
现在的问题是:如果用户更改了 公司 字段信息,则可以正常将数据正常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
这样就可以更新主表同时更新细表,
但是通过sql语句得出的记录集就不一定可以同步更新,
这是因为通过sql查询出的记录集中的某些字段也许不存在,也许某些字段是关键字,这样就不能同步更新操作
建议单步更新操作,先更新主表,通过细表在更新细表