はじめまして。
VB6で、DBに接続する際のSQLで悩んでいます。
ACCESSで、SQLを作成したのですが、それをVB6(ADODB)で
利用するとエラーとなります。以下のSQLは、VBで使用する
ことは出来るのでしょうか?また、別の方法で可能でしょうか?
(VBでmid等使用できるのでしょうか?)
・SQL(ACCESS)
SELECT [フィールド名] FROM [テーブル名]
WHERE (left([フィールド名],(instr([フィールド名],"-"))))<"130"
And (mid([フィールド名],instr(1,[フィールド名],"-")+1)>="130")
フィールドのデータ
110
105
102-110
110-130
120-140
110-200
初心者なので、どのように説明していいのかわからず
質問内容がわかりづらいかも・・・申し訳ないです。
よろしくお願いします。
エラーってどんなエラーが出るんでしょうか?
ダブルクォーテーションをシングルクォーテーションに変えてもエラーが出ますか?
nanashiさま
ご返答ありがとうございます。
実際に試したSQLですが、where以下をこのように書いてみました。
txt2に任意の数値を入力し、txt2が範囲内にあるかを判断するものです。
(Left(fieldname, (InStrfieldname, '-')))) < " & txt2 & " And (Mid(fieldname, InStr(1,fieldname, '-') + 1) >= " & txt2 & ")"
以上、よろしくお願いします。
上記のSQLに間違いがありました。
正しくは
(Left(fieldname, (InStr(fieldname, '-')))) < " & txt2 & " And (Mid(fieldname, InStr(1,fieldname, '-') + 1) >= " & txt2 & ")"
よろしくお願いします。
もう一度質問します。
エラーってどんなエラーが出るんでしょうか?
また下記のように直した場合はどうですか?
"(Left(fieldname, (InStr(fieldname, '-'))) < '" & txt2 & "') And (Mid(fieldname, InStr(1,fieldname, '-') + 1) >= '" & txt2 & "')"
nanashiさま
ご返答ありがとうございます。
エラーの件ですが、私の認識が間違っていました。
申し訳ありません。正しくは、VB実行時に応答なし
になります。
また、ご享受していただいた文で実行したところ
応答なしにならなかったものの、抽出結果が
違っていました。これは、Mid,Left,InStrなどの
関数が使用できないということでしょうか?
お手数をおかけしますが、よろしくお願いします。
> VB実行時に応答なしになります。
私の環境でテストしてみましたが応答なしにはなりません。
ブレークポイントを置いてデバッグしてみて下さい。
SQL文に問題があればOpen時にエラーが起きます。
どこか別の個所で無限ループになってたりしませんか?
> 抽出結果が違っていました。
全く同じSQL文を投げて、VB上とACCESS上で得られる値が違うというのはありえないと思います。
違っていたというのは期待と違っていたということでしょうか?
であるならSQL文での条件の書き方に問題があるかと思います。
またOpen時のSQL文があってるかどうか、キチンと確認してみてください。
> これは、Mid,Left,InStrなどの関数が使用できないということでしょうか?
DBがACCESSなら、VBからSQLを投げてもMid, Left, InStr は正常に作動します。
ちなみにmkkさんがwhere文内で書いてる条件なんですが、たぶんまともに動かないと思います。
nanashiさま、ご返答ありがとうございます。
>私の環境でテストしてみましたが応答なしにはなりません。
>ブレークポイントを置いてデバッグしてみて下さい。
>SQL文に問題があればOpen時にエラーが起きます。
>どこか別の個所で無限ループになってたりしませんか?
これは、シングルクォーテーションを追加したことにより
解決できました。
>DBがACCESSなら、VBからSQLを投げてもMid, Left, InStr は正常に作動します。
DBはACCESSなので、動作には問題ないということですね。
>ちなみにmkkさんがwhere文内で書いてる条件なんですが、たぶんまともに動かないと思います。
確かに思い通りの抽出結果が得られません。後半のMidのみですと、ほぼ
期待通りの結果が得られるので、前半のLeftの条件が問題ありだと
思っているのですが・・・ いろいろ試してはみるものの、いい案が
浮かびません。
ハイフンありの条件とハイフン無しの条件を分けた方が良いです。
iifを使って二つの条件を書いてみて下さい。
現象が確認できる最小限のコードを提示したほうがよいでしょう。
単純なSQL文の問題では無い可能性もあります。
#例)MoveNext入れ忘れて永久ループ等