2016-08-24 67 views
1

我有一個保存的查詢,qryInsertLog這是如下:的MS Access 2013保存追加查詢沒有更新的所有字段

PARAMETERS UserIDPar Long, UnitIDPar Long, LogEntryPar LongText, FNotesPar LongText; 
INSERT INTO tblLogBook (UserID, UnitID, LogEntry, FNotes) 
SELECT [UserIDPar] AS Expr1, [UnitIDPar] AS Expr2, [LogEntryPar] AS Expr3, [FNotesPar] AS Expr4; 

我想,當保存按鈕來運行此查詢點擊綁定表單上,其中參數從窗體控件收集。我的保存按鈕的VBA代碼是:

Private Sub cmdSave_Click() 

Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim okToSave As Boolean 

If Me.cboUser.Value = 0 Or IsNull(Me.cboUser.Value) Then 
    MsgBox "You must choose a user. Record not saved." 
    okToSave = False 
ElseIf Me.cboUnit.Value = 0 Or IsNull(Me.cboUnit.Value) Then 
    MsgBox "You must choose a unit. Record not saved." 
    okToSave = False 
ElseIf Me.txtLogEntry.Value = "" Or IsNull(Me.txtLogEntry.Value) Then 
    MsgBox "You must have somtehing to log. Record not saved." 
    okToSave = False 
Else 
    okToSave = True 
End If 

Set db = CurrentDb 
Set qdf = db.QueryDefs("qryInsertLog") 

qdf.Parameters("UserIDPar").Value = Me.cboUser.Value 
qdf.Parameters("UnitIDPar").Value = Me.cboUnit.Value 
qdf.Parameters("LogEntryPar").Value = Me.txtLogEntry.Value 
qdf.Parameters("FNotesPar").Value = IIf(IsNull(Me.txtFNotes.Value), "", Me.txtFNotes.Value) 

If okToSave Then 
    qdf.Execute 
End If 

qdf.Close 
Set qdf = Nothing 

End Sub 

當此代碼運行時,表的FNotes字段未更新。其他三個字段按預期更新。 FNotes是唯一不需要的字段。我硬編碼FNotes字符串paramater像這樣:

qdf.Parameters("FNotesPar").Value = "why doesn't this work" 

,而不是使用表單控件的值,並得到了相同的結果:那場只是不更新​​。當我從Access Objects窗口運行此查詢並從提示中提供參數值時,它工作得很好。當我創建綁定到表格的表單時,它似乎也可以正常工作。

我找不出爲什麼更新LogEntry字段沒有問題,但FNotes字段無法更新。

+0

您有參數查詢問題。最後一個也沒有運氣?使用debug.print檢查您的值。將一個dbFailonError添加到您的執行中。 – dbmitch

+1

我敢打賭這是LongText參數。 – Andre

回答

1

通過DAO.Recordset而不是DAO.QueryDef添加新記錄。

首先,包括這個聲明......

Dim rs As DAO.Recordset 

然後用這個Nz(Me.txtFNotes.Value, "")Set db = CurrentDb後....

Set rs = db.OpenRecordset("tblLogBook") 
With rs 
    If okToSave Then 
     .AddNew 
     !UserID = Me.cboUser.Value 
     !UnitID = Me.cboUnit.Value 
     !LogEntry = Me.txtLogEntry.Value 
     !FNotes = Nz(Me.txtFNotes.Value, "") 
     .Update 
    End If 
    .Close 
End With 

注意你同樣的事情IIf(IsNull(Me.txtFNotes.Value), "", Me.txtFNotes.Value),但更簡潔。

+0

完美的作品,謝謝! –