[resolvido] Edatabaseerro - Delphi, Kylix - Fórum Script Brasil
[resolvido] Edatabaseerro
Asked by Samuelsjn,
Samuelsjn
Estou desenvolvendo um sisteminha utilizando delphi 7 + postgres.
Utilizei o componente ADOConnection para fazer a conexão com o driver ODBC do postgres.
A conexão esta legal, eu estou conseguindo ver todas as minhas tabelas no componente ADOTable, mas quando eu utilizo o componente ADOQuery, para inserir um valor na tabela, ele esta me trazendo uma exeção:
EDatabaseErro whith message 'Query: Parameter 'nome' not found', Process stopped.
Esse erro esta falando que não esta encontrando o atributo nome da minha tabela. Como posso resolver esse problema?
escrevi um codigo simples só para cadastrar o nome.
DataModule1.Query.Close;
DataModule1.Query.SQL.Add('select * from fornecedores');
DataModule1.Query.Parameters.ParamByName('cidade').Value := edtNome.Text;
DataModule1.Query.ExecSQL;
Ele da o erro exatamente quando mando abrir a conexão (ExecSQL). alguém pode me ajudar?
EDatabaseErro whith mensagem ' Query: Parâmetro ' nome' não encontrado', Processo parou.
aparentemente pareçe que voce definiu um parametro chamado 'nome' mas ao abrir a query este paramentro não esta aparecendo, como se voce tivesse definido assim = :nome ou Parameters.ParamByName('nome').Value ... da uma verificada na propriedade Params da query.
(...), ele esta me trazendo uma exeção:
Samuelsjn, Temos alguns problemas aqui. Vejamos:
1) A mensagem reclama da inexistência de um parâmetro chamado "nome". Porém, vê-se que você tenta passar um parâmetro chamado "cidade" (ver em ParamByName);
2) Usando um parâmetro "nome" ou "cidade", um deles deveria estar declarado na cláusula "where", a qual não foi utilizada em sua consulta;
3) Uma instrução do tipo SELECT é executada em um componente query através do método "Open". Utiliza-se "ExecSQL", para comandos SQL que não retornem linhas (resultado da consulta), ou seja, UPDATE, DELETE, CREATE, DROP, ... ;
4) Como esta instrução SQL é adicionada a propriedade SQL da query em tempo de execução, você não pode deixar de limpá-la antes de fazer a nova atribuição. Resumindo, antes de chamar o método SQL.Add(..) você deve chamar SQL.Clear.
DataModule1.Query.SQL.Clear;
DataModule1.Query.SQL.Add('select * from fornecedores where cidade = :cidade');
DataModule1.Query.Parameters.ParamByName('cidade').AsString := edtNome.Text;
DataModule1.Query.Open;
Observe que na cláusula "where", testar com "=" significa que deverá haver na tabela uma cidade "escrita" exatamente como o parâmetro informado.
Pode haver necessidade de converter para upcase os valores a serem testados ou, se for uma pesquisa parcial, ser utilizado o LIKE.