dポイントプレゼントキャンペーン実施中!

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

A 回答 (2件)

どもども、解決したようで何よりです。

(^-^)
一応自分もプログラマの端くれなので一つご指摘を。

>サンプルをよくわからないまま流用したのが失敗のもとでした。
う~ん、趣味でならコレでも良いですけど・・・
仕事としてプログラミングをしているのであればサンプルなど
ソース流用する場合は内容を理解した上で使いましょう。

理解しないままだと、ソースコードレビューでの指摘や
テストでバグ発生した などで説明が求められたときに
「ソース流用したので動きは良くわかんないです」とかじゃ
自分の首を絞める以外の何者でもないです。

・・・ま、昔は自分も良くやりました。(-_-;)頑張ってくださいね。
    • good
    • 0

Array関数ってVariant型の配列を返すものだと思うけど、


CommandTextプロパティは良く知らないけど名前から文字列型かなぁ・・・
Variant型の配列→String型に格納しようとしてるからエラーが出てるのかと思われます。

参考URL:http://msdn.microsoft.com/ja-jp/library/cc389626 …
    • good
    • 1
この回答へのお礼

lesskeyさん!あなたの回答を参考に次の2点を変更することでうまくエラーも出ずに実行することができましたっ!
ご指摘のように、Stringではなく、Variantにしてみました。
それで、実行しましたが、それまでのように、「型が一致しません」は
あいかわらず出ました。
そこで、=Array(myCmd)を =myCmd にしたところ問題が出ずに実行できました。
ありがとうございました。
元々、サンプルをよくわからないまま流用したのが失敗のもとでした。
ありがとうございました。

お礼日時:2009/11/14 22:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A