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文の書き方がまずいのかな?と思うのですが、ご教授願えれば幸いです。
No.2ベストアンサー
- 回答日時:
>お手数掛けて申し訳ないんですが、s_numが数値型の場合はどのように囲めばいいのかご教授いただければ幸いです。
s_numが数値型?
じゃあ、owner_idも数値型なんでしょうか。
LIKEは文字列型しか使えませんよ。
LIKEではなく、=を使うとしたら、そのまま&でつなげるだけです。
" where owner_id = " & s_num & " and・・・・・・;"
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"))'ここ(コネクションの指定)もまちがってた。
この度は、ありがとうございました。
どうも片手間でやってると進歩が無く、なんとか時間を割いてレベルアップしたいと思います。
また、お手数掛けることがあるかもしれませんが、よろしくお願いします。
No.1
- 回答日時:
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; "
ご教授ありがとうございます。
早速試してみましたところ、値はうまく取得できているようです。
※データが無いと実行時エラーが発生しましたが、これは別の問題なので。
お手数掛けて申し訳ないんですが、s_numが数値型の場合はどのように囲めばいいのかご教授いただければ幸いです。
<(_ _)><(_ _)><(_ _)>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPとMysqlを使用した集計表の...
-
日替わりメッセージを表示させ...
-
DB登録に関する日付の認識
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
AccessのSQL文で1件のみヒット...
-
select文の実行結果に空白行を...
-
2つの列が同じ値の行を取得するSQL
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
where句中のtrim関数について
-
Oracleで「文字が無効です」の...
-
SQLです下記の問合せを行うクエ...
-
並べ替えについて
-
SELECT FOR UPDATE で該当レコ...
-
<SQL>重複しているデータの場合...
-
レコードの登録順がおかしい
-
SQLです。下記の問合せを行うク...
-
割合(パーセント)を求めるには?
-
複数のテーブルから値を合計出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP+MySQLで月ごとの数量を表...
-
【PL/SQL】DATE型の時刻の表示...
-
PHPとMysqlを使用した集計表の...
-
データ更新用のphpの記述でデー...
-
PHPでMySQL内のデータの合計値...
-
postgresのカレンダーについて
-
EXCELマクロのSQL文での引用符...
-
日替わりメッセージを表示させ...
-
bash内のaws cli cloudwatch Lo...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
2つの列が同じ値の行を取得するSQL
-
レコードの登録順がおかしい
-
<SQL>重複しているデータの場合...
-
AccessのSQL文で1件のみヒット...
おすすめ情報