2013-07-03 52 views
0

我一直在嘗試使用一個窗體來更新某些記錄,這個窗體中有一些組合框,並且這些窗體是由包含城市和部門的輔助表填充的(需要更新的表只包含兩側的ID「side 「表ADO SQL修改其他表上的數據?

,因爲我是有一些困難的時候,直接插入數據,我決定使用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 

BTW:DAO是幹什麼的地方不應該被髮生的事情,這是爲什麼我去的ADO方式,但具有相同的「更新」沒有運氣。

編輯:

決定要補充一點,我認爲是爲了得到我的問題,正確的幫助相關的一些額外信息。這個想法是展示不同的表格是如何相互關聯的。

This is the relevant part of the Schema for the Database i´m having issues with...

如果需要的話我也可以上傳的形式,它自身的捕獲。

+0

也許你的關係配置不正確......只是猜測。 –

+1

另一種可能性是組合框以這種方式綁定到您的「方」(我稱它們爲查找)表,以便選擇組合框更新查找表。 –

+0

這聽起來像檢查什麼......任何方式,因爲我知道我應該有一個預先構建的查詢(視圖)中的查找,並對查找ID的做一個SELECT DISTINCT? – AcidRod75

回答

0

檢查組合框數據。 ControlSource屬性爲空。