Erro ao usar o filter do TFDQuery
estou criando uma tela de pesquisa, mas quando eu uso o filter do componente ele me retorna o seguinte erro.
[FireDAC][Stan][Eval]-118. Error evaluating expression. Could not convert variant of type (UnicodeString) into type (Double).
Abaixo o comando.
Quando eu não coloco a parte do campo ativo, o filter funciona corretamente.
Lembrando que eu estou fazendo um tela de pesquisa. aonde eu possa chamar ela por uma function.
Segue o select que eu estou passando para o componente TFDQuery
[FireDAC][Stan][Eval]-118. Error evaluating expression. Could not convert variant of type (UnicodeString) into type (Double).
Abaixo o comando.
with qryPesq do begin Filtered := False; Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%')); if cbxAtivo.ItemIndex < 2 then Filter := Filter + ' and ' + sCampo_Ativo + ' = ' + IntToStr(cbxAtivo.ItemIndex); Filtered := True; end;
Quando eu não coloco a parte do campo ativo, o filter funciona corretamente.
Lembrando que eu estou fazendo um tela de pesquisa. aonde eu possa chamar ela por uma function.
Segue o select que eu estou passando para o componente TFDQuery
SELECT PAR_ID, PAR_DESCRICAO, case PAR_ATIVO when 0 then 'Não' when 1 then 'Sim' end as Ativo FROM participantes
André Franzoi
Curtidas 0
Melhor post
Marcos Junior
28/06/2020
Boa noite...
Chefe faz o seguinte .:
if cbxAtivo.ItemIndex < 2 then
Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%')) + ' and ' + sCampo_Ativo + ' = ' + IntToStr(cbxAtivo.ItemIndex)
else
Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%'));
Chefe faz o seguinte .:
if cbxAtivo.ItemIndex < 2 then
Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%')) + ' and ' + sCampo_Ativo + ' = ' + IntToStr(cbxAtivo.ItemIndex)
else
Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%'));
GOSTEI 1
Mais Respostas
André Franzoi
28/06/2020
Boa noite...
Chefe faz o seguinte .:
if cbxAtivo.ItemIndex < 2 then
Filter := ''Upper(''+sCampo_Pesquisa+'') Like '' + UpperCase(QuotedStr(''%'' + edtPesquisa.Text + ''%'')) + '' and '' + sCampo_Ativo + '' = '' + IntToStr(cbxAtivo.ItemIndex)
else
Filter := ''Upper(''+sCampo_Pesquisa+'') Like '' + UpperCase(QuotedStr(''%'' + edtPesquisa.Text + ''%''));
Chefe faz o seguinte .:
if cbxAtivo.ItemIndex < 2 then
Filter := ''Upper(''+sCampo_Pesquisa+'') Like '' + UpperCase(QuotedStr(''%'' + edtPesquisa.Text + ''%'')) + '' and '' + sCampo_Ativo + '' = '' + IntToStr(cbxAtivo.ItemIndex)
else
Filter := ''Upper(''+sCampo_Pesquisa+'') Like '' + UpperCase(QuotedStr(''%'' + edtPesquisa.Text + ''%''));
Boa noite amigo.
Continuou com o mesmo erro.
Eu tenho o mesmo código só que com o componnete zeus e não tenho essa dor de cabeça.
Obrigado.
GOSTEI 0
Emerson Nascimento
28/06/2020
tente algo assim:
usei a função cast() para transformar o conteúdo do campo "sCampo_Ativo" em numérico (float), para comparar com o valor de cbxAtivo.ItemIndex, que também é um número.
não vi no teu post indicação de qual banco de dados você utiliza, então adeque o comando à sintaxe correta do teu banco.
tornei a transformação de tipos explícita porque muitas vezes o driver não consegue optar pelos tipos certos.
with qryPesq do begin Filtered := False; Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%')); if cbxAtivo.ItemIndex < 2 then Filter := Filter + ' and cast(' + sCampo_Ativo + ' as float) = ' + IntToStr(cbxAtivo.ItemIndex); Filtered := True; end;
usei a função cast() para transformar o conteúdo do campo "sCampo_Ativo" em numérico (float), para comparar com o valor de cbxAtivo.ItemIndex, que também é um número.
não vi no teu post indicação de qual banco de dados você utiliza, então adeque o comando à sintaxe correta do teu banco.
tornei a transformação de tipos explícita porque muitas vezes o driver não consegue optar pelos tipos certos.
GOSTEI 0
André Franzoi
28/06/2020
tente algo assim:
usei a função cast() para transformar o conteúdo do campo "sCampo_Ativo" em numérico (float), para comparar com o valor de cbxAtivo.ItemIndex, que também é um número.
não vi no teu post indicação de qual banco de dados você utiliza, então adeque o comando à sintaxe correta do teu banco.
tornei a transformação de tipos explícita porque muitas vezes o driver não consegue optar pelos tipos certos.
with qryPesq do begin Filtered := False; Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%')); if cbxAtivo.ItemIndex < 2 then Filter := Filter + ' and cast(' + sCampo_Ativo + ' as float) = ' + IntToStr(cbxAtivo.ItemIndex); Filtered := True; end;
usei a função cast() para transformar o conteúdo do campo "sCampo_Ativo" em numérico (float), para comparar com o valor de cbxAtivo.ItemIndex, que também é um número.
não vi no teu post indicação de qual banco de dados você utiliza, então adeque o comando à sintaxe correta do teu banco.
tornei a transformação de tipos explícita porque muitas vezes o driver não consegue optar pelos tipos certos.
Desculpa faltou mesmo citar o banco, estou utilizando o sqlserver
GOSTEI 0
André Franzoi
28/06/2020
tente algo assim:
usei a função cast() para transformar o conteúdo do campo "sCampo_Ativo" em numérico (float), para comparar com o valor de cbxAtivo.ItemIndex, que também é um número.
não vi no teu post indicação de qual banco de dados você utiliza, então adeque o comando à sintaxe correta do teu banco.
tornei a transformação de tipos explícita porque muitas vezes o driver não consegue optar pelos tipos certos.
with qryPesq do begin Filtered := False; Filter := 'Upper('+sCampo_Pesquisa+') Like ' + UpperCase(QuotedStr('%' + edtPesquisa.Text + '%')); if cbxAtivo.ItemIndex < 2 then Filter := Filter + ' and cast(' + sCampo_Ativo + ' as float) = ' + IntToStr(cbxAtivo.ItemIndex); Filtered := True; end;
usei a função cast() para transformar o conteúdo do campo "sCampo_Ativo" em numérico (float), para comparar com o valor de cbxAtivo.ItemIndex, que também é um número.
não vi no teu post indicação de qual banco de dados você utiliza, então adeque o comando à sintaxe correta do teu banco.
tornei a transformação de tipos explícita porque muitas vezes o driver não consegue optar pelos tipos certos.
Bom dia, Agora está com o seguinte retorno.
[FireDAC][Stan][Eval]-100. Column or function [cast] is not found. Hint: if the name is a function name, then add FireDAC.Stan.ExprFuncs to uses clause
GOSTEI 0