プロが教える店舗&オフィスのセキュリティ対策術

EXCELで社外サーバーにある、postgreSQLのデーターベーステーブルに接続し、テーブルにフォームに入力した値でフィルタをかけた結果をシートに転記するマクロを作ろうと思っています。

ACCESSではVBE扱ったことありますが、EXCELはほとんど経験なく、特にSQL(クエリ)の扱いが良く分からず、エラーの連続です。

いろんな、事例をググったのですがどうしても解決できす、どなたかお教えできないでしょうか?

以下標準モジュールに書き込み、Callで呼び出しています。

Sub tbl_copy()

Dim QT As QueryTable
Dim MySql As String
Dim oCoN As New ADODB.Connection
Dim oRS As ADODB.Recordset
Dim day1 As Variant
Dim day2 As Variant
Dim s_num As Variant

day1 = form1.date1
day2 = form1.date2
s_num = form1.NUMBER

oCoN.Open "Driver={PostgreSQL Unicode}; Server=***.***.***.***; Database=DB001; UID=*****; PWD=*******; Port=****;"

MySql = " select start_date, end_date, name, place, note from schedule" & _
" where owner_id LIKE s_num and (start_date Between #"" & day1 & ""# AND #"" & day2 & ""#) " & _
" order by start_date ASC; "

Set oRS = New ADODB.Recordset

oRS.Open MySql, oCoN, adOpenStatic, adLockReadOnly, adCmdText ’ここでエラー!
Set QT = ActiveSheet.QueryTables.Add(Connection:=oCoN, Destination:=Range("A3"))
QT.name = "MyQuery"
QT.Refresh

oRS.Close
oCoN.Close

Set oRS = Nothing
Set oCoN = Nothing

End Sub

SQL文の書き方がまずいのかな?と思うのですが、ご教授願えれば幸いです。

A 回答 (2件)

>お手数掛けて申し訳ないんですが、s_numが数値型の場合はどのように囲めばいいのかご教授いただければ幸いです。



s_numが数値型?
じゃあ、owner_idも数値型なんでしょうか。
LIKEは文字列型しか使えませんよ。

LIKEではなく、=を使うとしたら、そのまま&でつなげるだけです。

" where owner_id = " & s_num & " and・・・・・・;"
    • good
    • 0
この回答へのお礼

s_numは整数型のデータなのですが、整数型の宣言をすると「型が違います」エラーが出てたので、文字列扱いにして作業していました。

件局、文字列では「データが無い」というエラーが出たので、整数型にしてVal関数でうまく行きました。

以下、変更箇所

Dim s_num As Integer

s_num = Val(form1.NUMBER)

MySql = " select start_date, end_date, name, place, note from schedule" & _
" where owner_id = '" & s_num & "' and (start_date Between '" & Format(day1, "yyyy/m/d") & "' AND '" & Format(day2, "yyyy/m/d") & "') " & _
" order by start_date ASC; "

Set QT = ActiveSheet.QueryTables.Add(Connection:=oRS, Destination:=Range("A3"))'ここ(コネクションの指定)もまちがってた。

この度は、ありがとうございました。

どうも片手間でやってると進歩が無く、なんとか時間を割いてレベルアップしたいと思います。

また、お手数掛けることがあるかもしれませんが、よろしくお願いします。

お礼日時:2013/10/23 09:45

MySql = " select start_date, end_date, name, place, note from schedule" & _


" where owner_id LIKE s_num and (start_date Between #"" & day1 & ""# AND #"" & day2 & ""#) " & _
" order by start_date ASC; "

なぜ引用符を2つ続けているのでしょうか。1つだけでいいです。
s_numはVBAの変数ですから、SQLの中に含めることはできません。
s_numの型はLIKEを使っているから文字列なんでしょうね。引用符を2つ続けるのはここです。

MySql = " select start_date, end_date, name, place, note from schedule" & _
" where owner_id LIKE """ & s_num & """ and (start_date Between #" & day1 & "# AND #" & day2 & "#) " & _
" order by start_date ASC; "
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。

早速試してみましたところ、値はうまく取得できているようです。

※データが無いと実行時エラーが発生しましたが、これは別の問題なので。

お手数掛けて申し訳ないんですが、s_numが数値型の場合はどのように囲めばいいのかご教授いただければ幸いです。

<(_ _)><(_ _)><(_ _)>

お礼日時:2013/10/22 10:32

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