質問

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

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

パラメーター自体に % 記号を追加しようとしましたが、それも機能しないようです。

誰かこれに対する解決策を知っていますか?

編集1: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 が含まれるすべての犬を返したいと考えています。

役に立ちましたか?

解決

なぜあなたはパラメータに代入している値にワイルドカードを追加しないのですか?

だから、これは意味し、あなたのクエリは、

のようになります。
SELECT * FROM dog WHERE dog.name LIKE ?

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

私はまた、あなたの例の一つに、パラメータの前後に引用符を入れていることがわかります。その後、パラメータはもう、パラメータとして認識されませんので、これは良いアイデアのような音はありません。その時点で、それは単なる文字列です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top