0

いくつかのコンボボックスを含むフォームを使用してレコードを更新しようとしましたが、それらは都市と部門を含む補助テーブルから取り込まれています (更新する必要があるテーブルは、両方の「サイド」テーブルからの ID のみを保持します) .

データを直接挿入するのに苦労していたので、直接SQL挿入にADOを使用することにしました。

これまでのところ、私の 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 が補助テーブルを更新し、テキストを置き換えていることです。 「ciudadName」および「departamentoName」フィールドで、それぞれの ID を使用します。追加情報として、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の方法に行きましたが、まったく運がありませんでした。

編集:

問題の正しいヘルプを得るために、関連すると思われる追加情報を追加することにしました。アイデアは、さまざまなテーブルが互いにどのように関連しているかを示すことです。

これは、私が問題を抱えているデータベースのスキーマの関連部分です...

必要に応じて、フォーム自体のキャプチャをアップロードすることもできます。

4

1 に答える 1

0

コンボボックスのデータを確認してください。ControlSource プロパティが空白です。

于 2013-07-23T13:47:45.087 に答える