ExcelVBAでSQLを使う上で質問をお願いします。SQ

Writer: admin Type: regalmach Date: 2019-01-08 00:00
ExcelVBAでSQLを使う上で質問をお願いします。SQLを実行すると、「オブジェクトが閉じている場合は、操作は許可されません」と表示されます。これはSQLが間違っているのだと認識しています。データベースはDB2です。肝心のSQLですが、JOINやGROUP BYやCASE文を使ったやたら長い文で、しかもそれをUNIONでつながげています。簡単に書きますと、(SELECT .....MAX(D) FROM (SELECT .... FROM HOGE LEFT OUTER JOIN ...) GROUP BY)UNION(SELECT .....MAX(D) FROM (SELECT .... FROM HOGE2 LEFT OUTER JOIN ...) GROUP BY)になります。改行のつなげ方はsSQL = sSQL & "SQL文"でつなげています。これを実行させるとエラーになります。しかしUNIONの前後の文をそれぞれ動作させると動きます。但しその場合は前後の()は省かないと動きません。前後の()を省いた上でUNIONしてみた場合は動きません。いづれにせよSQL文が間違っているのだろうと思うのですが、DB2にアクセスするツールで同じSQL文を動かすと動きます。EXCELでSQLを組むときに注意すべき何かがあるのでしょうか。教えて頂けると助かります。よろしくお願いいたします。共感した0###> (SELECT .....MAX(D) FROM (SELECT .... FROM HOGE LEFT OUTER JOIN ...) GROUP BY)UNION(SELECT .....MAX(D) FROM (SELECT .... FROM HOGE2 LEFT OUTER JOIN ...) GROUP BY)実行しようしているのがこの通りならSQLの構文エラーですよね。カッコではじまっている。> DB2にアクセスするツールで> 同じSQL文を動かすと動きます。ADOのプロバイダはMSDASQLでしょうか?もしそうでACCESSが使える環境ならODBC経由でパススルークエリを試すというのはありますが。ナイス0
###ご返事ありがとうございます!SQL構文はこんな感じです。データベースはDB2ですが、Excelでなく別にあるツールならカッコで始まるこの構文で動きました。ドライバーも同じものを経由してます。ADOのプロバイダ・・あまり意味がわかってません。ごめんなさい。VBEの参照設定からmicrosoft dataなんとか2.8をオンにしてやってます。
###この質問は投票によってベストアンサーに選ばれました!###>「オブジェクトが閉じている場合は、操作は許可されません」と>表示されます。>>これはSQLが間違っているのだと認識しています。SQLの間違いではなく、データベースへ接続されてないのだと思います。ちゃんと接続しているか確認してください。ナイス0
###ここでは「恐らく255文字」http://henahena.hateblo.jp/entry/2013/01/30/205921ここでは「512文字まで(多分)」https://qiita.com/acknpop/items/cd4a6fe32bf6af409aa3と書かれている・・・。何れにしろ長いSQLは書けない模様。ナイス0
###>sSQL = sSQL & "SQL文"このときに、間のスペースを入れ忘れていませんか?sSQL = sSQL & " SQL文"UNION は、同じ値の行を削除するときに使います。通常は UNION ALL を使います。ナイス0

 

TAG