C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: sql構文における角括弧の認識に関して


(過去ログ 31 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■15200 / inTopicNo.1)  sql構文における角括弧の認識に関して
  
□投稿者/ ヒラ (1回)-(2008/03/06(Thu) 16:48:50)

分類:[VB.NET/VB2005] 

データベース内に角括弧"["を含む文字列が存在していまして、これを検索対象に含めたいのですが、どうもうまくいきません。
どなたかご教授願います。

言語はVB.netです。


Dim oConn As New ADODB.Connection
Dim oRec As New ADODB.Recordset
Dim Strsql As String
dim Database_Path as String

Database_Path=(データベースのパス)

Strsql = "select * from T_作業依頼データ where DNO = [400"
oConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Database_Path)
oRec.Open(Strsql, oConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockPessimistic)

Do Until oRec.EOF
Console.WriteLine(oRec("DNO").Value)
oRec.MoveNext
Loop
oRec.Close()
oRec = Nothing
oConn.Close()
oConn = Nothing

どうやら"["がよくないようなのですが、"["を文字として認識するにはどうしたらよいのでしょうか?


引用返信 編集キー/
■15201 / inTopicNo.2)  Re[1]: sql構文における角括弧の認識に関して
□投稿者/ 魔界の仮面弁士 (672回)-(2008/03/06(Thu) 17:04:46)
No15200 (ヒラ さん) に返信
> Strsql = "select * from T_作業依頼データ where DNO = [400"

DNO が文字列型であれば、その問い合わせは
 WHERE DNO = [400
ではなく、
 WHERE DNO = '[400'
のように、「'」で囲む必要があります。


…ちなみに、LIKE での問い合わせで [ を使う場合には、
[[] のように、両端を「[」と「]」で囲むことになります。
引用返信 編集キー/
■15202 / inTopicNo.3)  Re[1]: sql構文における角括弧の認識に関して
□投稿者/ はつね (495回)-(2008/03/06(Thu) 17:04:53)
はつね さんの Web サイト
No15200 (ヒラ さん) に返信
> 言語はVB.netです。

DBはmdbファイルですか?


> Strsql = "select * from T_作業依頼データ where DNO = [400"

DNO項目は文字列でしょうか?
だとしたら、そもそも論として'とか"で囲まないと。

"select * from T_作業依頼データ where DNO = '[400'"
とか
"select * from T_作業依頼データ where DNO = ""[400"""

※DAOが'と"のどちらを通すのか失念。どちらかは上手く行くでしょう。

引用返信 編集キー/
■15203 / inTopicNo.4)  Re[1]: sql構文における角括弧の認識に関して
□投稿者/ やじゅ (218回)-(2008/03/06(Thu) 17:08:16)
No15200 (ヒラ さん) に返信
> データベース内に角括弧"["を含む文字列が存在していまして、これを検索対象に含めたいのですが、どうもうまくいきません。
> どうやら"["がよくないようなのですが、"["を文字として認識するにはどうしたらよいのでしょうか?
>

「LIKE メタ文字 エスケープ」で検索する。
・同じ文字を続ける
・ESCAPEオプションを使用する
引用返信 編集キー/
■15204 / inTopicNo.5)  Re[2]: sql構文における角括弧の認識に関して
□投稿者/ 魔界の仮面弁士 (673回)-(2008/03/06(Thu) 17:51:14)
No15202 (はつね さん) に返信
> ※DAOが'と"のどちらを通すのか失念。どちらかは上手く行くでしょう。
多分ADO ですね。このコードを見る限りでは。

区切りは、「'」でも「"」でも OK のはずですが、VB の場合は
「'」を使った方が、sql 文字列を作りやすいかと思います。


No15203 (やじゅ さん) に返信
> 「LIKE メタ文字 エスケープ」で検索する。
> ・同じ文字を続ける
> ・ESCAPEオプションを使用する

JET は、ESCAPE オプションをサポートしていなかったかと…。
http://office.microsoft.com/ja-jp/access/HP010322531041.aspx
引用返信 編集キー/
■15207 / inTopicNo.6)  Re[3]: sql構文における角括弧の認識に関して
□投稿者/ やじゅ (219回)-(2008/03/06(Thu) 19:01:13)
No15204 (魔界の仮面弁士 さん) に返信
> JET は、ESCAPE オプションをサポートしていなかったかと…。

JETとか関係なしに、とりあえず列挙だけしてみたんですが・・・
あまりいい回答方法では無いですよね。

このレベルの質問なら、検索キーワードさえ分かれば、なんとか
なるかなーとか思ったりしてます。
引用返信 編集キー/
■15213 / inTopicNo.7)  Re[2]: sql構文における角括弧の認識に関して
□投稿者/ ヒラ (2回)-(2008/03/07(Fri) 07:29:24)
No15201 (魔界の仮面弁士 さん) に返信

まずはお詫びを・・・。

Strsql = "select * from T_作業依頼データ where DNO = [400"

ではなく

Strsql = "select * from T_作業依頼データ where DNO Like " & Chr(&H22) & "[400" & Chr(&H22)

でした。申し訳ありません。

で、これを

Strsql = "select * from T_作業依頼データ where DNO Like " & & Chr(&H22) & "[[]400" & Chr(&H22)

とすることで解決できました。
本当にありがとうございます。

> …ちなみに、LIKE での問い合わせで [ を使う場合には、
> [[] のように、両端を「[」と「]」で囲むことになります。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -