Fórum IBQuery + ParamByName Não Exibe Dados no DBGrid #447202
29/06/2013
0
Pesquisei muito antes de postar aqui, mas não teve jeito, então lá vai:
Estou tentando passar um parâmetro utilizando o IBQuery para que no DBGrid só sejam exibidos os dados cujo campo CODLOGIN for igual a "joao", mas quando executo o programa o DBGrid vem vazio. Se eu tirar o parâmetro o DBGrid vem todo preenchido, mas preciso que exiba apenas onde o CODLOGIN for "joao".
No Edit SQL do IBQuery configurei o código assim:
select * from CLIENTES where codlogin=:pcodlogin
E no FormShow do Form coloquei:
DataModule1.IBQuery1.Close;
DataModule1.IBQuery1.ParamByName('pcodlogin').Value:='joao';
DataModule1.IBQuery1.Open;
Por favor, alguém me diz o que estou fazendo de errado? Já tentei modificar várias coisas, mas o problema persiste.
Obrigado!!!
Ricardo
Curtir tópico
+ 0Posts
29/06/2013
Joel Rodrigues
Gostei + 0
29/06/2013
Ricardo
Verifiquei sim e retorna, o problema é que há algo errado com o que estou fazendo.
Meu código está correto? Não sei mais o que pode estar acontecendo.
Gostei + 0
29/06/2013
Joel Rodrigues
Gostei + 0
29/06/2013
Ricardo
Tentei já, mas dá no mesmo.
Gostei + 0
30/06/2013
Landerson Santos
Tente passar o parâmetro usando a função QUOTEDSTR(), assim o "joao" será incluido entre aspas simples, já que o banco está como string isso é necessário para achar o valor.
Outro ponto que sugiro é é que force para que os dois lados sejam verificados em maiusculo por exemplo.
Aplique UpperCase na coluna codlogin do banco de dados e aplique tambem a seu parametro.
Amigão acho que é isso... passando com o QuotedStr já vai resolver seu caso.
Até.
Gostei + 0
30/06/2013
Ricardo
Tente passar o parâmetro usando a função QUOTEDSTR(), assim o "joao" será incluido entre aspas simples, já que o banco está como string isso é necessário para achar o valor.
Outro ponto que sugiro é é que force para que os dois lados sejam verificados em maiusculo por exemplo.
Aplique UpperCase na coluna codlogin do banco de dados e aplique tambem a seu parametro.
Amigão acho que é isso... passando com o QuotedStr já vai resolver seu caso.
Até.
Não entendi muito bem, não.
Como ficaria isso, assim?
DataModule1.IBQuery1.ParamByName('plogin').AsString:=QUOTEDSTR('joao');
Gostei + 0
30/06/2013
Joel Rodrigues
Gostei + 0
30/06/2013
Ricardo
Deu certo não =(
Gostei + 0
01/07/2013
Landerson Santos
Note que você com a evolução dos seus posts trocou o nome do parametro... vamos fazer passo a passo.
DataModule1.IBQuery1.Close;
DataModule1.IBQuery1.ParamByName('pcodlogin').Value:='joao';
DataModule1.IBQuery1.Open;
Apenas para não termos o problema com relação ao nome do parametro mudaremos essa linha
DataModule1.IBQuery1.ParamByName('pcodlogin').Value:='joao';
Para
DataModule1.IBQuery1.Params[0].asString := QuotedStr('joao');
Vc está usando ClientDataSet na sua aplicação???
Caso sim... o parametro vc deve passar no clientdataset após aplicar o Fecth dele.
Gostei + 0
01/07/2013
Ricardo
É verdade! Mas aqui está correto, até porque se o parâmetro estiver errado dá um erro na hora de executar dizendo que o parâmetro não existe.
Apenas para não termos o problema com relação ao nome do parametro mudaremos essa linha
DataModule1.IBQuery1.ParamByName('pcodlogin').Value:='joao';
Para
DataModule1.IBQuery1.Params[0].asString := QuotedStr('joao');
Testei aqui, mas como diria o Mussun "deu erradis"!
Vc está usando ClientDataSet na sua aplicação???
Não, eu uso IBDataBase, IBTransaction, IBQuery, IBUpdateSQL e DataSource.
O curioso é que se eu tirar o parâmetro ele exibe todos os dados no DBGrid. E se eu colocar o parâmetro, ele não exibe nenhum, mas funciona para inserir novos dados. E ele fica exibindo os novos dados que inseri enquanto não fechar o Delphi. Depois que executo novamente, passando parâmetro, os novos dados que havia inserido também somem. Eles são inseridos no banco, mas o DBGrid não exibe por causa do bendito parâmetro.
Gostei + 0
02/07/2013
Landerson Santos
Os dados estão gravados no banco, ou seja, se vc verificar no banco esses dados estão lá???
Que banco vc está usando?
Tem skype?
Gostei + 0
02/07/2013
Ricardo
Os dados estão gravados no banco, ou seja, se vc verificar no banco esses dados estão lá???
Que banco vc está usando?
Tem skype?
Mas o problema é no Delphi mesmo.
Quando eu consulta colocando "where codlogin = 'joao'" ele me retorna os dados. E no próprio programa eu uso outro IBQuery para passar um parâmetro a uma consulta e obter o resultado.
Vou ter que pensar numa forma de filtrar os dados que são exibidos no DBGrid.
Gostei + 0
02/07/2013
Joel Rodrigues
Gostei + 0
05/07/2013
Ricardo
Bom, realmente o sinal de = tem que colocar separado do parâmetro. Muito obrigado!
Mas ainda não está exibindo o resultado. Mas pelo menos fiz uns testes para tentar descobrir o porque.
Se eu configurar diretamente no IBQuery1 assim:
select * from CLIENTES where codlogin = 'joao'
O programa retorna os registros onde codlogin é = a 'joao' no DBGrid certinho! Mas se eu tento passar um parâmetro, ele já não retorna nada!
Então na verdade ele não está aceitando a passagem de parâmetro. É como se ele só aceitasse o que já está configurado no IBQuery no momento em que inicio o programa.
Gostei + 0
05/07/2013
Landerson Santos
Tente atribuir num button ou no duplo click do dbgird para ver se persiste o problema.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)