Pergunta

Eu tenho um banco de dados Pervasive que eu conectar usando C ++. Todas as minhas dúvidas até agora é parametrizado, ou seja "SELECT USER.NAME FROM USER WHERE USER.ID = ?", e que funciona bem. Mas em uma consulta de pesquisa eu uso COMO na cláusula WHERE, e então parece que não posso usar parâmetros e caracteres selvagens (%).

A minha consulta é algo como isto "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'" e desde há dois 'ao redor do parâmetro? -Mark, isso falhar, ele procurou para cães com um? -Mark em seu nome. Em SQL Server este provavelmente seria resolvido concatenando o string como "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'", mas esta é a sintaxe inválida no Pervasive (ver fim da página: http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html ).

Eu também tentei adicionar o% -signs ao próprio parâmetro, mas isso não parece que quer trabalhar.

Alguém sabe uma solução para isso?

EDIT1: Alguns exemplos de código 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 é um _CommandPtr e m_pAdoRecordset é um _RecordsetPtr. Eu mudei o nome das tabelas SQL neste exemplo para que eles fazem sens aqui.)

O código acima irá retornar uma linha com um cão que tem o nome '%bob%', mas eu gostaria que retornar todos os cães que têm bob em seu nome.

Foi útil?

Solução

Por que você não adicionar um curinga para o valor que você está atribuindo ao parâmetro?

Então, isso significa, a sua aparência consulta como

SELECT * FROM dog WHERE dog.name LIKE ?

E, em seguida, você atribuir o valor '% Bob%' para este parâmetro, por exemplo. Vejo você diz que já tentou isso também, mas ele não funciona, o que é muito estranho. você pode mostrar o código de que você fez então?

Eu também ver que você colocar aspas em torno do parâmetro em um de seus exemplos. Isso não soa como uma boa idéia, desde então, o parâmetro não será reconhecido como um parâmetro mais. Nesse ponto, é apenas uma string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top