Microsoft Access 掲示板

Error#: 3134 INSERT INTO ステートメントの構文エラーです。 / 13

20 コメント
views
4 フォロー
13
wazawaza 2022/06/17 (金) 11:24:25

hirotonさん
ご提案の文を使わせて頂きました。
“コンパイルエラー 変数が定義されていません。”
初歩的な質問で、大変恐縮ですが
間違えを指摘していただけますか?

Private Sub btn追加_Click()
    
   Dim strSQL As String
   strSQL = "SELECT 依頼ID AS txt依頼ID, 依頼日 AS txt依頼日, 依頼者 AS cmb依頼者, 作業長承認 AS cmb作業長承認, W_No AS txtW_No, W_Noロット AS txtW_Noロット, 品名 AS txt品名, 希望処置 AS cmb希望処置, 補足説明 AS txt補足説明 FROM T_依頼;"
    Set rs = CurrentDb.OpenRecordset(strSQL) '← rs = が反転されます。
    rs.AddNew
    For Each fld In rs.Fields
        fld.Value = Me(fld.Name).Value
    Next
    rs.Update
    
    Dim strSQL As String
    strSQL = "SELECT 依頼ID, ロット番号 AS txtロット番号, ロット枝 AS cmbロット枝, 依頼理由_1 AS cmb1依頼理由, 依頼理由_2 AS cmb2依頼理由, 依頼理由_3 AS cmb3依頼理由, 巻き長さ AS txt巻き長さ, 詳細補足説明 AS txt詳細補足説明, 更新日時 FROM T_依頼詳細"
    Set rs = CurrentDb.OpenRecordset(strSQL)
    Dim i As Long
    For i = 1 To 10
        If Not IsNull(Me("cmb1依頼理由" & i).Value) Then
            rs.AddNew
            For Each fld In rs.Fields
                If Not ",依頼ID,更新日時," Like "*," & fld.Name & ",*" Then
                    fld.Value = Me(fld.Name & i).Value
                End If
            Next
            '//レコード共通項目や計算結果を入れるものは個別に処理
            rs!依頼ID.Value = Me!依頼ID.Value
            rs!更新日時.Value = Now
            rs.Update
        End If
    Next i
    rs.Close
    
    MsgBox "追加しました", vbInformation, "完了"
End Sub
通報 ...
  • 15

    コンパイルエラーなのでコンパイルをしてみましょう
    画像1

    エラーの場所が反転してわかると思います
    画像2

    回答はコード案の一部を記載したものなので、前後の処理や必要な変数宣言は別途記述する必要があります。変数の使いまわしもしてるので記述を整理する必要もあるでしょう

    プロシージャをすべて記述するなら

    Private Sub btn追加_Click()
        Dim rs As DAO.Recordset, fld As DAO.Field '//この行が不足
        Dim strSQL As String
        strSQL = "SELECT 依頼ID AS txt依頼ID, 依頼日 AS txt依頼日, 依頼者 AS cmb依頼者, 作業長承認 AS cmb作業長承認, W_No AS txtW_No, W_Noロット AS txtW_Noロット, 品名 AS txt品名, 希望処置 AS cmb希望処置, 補足説明 AS txt補足説明 FROM T_依頼;"
        Set rs = CurrentDb.OpenRecordset(strSQL)
        rs.AddNew
        For Each fld In rs.Fields
            fld.Value = Me(fld.Name).Value
        Next
        rs.Update
        
    '    Dim strSQL As String '//すでに宣言しているので不要
        strSQL = "SELECT 依頼ID, ロット番号 AS txtロット番号, ロット枝 AS cmbロット枝, 依頼理由_1 AS cmb1依頼理由, 依頼理由_2 AS cmb2依頼理由, 依頼理由_3 AS cmb3依頼理由, 巻き長さ AS txt巻き長さ, 詳細補足説明 AS txt詳細補足説明 FROM T_依頼詳細"
        Set rs = CurrentDb.OpenRecordset(strSQL)
        Dim i As Long
        For i = 1 To 10
            If Not IsNull(Me("cmb1依頼理由" & i).Value) Then
                rs.AddNew
                For Each fld In rs.Fields
                    If Not ",依頼ID,更新日時," Like "*," & fld.Name & ",*" Then
                        fld.Value = Me(fld.Name & i).Value
                    End If
                Next
                'レコード共通項目や計算結果を入れるものは個別に処理
                rs!依頼ID.Value = Me!依頼ID.Value
                rs.Update
            End If
        Next i
        rs.Close
        
        MsgBox "追加しました", vbInformation, "完了"
    End Sub
    

    「更新日時」フィールドは例示のための記述なので削除しました