SQL文で抽出条件を記述して、DataGridに表示できません。
DBはAccessです。
mySQL2 = "select SYA.社員番号,SYA.名前,・・(省略)・・where・・ " _
& "and SYA.社員番号 = ""1000"""
上記の条件では、うまく表示できましたが、下記の条件ではうまくいきません。
mySQL2 = "select SYA.社員番号,SYA.名前,・・(省略)・・where・・ " _
& "and SYA.社員番号 like ""*" & syain.text & "*"""
Accessの選択クエリを使って試してみると、ちゃんとデータの抽出とテーブルの
表示はできてます。
原因がさっぱり分かりません。
誰かアドバイス下さい。お願いします。
LIKEの使い方に誤りがありますが・・・
通常、『*』ではなく、『%』ですが・・・
DAOをお使いですよネ?
ADOでも同じですが、『%』でLIKEの解釈を行いますので、修正して
試して下さい。
以上。
クエリーの条件文の文字列は
" ではさむのではなく 'ではさみます
途中が省略されていてわからない所も在りますが....
mySQL2 = "select SYA.社員番号,SYA.名前,・・(省略)・・where・・ " _
& " and SYA.社員番号 like '*'" & syain.text & "'*'"
こんな感じになります。
DataGrid、という事は ADO接続ですよね。
その場合、JETのANSI-92クエリモードが使用されますので、
Like演算子のワイルドカードは、"%", "_"になります。
つまり、"*" のかわりに "%" を使って、
mySQL2 = "SELECT SYA.社員番号, SYA.名前, …… " _
& " AND SYA.社員番号 LIKE '%" & Syain.Text & "%' "
という感じですね。
> Accessの選択クエリを使って試してみると、ちゃんとデータの抽出と
「Accessの選択クエリ」画面やDAOでは、ANSI-89クエリモードが
使用されますので、ワイルドカードは、"*", "?"となるのです。
ただしAccess2002では、オプション設定を変更する事によって、
クエリ画面でもANSI-92モードを利用できます。
# ANSI-89 SQLモードと ANSI-92 SQLモードの違いに付いては、
# Access 2000または2002のヘルプを参照して下さい。
もう一つ。Like未使用時には表示できているので、大丈夫だとは思いますが、
mdbファイルの内容をDataGridに表示させる時は、ADODB.Recordsetの
(あるいは、ADOデータコントロールの)CursorLocationプロパティを
adUseClientモードにしておいて下さい。そうしないと表示できません。
もしも adUseServerモードで接続したいのであれば、あらかじめ
IRowsetIdentityダイナミックプロパティをTrueにしておく必要があります。
http://support.microsoft.com/default.aspx?scid=kb;ja;224192
ねろさん:
> クエリーの条件文の文字列は
> " ではさむのではなく 'ではさみます
JETの場合は、「"」、「'」のどちらで挟んでも良かったりします。(^-^A
ちなみに、文字列を16進数表記で表す事もできたりします。
……まぁ、まず使う事が無い表現方法だとは思いますけれども。
SELECT * FROM [テーブル] WHERE [列] = 0x715C2C67
# Access 97/JET 3.5x以下の場合は、Shift_JISの16進数。
# Access 2000/JET 4.0以上の場合は、UTF-16BEの16進数。
魔界の仮面弁士さん
JETでは「"]と「']両方使えるんですね!
確かに手元にある"ACCESS"の本には「"」が使ってありました。
”使えるということと”、”私が知らなかったことと”
両方驚きました。
今後とも御教授よろしく。m__m
>JETでは「"]と「']両方使えるんですね!
出来れば、「'」で挟むようにする癖をつけておいた方がいいですよ。
今後はオラクル、SqlServerなどを使うようになる時に「"]で挟むと実行できない事が多いです。例えば、SQL*Plusなど・・・
ツイート | ![]() |