4

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)。

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

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

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が含まれているすべての犬を返すようにしたいと思います。

4

1 に答える 1

6

パラメータに割り当てる値にワイルドカードを追加してみませんか?

つまり、クエリは次のようになります

SELECT * FROM dog WHERE dog.name LIKE ?

次に、たとえば、このパラメータに値'%bob%'を割り当てます。あなたもこれを試したとおっしゃっていますが、うまくいきません。これは非常に奇妙なことです。その時あなたがしたことのコードを見せてもらえますか?

また、例の1つで、パラメーターを引用符で囲んでいることもわかります。これは良い考えとは思えません。それ以降、パラメータはパラメータとして認識されなくなります。その時点では、それは単なる文字列です。

于 2009-07-10T07:06:02.547 に答える