2016-08-24 5 views
1

を更新していない追加クエリを保存しましたここで、パラメータはフォームコントロールから収集されます。ボタンを保存するための私のVBAコードは次のとおりです。MS Accessの2013年は、私は次のようにある保存されたクエリ、qryInsertLogを持っているすべてのフィールドに

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フィールドが更新されません。他の3つのフィールドは、期待どおりに更新されます。 FNotesは必須ではない唯一のフィールドです。私はそうのようなFNotesののparamaterの文字列をハードコード:

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

ではなく、フォームコントロールの値を使用して、同じ結果だ:そのフィールドだけで更新されませんが。 Access Objectsウィンドウからこのクエリを実行し、プロンプトからパラメータ値を入力すると、正常に動作します。テーブルにバインドされたフォームを作成すると、うまくいくようにも見えます。

なぜLogEntryフィールドを更新するのに問題はないのか分かりませんが、FNotesフィールドは更新に失敗します。

+0

パラメータクエリの問題があります。最後の1つにも運がありませんか? debug.printを使用して値を確認してください。実行にdbFailonErrorを追加します。 – dbmitch

+1

私はそれが再びLongTextパラメータだと思います。 – Andre

答えて

1

DAO.QueryDefの代わりにDAO.Recordsetで新しいレコードを追加します。

まず、Set db = CurrentDb後にこれを使用すると、この宣言...

Dim rs As DAO.Recordset 

を含める....

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 

Nz(Me.txtFNotes.Value, "")は、より簡潔に、あなたにIIf(IsNull(Me.txtFNotes.Value), "", Me.txtFNotes.Value)と同じものを与えるが、 。

+0

完璧に動作します、ありがとう! –

関連する問題