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