【发布时间】:2013-07-02 07:25:12
【问题描述】:
我一直在尝试使用一个包含几个组合框的表单来更新一些记录,这些组合框是从包含城市和部门的辅助表中填充的(需要更新的表只包含两者的 ID)边桌。
由于我很难直接插入数据,我决定使用 ADO 进行直接 SQL 插入。
到目前为止,我的 VBA 代码如下所示:
Private Sub btnClose_Click()
Dim Msg, Style, Title, Ctxt, Help, Response, MyString
Msg = "Want to save changes?"
Style = vbYesNo + vbQuestion
Tytle = "Confirm changes"
Ctxt = 1000
Response = MsgBox(Msg, Style, Tytle, Help, Ctxt)
If Response = vbNo Then
Cancel = True
Else
Call ManualUpdate
End If
End Sub
还有 ManualUpdate 子:
Private Sub ManualUpdate()
Dim ccnDb As ADODB.Connection
Set ccnDb = CurrentProject.Connection
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim strSQL As String
strSQL = "UPDATE personal SET personaApPaterno = " & "'" & Trim(Me.personaApPaterno.Value) & "'"
strSQL = strSQL & ", personaApMaterno = " & "'" & Trim(Me.personaApMaterno.Value) & "'"
strSQL = strSQL & ", personaNombre = " & "'" & Trim(Me.personaNombre.Value) & "'"
strSQL = strSQL & ", personaCargo = " & "'" & Trim(Me.personaCargo.Value) & "'"
strSQL = strSQL & ", departamentoId = " & Me.cmbDepto.Value
strSQL = strSQL & ", ciudadId = " & Me.cmbCiudad.Value
strSQL = strSQL & ", personaProfesion = " & "'" & Trim(Me.personaProfesion.Value) & "'"
strSQL = strSQL & ", personaGerente = " & Me.personaGerente.Value
strSQL = strSQL & ", personaExterno = " & Me.personaExterno.Value
strSQL = strSQL & ", personaSexo = " & Me.ogSexo.Value
strSQL = strSQL & " WHERE personaRUT = " & Me.personaRUT.Value
If Me.Dirty Then
Me.Dirty = False
End If
With cmd
.CommandText = strSQL
.ActiveConnection = ccnDb
.Execute
End With
Set cmd = Nothing
DoCmd.Close
End Sub
到目前为止...很好...
正如您所看到的,SQL 对名为“个人”的表进行了直接升级,并且工作正常,唯一让我抓狂的是,出于某种奇怪的原因,Access 2007 正在更新辅助表和用各自的 ID 替换“ciudadName”和“departamentoName”字段中的文本。只是为了一些额外的信息,我在 ADO 之前使用的是 DAO。
这里也是DAO代码...
Private Sub ManualUpdate()
Dim dbDao As DAO.Database
Dim rsDao As DAO.Recordset
If Me.Dirty Then
Me.Dirty = False
End If
Set dbDao = CurrentDb
Set rsDao = dbDao.OpenRecordset("personal", dbOpenTable)
rsDao.FindFirst ("personaRUT = " & Me.personaRUT.Value)
rsDao.Edit
rsDao![personaApPaterno] = Trim(Me.personaApPaterno.Value)
rsDao![personaApMaterno] = Trim(Me.personaApMaterno.Value)
rsDao![personaNombre] = Trim(Me.personaNombre.Value)
rsDao![personaCargo] = Me.personaCargo.Value
rsDao![departamentoId] = Me.cmbDepto.Value
rsDao![comunaId] = Me.cmbComuna.Value
rsDao![personaProfesion] = Me.personaProfesion.Value
rsDao![personaGerente] = Me.personaGerente.Value
rsDao![personaExterno] = Me.personaExterno.Value
rsDao![personaSexo] = Me.ogSexo.Value
rsDao.Update
rsDao.Close
dbDao.Close
Set dbDao = Nothing
Set rsDao = Nothing
DoCmd.Close
End Sub
顺便说一句:DAO 正在执行不应该发生的相同“更新”,这就是我选择 ADO 方式的原因,但完全没有运气。
编辑:
决定添加一些我认为相关的额外信息,以便为我的问题获得正确的帮助。这个想法是为了展示不同的表是如何相互关联的。
如果需要,我还可以上传它自己的表单捕获。
【问题讨论】:
-
也许你的关系配置不正确……只是猜测。
-
另一种可能性是组合框绑定到您的“边”(我称之为查找)表,选择组合框会更新查找表。
-
这听起来像是要检查的东西......无论如何,据我所知,我应该在预建查询(视图)中进行这些查找并在查找 ID 上执行 SELECT DISTINCT ?
-
不.. 它只是不断更新,但我确实注意到了一些事情,当我加载“个人”编辑表单时,我注意到只要我点击包含 departamentoId + descDepartamento 的组合框,它就会将字段“descDepartamento”更新为“departamentos”表中对应的“departamentoId”。有趣的是。我没有一行需要显式更新(此组合框的所有事件都没有VBA)。
标签: sql ms-access ms-access-2007 vba ado