2009-07-10 12 views
4

C++を使用してPervasiveデータベースに接続しています。 これまでのすべてのクエリはパラメータ化されています。つまり、"SELECT USER.NAME FROM USER WHERE USER.ID = ?", などです。 しかし、検索クエリではWHERE句でLIKEを使用して、パラメータとワイルド文字(%)を使用できないようです。WHERE句でLIKEでパラメータ化されたSQLを使用する(Pervasive SQL)

私のクエリは"SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"のようになり、パラメータ「 - マーク」の周りに2つあるため、これは失敗し、名前に「?」マークが付いている犬を検索しました。 SQL Serverでは、これは恐らく"SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'"のような文字列を連結することによって解決されるでしょうが、これはPervasiveの無効な構文です(このページの下部を参照してください:http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html)。

また、パラメータ自体に%-signsを追加しようとしましたが、どちらも機能しないようです。

誰にも解決策がありますか?

EDIT1: いくつかのC++コード例:

CString sqlCommand = "SELECT * FROM DOG WHERE DOG.NAME LIKE ?;"; 
m_pAdoCommand->CommandText = _bstr_t(sqlCommand); 
m_pAdoCommand->Parameters->Append(m_pAdoCommand->CreateParameter("p0", adVarChar, adParamInput, 25, _bstr_t("'%bob%'"))); 
m_pAdoRecordset = m_pAdoCommand->Execute(NULL,NULL,adCmdText); 

m_pAdoCommand_CommandPtrで、m_pAdoRecordset_RecordsetPtrである彼らが作るように、私はこの例では、SQLテーブルの名前を変更しました。

上記のコードでは、名前が'%bob%'の犬の行が返されますが、名前にbobが含まれているすべての犬を返すようにしたいと思います。

答えて

6

パラメータに割り当てる値にワイルドカードを追加しないでください。

ので、これは意味し、あなたのクエリが

SELECT * FROM dog WHERE dog.name LIKE ? 

のように見えます。そして、あなたは、例えば、このパラメータに値「%ボブ%」を割り当てます。 あなたもこれを試したと言われていますが、うまくいきません。これは非常に奇妙です。あなたがしたことのコードを表示できますか?

また、パラメータの周りに引用符を置くこともできます。これは良いアイデアのようには聞こえません。なぜなら、パラメータはもうパラメータとして認識されないからです。その時点では、単なる文字列です。

+0

wildcharsをパラメータ自体に追加するときの問題は、文字列として扱われるため、 '%bob%'という文字列を渡すと、dog.nameが '%bob%'に等しい場合にのみ行が返されます。 。私は私の答えにいくつかのコード例を追加します。 – fredrik

+0

しかし、LIKE演算子を使用しますか? –

+0

はい、私は、申し訳ありませんが、例が更新されている(と確信してコードを再度テストしました) – fredrik

関連する問題