2016-07-20 23 views
1

これまでにこのトピックを見てきましたHow to insert values into the database table using VBA in MS access しかし、それは私の問題を解決しませんでした。 私は、配列[]テキストを含むpostgresqlのテーブルに値を挿入するためのフォームを作成しています。 追加する項目を選択し、ボタンをクリックしてSQL文を実行する必要があります。だから私は、最初の配列に追加する項目をロードするためのボタンとテキストボックスを作成し、ここにコードVBAからPostgreSQLデータベースに値を挿入する

Private Sub cmdSig_Click() 
Dim registros As String 
registros = "'" & [memo] & "'" & ", " 
[resu] = registros & [resu] 
End Sub 

は、その後、私はSQL INSERT INTOステートメントを実行するためのボタンを作成することです。 "([ '値2'、 'VALUE3' 値1 ']配列)sometable(array_field)値への挿入;" 私は次のようにPostgreSQLの結果を実行した場合

Private Sub cmdPruebas_Click() 
    Dim strsql As String, resultado As String, salida As String 

     Dim db As Database 
     dbconnect = "ODBC;DRIVER=PostgreSQL ANSI;UID=***;PWD=***;PORT=5432;SERVER=***.***.**.**;DATABASE=somedb;DSN=C:\***" 
     Set db = OpenDatabase("", False, False, dbconnect) 
     resultado = [resu] 

     strsql = "insert into prueba_arrays (tipo_intervencion) values " 
     salida = "(array[" & resultado & "]);" 




     DoCmd.SetWarnings False 
     DoCmd.RunSQL strsql & salida 
     DoCmd.SetWarnings True 
End Sub 

:ここでは、コードされそれはうまく動作します。しかし、MS-Accessでは、エラー3075 'execution time'クエリ 'array [' value1 '、' value2 '、' value3 ']'に演算子がありません。 何が起こっているか考えてみましょうか? ありがとうございます!

答えて

2

DoCmd.RunSQL Accessデータベースエンジンを通じてSQL文字列を実行します。 [..]はパラメータとして解釈されるため、エラーメッセージが表示されます。

PostgreSQLデータベースへのdb接続を開いていますが、使用していません。

それはパススルークエリで

db.Execute strsql & salida, dbSQLPassThrough 

DoCmd.RunSQL strsql & salida 

を変えるのと同じくらい簡単であるかもしれないSQL文字列は、データベースに直接渡されます。

+0

ありがとうマーランとアンドレ、それは正常に働いた。どうもありがとうございました!! –

2

DoCmd.RunSQL strsql & salidaは、アクセスcurrentDbをSQLで実行します。 はこれでその行を置き換えます

db.Execute strsql & salida 

だから、SQL を開いた、とPostgreSQLに接続されているデータベースオブジェクトから実行されることを。

+0

偉大な心は似ていると思います。 :)しかし、dbSQLPassThroughパラメータが必要かもしれません。 – Andre

+0

おそらく必要、確かに効率的です:) – marlan

関連する問題