2

複数のINSERTSQLクエリの使用を避けようとしていますが、必要な場合は使用します。簡単に使用できることを読みましたINSERT INTO table(field) SELECT 'value' UNION ALL SELECT ...、MS Access 2007での構文に問題があります。いくつかのバリエーションを試しましたが、機能しません。常に「構文が正しくありません」または「演算子がありません」というエラーが発生します。ALL修飾子の有無、キーワードの有無などを試しSELECTました。VBAを使用してクエリを作成する方法は次のとおりです。

sql_query = "INSERT INTO " & tmp_tbl_name & " (transit)"
For Each xlCell In xlRange
    sql_query = sql_query & " SELECT '" & xlCell.Value & "' "
    sql_query = sql_query & "UNION"
Next xlCell
sql_query = Mid(sql_query, 1, Len(sql_query) - 6)
DoCmd.RunSQL (sql_query)

これが私が生成しているクエリの短縮されたサンプルです:

INSERT INTO tmp_tbl_2012_08_17_15_44_03 (transit) 
SELECT 'L02_NA010001' 
  UNION 
SELECT 'L13_PB010001' 
  UNION 
SELECT 'L31_US020001' 
  UNION 
SELECT 'L33_EX020010'
  ...

テーブルにはVARCHAR(255)フィールドが1つだけあり、他のテーブルとの関係はありません(これは、いくつかの処理を行い、その一部の要素のみを保持するための一時的なテーブルです)。

どうもありがとう !

4

2 に答える 2

3

古き良きDAOを使用して、これをかなり迅速に行うことができると思います。

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("tmp_tbl_2012_08_17_15_44_03", dbOpenDynaset)

For Each xlCell In xlRange
    With rs
        .AddNew
        .Fields("transit") = xlCell.Value
        .Update
    End With
Next xlCell

rs.Close
db.Close
于 2012-08-17T20:22:16.610 に答える
1

MS Accessでステートメントを一度に1つずつ実行する方がおそらく簡単です。UNIONでは、UNIONステートメントごとにFROMテーブルが必要です。つまり、FROMテーブルには1行だけ、または少し凝ったフットワークが含まれている必要があります。

INSERT INTO tmp_tbl_2012_08_17_15_44_03 (transit) 
SELECT Transit FROM (
SELECT DISTINCT 'L02_NA010001' As Transit FROM tablename
  UNION 
SELECT DISTINCT 'L13_PB010001' As Transit FROM tablename
  UNION  ... )
于 2012-08-17T20:13:09.827 に答える