パラメータクエリでLIKE演算子を使用するには?

解決


駄菓子  2006-08-01 23:47:23  No: 132532

こんにちわ、お世話になります。

VB6ですが、パラメータークエリの条件部を簡単に抜き出します。

strSQL = strSQL & "name = ? "
Set objPrm = adoCommand.CreateParameter("name", adBSTR, _
adParamInput, , name.Text)

これをLIKE演算子を使用して「あいまい検索」をしたいのですが、どうもうまくいきません。どなたかお力をお貸し下さいませ。よろしくお願いします。


うなまな  2006-08-02 16:25:45  No: 132533

”どうもうまくいきません”とは、どのようにうまくいきませんか?


駄菓子  2006-08-02 19:22:34  No: 132534

説明不足で申し訳ありません。詳細を。

    Dim mrecTab        As ADODB.Recordset
    Dim objPrm         As ADODB.Parameter
    Dim strSQL         As String
    Dim lngCountRecord As Long
    
    '参照
    Set adoCommand = New ADODB.Command
    adoCommand.ActiveConnection = adoConnect
    
    'SQL
    strSQL = ""
    strSQL = strSQL & "select "
    strSQL = strSQL & "name "
    strSQL = strSQL & "from "
    strSQL = strSQL & "mst "
    strSQL = strSQL & "where "
    strSQL = strSQL & "name LIKE ? "

    'パラメータクエリ
    Set objPrm = adoCommand.CreateParameter("name", adBSTR, _
    adParamInput, , imtname.Text & "%")
    adoCommand.Parameters.Append objPrm

    'SQL実行
    adoCommand.CommandType = adCmdText
    adoCommand.CommandText = strSQL
    Set mrecTab = adoCommand.Execute()
      
    '解放
    Set adoCommand = Nothing
    Set adoCommand.ActiveConnection = Nothing

LIKEではなく=で条件を指定すると通るので
問題はLIKEと%の使い方だと思うのですが…どうでしょうか?
よろしくおねがいします。


うなまな  URL  2006-08-02 20:07:10  No: 132535

Set objPrm = adoCommand.CreateParameter("name", adBSTR, adParamInput, , imtname.Text & "%")

Set objPrm = adoCommand.CreateParameter("name", adVarChar, adParamInput, 100, imtname.Text & "%")
では?


駄菓子  2006-08-02 20:53:05  No: 132536

うなまな様、ご回答ありがとうございます。

DataTypeEnumの型は可能性があるものは全て試してみましたが、出来ませんでした。
サイズは省略可能なので無くても良いとは思うんですが、一応付けてみます。

やはり、%の置き方に問題があるのでしょうか…


特攻隊長まるるう  2006-08-02 21:24:10  No: 132537

SQLサーバー2000にて
  Set objPrm = adoCommand.CreateParameter("name", adVarChar, adParamInput, 100, "Test%")
みたいな設定で動作確認取れました。

結局どううまくいかないのか書かれていません。
うなまなさんが聞かれたのはエラーが出るならエラーメッセージを、
データが表示できないなら、実際のデータとLIKEに指定している
文字も具体的に示すなどしないと分からないからです。

Access とかだと "%" じゃなくて "*" とかだった気がしますが、
データベースの種類も書かれていませんよね?


駄菓子  2006-08-02 22:40:22  No: 132538

度々の説明不足、本当に申し訳ありません。

環境は、VB6(SP6)、PostgreSQL8.1です。

Set objPrm = New ADODB.Parameter
Set objPrm = adoCommand.CreateParameter("nm", adBSTR, adParamInput)
adoCommand.Parameters.Append objPrm
adoCommand.Parameters("nm") = "'" & imtname.Text & "%'"

にしたところ、出来ました。

うなまな様、まるるう様、ご回答ご指摘ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加