- 締切済み
SQL文をVBAで流すと「型が一致しない」というエラーが
PostgreSQLのDBに、SQL文を投げて、結果をシートに書きだす、というマクロを組みました。 しかし、A5などのソフトでこのSQL文を実行すると正しく結果が返ってくるのですが、下記のマクロで流そうとすると、 .CommandText = Array(myCmd) 部分で”型が一致しません”とエラーを返します。 この原因がおわかりの方がいたら、是非教えて下さい。 netで調べたりしたけどわかりません。 ちなみに、マクロで、注意A)のSQL文を実行すると エラーなく実行できました。尚、下記のSQL文の改行は 見やすくするためにしているだけで、実際とは異なります。 また、SQL文を3つの変数に区切り、最後にmyCmdにドッキングして 実行したりもしましたがダメでした。 Sub test() Dim myCnc As String Dim myCmd As String 'Worksheets.Add 'ワークシートの追加 Sheets("ユーザー名簿").Select '接続先サーバーを指定 myCnc = "ODBC;DRIVER={PostgreSQL Unicode};DATABASE=" & t_name & ";SERVER=" & s_ver & ";PORT=5432;UID=" & user & ";;SSLmode=disable;ReadOnly=0;Protocol=7," 'Select 文 myCmd = "SELECT t_syukka.order_dtl_id As 受注先コード,t_torihikisaki.ryknm As 受注先 FROM t_nonyusaki, t_syukka,t_torihikisaki WHERE t_torihikisaki.tkcd = t_nonyusaki.tkcd And t_nonyusaki.jscd = t_syukka.juchusaki_id And t_syukka.syukka_date >='20091120' And t_syukka.syukka_date <='20091201'" With ActiveSheet.QueryTables.Add( _ Connection:=myCnc, Destination:=Range("A5")) .CommandText = Array(myCmd) .name = t_name .Refresh BackgroundQuery:=False End With End Sub 注意A) myCmd = "SELECT t_syukka.order_dtl_id As 受注先コード,t_torihikisaki.ryknm As 受注先 FROM t_nonyusaki, t_syukka,t_torihikisaki WHERE t_syukka.syukka_date >='20091120' And t_syukka.syukka_date <='20091201'" 環境) DB:Linux PostgrSQL クライアント:WindowsXP,VISTA Office2007
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- lesskey
- ベストアンサー率33% (66/200)
どもども、解決したようで何よりです。(^-^) 一応自分もプログラマの端くれなので一つご指摘を。 >サンプルをよくわからないまま流用したのが失敗のもとでした。 う~ん、趣味でならコレでも良いですけど・・・ 仕事としてプログラミングをしているのであればサンプルなど ソース流用する場合は内容を理解した上で使いましょう。 理解しないままだと、ソースコードレビューでの指摘や テストでバグ発生した などで説明が求められたときに 「ソース流用したので動きは良くわかんないです」とかじゃ 自分の首を絞める以外の何者でもないです。 ・・・ま、昔は自分も良くやりました。(-_-;)頑張ってくださいね。
- lesskey
- ベストアンサー率33% (66/200)
Array関数ってVariant型の配列を返すものだと思うけど、 CommandTextプロパティは良く知らないけど名前から文字列型かなぁ・・・ Variant型の配列→String型に格納しようとしてるからエラーが出てるのかと思われます。
お礼
lesskeyさん!あなたの回答を参考に次の2点を変更することでうまくエラーも出ずに実行することができましたっ! ご指摘のように、Stringではなく、Variantにしてみました。 それで、実行しましたが、それまでのように、「型が一致しません」は あいかわらず出ました。 そこで、=Array(myCmd)を =myCmd にしたところ問題が出ずに実行できました。 ありがとうございました。 元々、サンプルをよくわからないまま流用したのが失敗のもとでした。 ありがとうございました。