none
DAOで実行していた複雑なクエリが実行できない RRS feed

  • 質問

  • ADO.NETに移行して、以前にDAOで実行していた集計関数を使用した複雑なクエリが実行できません。
    以前実行していたクエリはいろんなテーブルにリンクしてstrSQL="SELECT ・・・・・INTO 新TABLE FROM TABLE1 INNER JOIN ・・・・・INNER JOIN ・・・・・INNER JOIN ・・・・・INNER JOIN ・・・・・INNER JOIN ・・・・・INNER JOIN ・・・・・・・・・・・・・・・・・・・・・・
    WHERE・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ GROUP BY・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ORDER BY・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・"
    のようなクエリですが ACCESSのSQLデザインシートに貼り付けて実行すると”新TABLE”が作成されるのですが、ADO.NETのOleDbCommandのExecuteNonQueryを使用して
                    cn.Open()
                    com = New OleDb.OleDbCommand(strSQL, cn)
                    com.ExecuteNonQuery()
                    cn.Close()
    を実行すると”新TABLE”が育成されません。
    このSELECT INTO文を単純なものに変更するとにすると”新TABLE”が育成されるのですが、目的のものでは有りませんので
    この複雑なクエリを実行するにはADO.NETではどうしたら良いんでしょうか?

    VB2005
    2009年6月8日 17:20

回答

  •  解決しました。

    間違いはSQL文のWHERE句にありました。LIKE演算子のワイルドカード「*」を「%」にすると解決でした。
    以前に使用して判っていたのですが忘れていました。DAOとADO.NETのワイルドカードの違いを・・・・・。
    ACCESSで実行できるのに.NETはスムーズには行かない、けしからんと思っていました。


     佐祐理さまtrapemiyaさま、ありがとうございました。お騒がせして申し訳ありません。


    VB2005
    2009年6月9日 8:03

すべての返信

  • 少なくともSQL文は半角文字でなければなりません。あとは・・・で省略されている部分に問題があるのだと思います。エラーなどは発生していないのですか?
    2009年6月8日 22:38
  • 少なくともSQL文は半角文字でなければなりません。あとは・・・で省略されている部分に問題があるのだと思います。エラーなどは発生していないのですか?

    おはようございます。ご回答ありがとうございます。

     質問文ではSQLは全角、半角ごちゃ混ぜでかいていますが、実際のSQL文はコマンド文字は半角で、テーブル名、フィールド名は全角文字が混ざっています。connectStringには間違いないと思います。

     上記質問文には複雑なクエリが実行できませんと書いてしまいましたが、
     このSQL文をADO.NETで上記のコードを実行すると指定したフィールドが作られたレコード数0の空の”新TABLE”が作成されます。
    そのときにはエラーは発生していません。内容が無いのです。申し訳ありません。

     このSQL文は以前DAOのデータベースエンジンでDBS.Excute(strSQL)として正常に実行していたものをコピーしたものです。
    そしてこれをACCESSのSQLデザインシートに貼り付けて実行するとレコード内容のある”新TABLE”が正しく作成されますので、SQL文には間違いないと思います。 

     このSQL文を実行すると”新TABLE”が作成されますのでその前に”新TABLE”をDROP TABLE文で削除してからこのSQL文を実行しています。

     


    VB2005
    2009年6月9日 2:13
  • とりあえずその抽出条件でうまくレコードが抽出できるのか確認されてみてはいかがでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年6月9日 3:22
    モデレータ
  • とりあえずその抽出条件でうまくレコードが抽出できるのか確認されてみてはいかがでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    これから、SQL文に問題があるようなので分解して条件を変更して検修してみます。
    結果は後ほど。


    VB2005
    2009年6月9日 7:01
  •  解決しました。

    間違いはSQL文のWHERE句にありました。LIKE演算子のワイルドカード「*」を「%」にすると解決でした。
    以前に使用して判っていたのですが忘れていました。DAOとADO.NETのワイルドカードの違いを・・・・・。
    ACCESSで実行できるのに.NETはスムーズには行かない、けしからんと思っていました。


     佐祐理さまtrapemiyaさま、ありがとうございました。お騒がせして申し訳ありません。


    VB2005
    2009年6月9日 8:03