-1

このようなものがすでに投稿されているか、単純な修正である場合はお詫びしますが、私はあちこち探し回っていて、この問題の解決策を見つけることができないようです. 私は vba: ms アクセスを使用しています。クエリを実行して、異なるデータベースにある 2 つの同一のテーブルを比較しようとしています。ユーザー入力のみを必要とするさまざまなデータベースで実行できるように、スクリプトを作成しようとしています。ただし、このプロセスを通じて、次のようなエラーが発生し続けるようです。

select ステートメントに予約語が含まれているか、スペルが間違っているか欠落している引数名が含まれています。

LinkUserTable 関数は基本的に、ユーザー入力に基づいて別の DB からリンク テーブルを作成します。以下はサブルーチンです。

Sub LinkTables()
        Dim sTable1 As String
        Dim sTable2 As String
    sTable1 = LinkUserTable
    sTable2 = LinkUserTable

    vars_sql = "SELECT " & sTable1 & ".[f_ptid]," & sTable1 & ".[f_flag]," & sTable1 & ".[f_user]," & sTable1 & ".[f_brief]," & sTable1 & ".[f_gid]," & sTable1 & ".[f_vco]," & sTable1 & ".[f_dtype]," & sTable1 & ".[f_precs]," & sTable1 & ".[f_addr]," & sTable1 & ".[f_ndim]," & sTable1 & ".[f_sys]," & sTable1 & ".[f_unit]," & sTable1 & ".[f_value]," & sTable1 & ".[f_pred]," & sTable1 & ".[f_bflag]," & sTable1 & ".[f_dim1]," & sTable1 & ".[f_dim2]," & sTable1 & ".[f_dim3]," & sTable1 & ".[f_bound]," & sTable1 & ".[f_size]," & sTable1 & ".[f_updat]," & sTable1 & ".[f_time]," & sTable1 & ".[f_ldes]," & sTable1 & ".[f_sflag]," & sTable1 & ".[f_tflag]," & sTable1 & ".[rid]" + _
                    "FROM" + sTable1 + " AS LEFT JOIN " + sTable2 + " AS ON sTable1.[f_ptid] = sTable2.[f_ptid]" + _
                    "WHERE (((" & sTable2 & ".[f_ptid]) Is Null))" 


If CheckQuery("new_old") = "Yes" Then
            DoCmd.DeleteObject acQuery, "new_old"
        End If

Set qdf = CurrentDb.CreateQueryDef("new_old", vars_sql)

End Sub

これに基づいて、このエラーを引き起こす可能性のある問題は何でしょうか? すべてのフィールドは両方のデータベースにあり、すべて同じプロパティ (データが異なるだけ) です。必要に応じてさらに提供できる情報が不足している場合は、お詫び申し上げます。

4

2 に答える 2

0

正しい構文はLEFT JOINではなくAS LEFT JOINです。

これに対する例外は、テーブルにエイリアスを与えたい場合です。その場合はそうしますAS Alias LEFT JOIN...ただし、構文を使用しているため、この場合はそうしたくありません)。[table].[columnname]

于 2013-07-12T18:00:05.710 に答える