Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12517 / 13644 ツリー ←次へ | 前へ→

【10041】データベースクエリー まえだ 04/1/4(日) 22:43 質問
【10045】Re:データベースクエリー ichinose 04/1/5(月) 10:57 発言
【10066】Re:データベースクエリー まえだ 04/1/5(月) 22:34 質問
【10071】Re:データベースクエリー こうちゃん 04/1/6(火) 8:50 回答
【10073】Re:データベースクエリー ichinose 04/1/6(火) 10:02 発言
【10111】Re:データベースクエリー まえだ 04/1/7(水) 23:55 お礼

【10041】データベースクエリー
質問  まえだ E-MAIL  - 04/1/4(日) 22:43 -

引用なし
パスワード
   次のようなデータベースクエリーを新規で作成し、「dbAitem」の値を変化させてデータを抽出したいのですが、最終行の「Refresh BackgroundQuery:=False」でエラーが出ます。
対処方法をご教授ください。


Dim dbAitem As String

dbAitem = "岡山工業株式会社"
db1 = "ODBC;DSN=Excel Files;DBQ=C:\損益データ.xls;DefaultDir=C:\Data;DriverId=790;MaxBufferSize=2048;PageTime"
db2 = "SELECT `DB$`.コード, `DB$`.得意先名, `DB$`.年月日, `DB$`.売上対策"
db3 = "FROM `C:\損益データ`.`DB$` `DB$`"
db4 = "WHERE (`DB$`.得意先名=" & dbAitem & ") AND (`DB$`.売上対策<>'"


  With ActiveSheet.QueryTables.Add(Connection:=Array(Array(db1), Array("out=5;")), Destination:=Range("A1"))
    .CommandText = Array( _
     db2 & Chr(13) & "" & Chr(10) & db3 & Chr(13) & "" & Chr(10) & db4, " ')")
    .Name = "Excel Files からのクエリ"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = True
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .Refresh BackgroundQuery:=False
  End With

【10045】Re:データベースクエリー
発言  ichinose  - 04/1/5(月) 10:57 -

引用なし
パスワード
   ▼まえだ さん:
こんにちは。
>次のようなデータベースクエリーを新規で作成し、「dbAitem」の値を変化させてデータを抽出したいのですが、最終行の「Refresh BackgroundQuery:=False」でエラーが出ます。
>対処方法をご教授ください。

マクロの記録から組み立てていますよね?
次回は、エラーの内容も教えてくださいね!!
たぶん、SQLの記述ミスかと思います。
気が付いたところは、


>
>Dim dbAitem As String
>
>dbAitem = "岡山工業株式会社"
>db1 = "ODBC;DSN=Excel Files;DBQ=C:\損益データ.xls;DefaultDir=C:\Data;DriverId=790;MaxBufferSize=2048;PageTime"
>db2 = "SELECT `DB$`.コード, `DB$`.得意先名, `DB$`.年月日, `DB$`.売上対策"
>db3 = "FROM `C:\損益データ`.`DB$` `DB$`"
db4 = "WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策<>'"
'                ↑のシングルコーテーション
'ですが、確認してみて下さい。
'他にもあるかもしれませんが、SQLを再度見直してみたらどうでしょうか?


>
>  With ActiveSheet.QueryTables.Add(Connection:=Array(Array(db1), Array("out=5;")), Destination:=Range("A1"))
>    .CommandText = Array( _
>     db2 & Chr(13) & "" & Chr(10) & db3 & Chr(13) & "" & Chr(10) & db4, " ')")
>    .Name = "Excel Files からのクエリ"
>    .FieldNames = True
>    .RowNumbers = False
>    .FillAdjacentFormulas = False
>    .PreserveFormatting = True
>    .RefreshOnFileOpen = False
>    .BackgroundQuery = True
>    .RefreshStyle = xlInsertDeleteCells
>    .SavePassword = True
>    .SaveData = True
>    .AdjustColumnWidth = True
>    .RefreshPeriod = 0
>    .PreserveColumnInfo = True
>    .Refresh BackgroundQuery:=False
>  End With

【10066】Re:データベースクエリー
質問  まえだ E-MAIL  - 04/1/5(月) 22:34 -

引用なし
パスワード
   ▼ichinose さん:
>マクロの記録から組み立てていますよね?
はいそうです。

>次回は、エラーの内容も教えてくださいね!!
実行時エラー1004
一般ODBCエラー
と出ます。

>たぶん、SQLの記述ミスかと思います。
>気が付いたところは、
>
>db4 = "WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策<>'"
>'                ↑のシングルコーテーション
>'ですが、確認してみて下さい。


上記のように追加しましたらSQL構文エラーになりました

よろしくおねがいします。

【10071】Re:データベースクエリー
回答  こうちゃん E-MAIL  - 04/1/6(火) 8:50 -

引用なし
パスワード
   まえださん、ichinoseさん、こんにちは

ichinoseさんもおっしゃってますが、SQLを一度見直してみてはいかがでしょう。

たとえば

>db4 = "WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策<>'"
db4 = "WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策<>'')"

とかではいかがでしょう。

【10073】Re:データベースクエリー
発言  ichinose  - 04/1/6(火) 10:02 -

引用なし
パスワード
   こうちゃん、まえださん、おはようございます。

>ichinoseさんもおっしゃってますが、SQLを一度見直してみてはいかがでしょう。
>
>たとえば
>
>>db4 = "WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策<>'"
>db4 = "WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策<>'')"
>
>とかではいかがでしょう。
こうちゃん、フォローありがとうございます。

まえださん。

売上対策という列のデータの型を確認してくださいね。

db4 = "WHERE (`DB$`.得意先名 = '" & dbAitem & "') AND (`DB$`.売上対策 Is Not Null)"

なんてのも試してみて下さい。

それから、Array関数のネストの記述もこのコードでは、
本来は、必要ないように見えました。

db1 = "ODBC;DSN=Excel Files;DBQ=C:\損益データ.xls;DefaultDir=C:\Data;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"
db2 = "SELECT `DB$`.コード, `DB$`.得意先名, `DB$`.年月日, `DB$`.売上対策"
db3 = " FROM `C:\損益データ`.`DB$` `DB$`"
db4 = " WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策 Is Not Null)"


  With ActiveSheet.QueryTables.Add(Connection:=db1, Destination:=Range("A1"))
    .CommandText = db2 & db3 & db4

この辺ですが・・・。
確認してみて下さい。

【10111】Re:データベースクエリー
お礼  まえだ E-MAIL  - 04/1/7(水) 23:55 -

引用なし
パスワード
   ▼ichinose さん:
>こうちゃん、まえださん、おはようございます。
>
>>ichinoseさんもおっしゃってますが、SQLを一度見直してみてはいかがでしょう。
>db3 = " FROM `C:\損益データ`.`DB$` `DB$`"
>db4 = " WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策 Is Not Null)"
>この辺ですが・・・。
>確認してみて下さい。

出来ました!!

db4 = "WHERE (`DB$`.得意先名='" & dbAitem & "') AND (`DB$`.売上対策 Is Not Null)"

With ActiveSheet.QueryTables.Add(Connection:=Array(Array(db1), Array("out=5;")), Destination:=Range("A1"))
 .CommandText = Array( _
  db2 & Chr(13) & "" & Chr(10) & db3 & Chr(13) & "" & Chr(10) & db4)
よくよく確認。トライ&エラーの繰返しでした。
「Is Not」の記述と、最後の記述に余分な「,)」がありました。

年始廻りでPC使用が遅くなり、返事が遅れました。 
ありがとうございます。
  

12517 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free