Ajuda - Busca - Membros - Calendário
Versão Completa: [resolvido] Edatabaseerro
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Samuelsjn
Ola pessoal,

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?

Desde já o meu muito obrigado.

Abraço
Jhonas
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.
Micheus
QUOTE(Samuelsjn @ 03/09/2007 - 10:33) *
(...), 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?

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.

como deveria ficar:
DataModule1.Query.Close;
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.

Abraços
Samuelsjn
Pessoal muito obrigado,
Agora deu certo.

Abraço
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.