2

メインフォームとサブフォームがあります。サブフォームに情報を追加/編集できるテキスト ボックスがメイン フォームにあります。追加は正常に機能しますが、レコードを編集しようとすると、選択したレコードの情報が希望どおりにテキスト ボックスに表示されますが、更新しようとするとデータ型エラーが発生します。また、レコードを削除しようとすると、データ型エラーも発生します。

以前のプロジェクトのパートナーの 1 人が行った作業 (CarDealership) をコピーしようとしています。KeyInventory DB に同様の機能を追加したいと考えています。使用しているファイルは次のとおりです。http://jumpshare.com/b/t7Lot8

mainKeysフォームにあるボタンのコードのみを実行しました

エラーの再現:キーの削除をクリックすると、確認ダイアログが表示されます。「実行時エラー "3464": 条件式のデータ型が一致しません」を生成する [はい] を選択します。

これは、追加/更新ボタンのコードです。

 Private Sub cmdAdd_Click()
    If Me.keyID.Tag & "" = "" Then
        CurrentDb.Execute "INSERT INTO KEYS(KEY_ID, ROOM, DRAWER)" & _
            " VALUES(" & Me.keyID & ",'" & Me.roomID & "'," & Me.drawerID & ")"
              subKey.Form.Requery
    Else
        CurrentDb.Execute "UPDATE KEYS " & _
        " SET KEY_ID=" & Me.keyID & _
        ", ROOM='" & Me.roomID & "'" & _
        ", DRAWER='" & Me.drawerID & "'" & _
        " WHERE KEY_ID=" & Me.keyID.Tag
    End If

    cmdReset_Click

    subKey.Form.Requery
    End Sub

これは、[削除] ボタンのコードです。

  Private Sub cmdDelete_Click()
    If Not (Me.subKey.Form.Recordset.EOF And Me.subKey.Form.Recordset.BOF) Then
        If MsgBox("Confirm Deletion?", vbYesNo) = vbYes Then
            CurrentDb.Execute "DELETE FROM KEYS" & _
                " WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID")
                    Me.subKey.Form.Requery
        End If
    End If
    End Sub
4

1 に答える 1

1

これが「基準式のデータ型の不一致」エラーをトリガーする行であると仮定します...

CurrentDb.Execute "DELETE FROM KEYS" & _
    " WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID")

...dbエンジンに実行を要求しているステートメントを調べる機会を自分に与えてください。cmdDelete_Click()その行を次のコードに置き換えます。

Dim strSql As String
strSql = "DELETE FROM KEYS" & _
    " WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID")
Debug.Print strSql ' <- prints to Immediate window
CurrentDb.Execute strSql, dbFailOnError

次に、フォームをフォームビューで表示し、エラーが発生するコマンドボタンをクリックします。エラーが発生したら、イミディエイトウィンドウ(Ctrl+ g)に移動してDELETEステートメントを表示します。そのステートメントの問題が明らかでない場合は、ステートメントテキストをコピーして、テスト用に新しいクエリのSQLビューに貼り付けることができます。さらにサポートが必要な場合は、それを見せてください。

注:この提案ではエラーは修正されません。DELETEこれは、失敗したステートメント の診断を支援することのみを目的としています。

KEY_IDフィールドのデータ型がテキストの場合は、次のようにDELETEステートメントの数値を引用符で囲みます。

DELETE FROM KEYS WHERE KEY_ID='7'

それが機能する場合は、引用符も含めるようにコードを修正してください。

strSql = "DELETE FROM KEYS WHERE KEY_ID='" & _
    Me.subKey.Form.Recordset.Fields("KEY_ID") & "'"
于 2013-01-10T23:18:36.913 に答える