Frage

Ich habe eine Pervasive-Datenbank, die ich mit C ++ verbinden. Alle meine Fragen so weit ist parametriert, das heißt "SELECT USER.NAME FROM USER WHERE USER.ID = ?", und das funktioniert gut. Aber in einer Suchabfrage ich LIKE in der WHERE-Klausel, und dann scheint es, ich nicht Parameter verwenden kann und wilde Zeichen (%).

Meine Abfrage sieht so etwas wie diese "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'" und da gibt es zwei 'ist um die Parameter? -Marke, dies nicht gelingt, ist es für Hunde mit einem gesucht? -Marke in ihrem Namen. In SQL Server würde dies wahrscheinlich durch Verknüpfung der Zeichenfolge wie "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'" gelöst werden, aber dies ist ein ungültige Syntax in Pervasive (siehe unten auf dieser Seite: http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html ).

Ich habe auch versuchte das% -Zeichen auf den Parameter selbst hinzuzufügen, aber das scheint nicht zu funktionieren.

Kennt jemand eine Lösung für dieses?

EDIT1: Einige C ++ Code-Beispiel:

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 ist ein _CommandPtr und m_pAdoRecordset ist ein _RecordsetPtr. Ich habe den Namen der SQL-Tabellen in diesem Beispiel so geändert, dass sie sens hier machen.)

Der obige Code wird eine Zeile mit einem Hund zurück, die den Namen '%bob%' hat, aber ich würde es gerne alle Hunde zurückzuversetzen bob in ihrem Namen hat.

War es hilfreich?

Lösung

Warum Sie keine Wildcard auf den Wert hinzufügen, die Sie mit dem Parameter sind zuweisen?

Also, das bedeutet, Ihre Abfrage sieht aus wie

SELECT * FROM dog WHERE dog.name LIKE ?

Und dann ordnen Sie den Wert ‚% bob%‘ auf diesen Parameter, zum Beispiel. Ich sehe, Sie sagen, dass Sie dies auch versucht haben, aber es funktioniert nicht, was sehr merkwürdig ist. Können Sie den Code zeigen, was du dann getan hast?

Ich sehe auch, dass Sie Anführungszeichen um den Parameter in einem Ihrer Beispiele setzen. Das klingt nicht wie eine gute Idee, da dann der Parameter nicht mehr als Parameter erkannt werden. An diesem Punkt ist es nur eine Zeichenfolge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top