O que está errado nesta linha?

Delphi

13/09/2013

Olá pessoal...o quê está errado nesta linha:

sql.Add('UPDATE clientes SET Cod_Cliente=:A,Nome_Cliente=:B,CPF_CNPJ_Cliente=:C,Data_Cadastro_Cliente=:D,Logradouro_Cliente=:E,Num_Cliente=:F WHERE Cod_Cliente=1);
Fabricio Luciano

Fabricio Luciano

Curtidas 0

Respostas

Marcos Oliveira

Marcos Oliveira

13/09/2013

Fabrício, aparentemente não há nada de errado, com exceção que você abriu a sintaxe com apóstrofo e não fechou, mas creio que foi só um problema ao passar aqui pro fórum. Seria possível você nos passar o erro? Fica mais fácil encontrar o problema.

Att,

Marcos
GOSTEI 0
Deivison Melo

Deivison Melo

13/09/2013

sql.Add('UPDATE clientes SET Cod_Cliente=:A,Nome_Cliente=:B,CPF_CNPJ_Cliente=:C,Data_Cadastro_Cliente=:D,Logradouro_Cliente=:E,Num_Cliente=:F WHERE Cod_Cliente=1');

ao invés de

sql.Add('UPDATE clientes SET Cod_Cliente=:A,Nome_Cliente=:B,CPF_CNPJ_Cliente=:C,Data_Cadastro_Cliente=:D,Logradouro_Cliente=:E,Num_Cliente=:F WHERE Cod_Cliente=1);

Estava faltando uma aspa " ' " (simples)

GOSTEI 0
Hilton Sá

Hilton Sá

13/09/2013

Mais errado que fechar a aspas simples (erro de sintaxe), acho que é modificar a chave da tabela, através do parâmetro "A", sempre que ela for igual a 1. É isso mesmo que voce quer, ou é só uma pegadinha?
GOSTEI 0
Fabricio Luciano

Fabricio Luciano

13/09/2013

Olá amigos....a aspas simples eu copiei e colei errado. ela tem no meu código. não meu amigo...não é pegadinha, o meu delphi está marcando erro na primeira aspas simples e não sei pq. quanto a igualdade do Where coloquei 1 só para não esticar mais ainda a linha pra postagem desta dúvida.
GOSTEI 0
Fabricio Luciano

Fabricio Luciano

13/09/2013

Olá amigos....a aspas simples eu copiei e colei errado. ela tem no meu código. não meu amigo...não é pegadinha, o meu delphi está marcando erro na primeira aspas simples e não sei pq. quanto a igualdade do Where coloquei 1 só para não esticar mais ainda a linha pra postagem desta dúvida.
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

13/09/2013

E qual é o erro que o Delphi apresenta?
GOSTEI 0
Fabricio Luciano

Fabricio Luciano

13/09/2013

Olá amigos....a aspas simples eu copiei e colei errado. ela tem no meu código. não meu amigo...não é pegadinha, o meu delphi está marcando erro na primeira aspas simples e não sei pq. quanto a igualdade do Where coloquei 1 só para não esticar mais ainda a linha pra postagem desta dúvida.

esse é o meu código para update:

with Data_Module.Query_Cadastro_Clientes do
begin
close;
sql.Clear;
sql.Add('UPDATE clientes SET Cod_Cliente=:A,Nome_Cliente=:B,CPF_CNPJ_Cliente=:C,Data_Cadastro_Cliente=:D,Logradouro_Cliente=:E,Num_Cliente=:F,Complemento_Cliente=:G,Bairro_Cliente=:H,Cidade_Cliente=:I,UF_Cliente=:J,CEP_Cliente=:L,Telefone_Cliente=:M');
sql.Add(',Celular_Cliente=:N,Email_Cliente=:O,Tipo_Cliente=:P WHERE Cod_Cliente=:A');
Parameters.ParamByName('A').Value := StrtoInt(Edit_Cod_Cliente.Text);
Parameters.ParamByName('B').Value := Edit_Nome_Cliente.Text;
Parameters.ParamByName('C').Value := Edit_CPF_CNPJ_Cliente.Text;
Parameters.ParamByName('D').Value := Edit_Data_Cadastro_Cliente.Text;
Parameters.ParamByName('E').Value := Edit_Logradouro_Cliente.Text;
Parameters.ParamByName('F').Value := Edit_Num_Cliente.Text;
Parameters.ParamByName('G').Value := Edit_Complemento_Cliente.Text;
Parameters.ParamByName('H').Value := Edit_Bairro_Cliente.Text;
Parameters.ParamByName('I').Value := Edit_Cidade_Cliente.Text;
Parameters.ParamByName('J').Value := Combo_UF_Cliente.Text;
Parameters.ParamByName('L').Value := Edit_CEP_Cliente.Text;
Parameters.ParamByName('M').Value := Edit_Telefone_Cliente.Text;
Parameters.ParamByName('N').Value := Edit_Celular_Cliente.Text;
Parameters.ParamByName('O').Value := Edit_Email_Cliente.Text;
Parameters.ParamByName('P').Value := Combo_Tipo_Cliente.Text;
ExecSQL;

A mensagem do delphi é: Objeto Parameter definido incorretamente. As informações são inconsistentes ou incompletas.
GOSTEI 0
Fabricio Luciano

Fabricio Luciano

13/09/2013

Desculpe as mensagens repetidas...deu erro aqui na hora de postar.
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

13/09/2013

Todos os campos estão sendo preenchidos? Pelo que entendi da mensagem, algum parâmetro pode estar vazio, ou com conteúdo divergente da estrutura do seu banco de dados. Por exemplo, você pode estar enviando um parâmetro String para um campo Integer.
GOSTEI 0
Hilton Sá

Hilton Sá

13/09/2013

Fabricio, verifique se existe alguma aspas simples no conteúdo de algum edit...
GOSTEI 0
Marcio

Marcio

13/09/2013

amigo,

se você está usando Query da aba ADO use Params.ParamByName, ou seja, use a propriedade Params. antes do ParamByName...

e outra nunca use o ParamByName.('campo').Value para atribuição... use AsInteger, AsString, etc...

use o ParamByName('campo').Value para pegar valor do parâmetro...


falow!!!
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

13/09/2013

Duas coisas:
1) Você está usando o parâmetro A duas vezes. Experimente mudar um deles para que não use o mesmo parâmetro mais de uma vez.
2) Qual é a lógica de atualizar um campo, passando para ele seu próprio valor?
GOSTEI 0
Rodrigo Cordeiro

Rodrigo Cordeiro

13/09/2013

Exatamente como o Joel disse... o problema é definir duas vezes o mesmo parâmetro... "A"

Acho que a maioria dos componentes de acesso da dados não suportam isso, o que penso ser um erro! Muitas vezes criamos instruções SQL com sub-query's que requerem o uso do mesmo valor de parâmetro mais de uma vez... Ai você é obrigado a fazer A1, A2 e ao atribuir com ParamByName colocar o mesmo valor para ambos...

Obs: Com Zeos isso não ocorre. Com ADO sim...

[]'s

Rodrigo - qmd
qmd@usercontrol.com.br
GOSTEI 0
Fabricio Luciano

Fabricio Luciano

13/09/2013

Meus amigos.....resolvido. Tinha 2 colunas com nomes errados e por isso o parâmetro dava vazo para inserir. Além disso, tinha mesmo que definir o parâmetro com nomes diferentes para a coluna Cod_Cliente. Muito obrigado pois não sabia deste detalhe. Agora, como faço para exibir o resultado que acabei de atualizar??? tentei usar um refresh na minha query mas deu o seguinte erro: Informações insuficientes sobre a coluna chave para a atualização. Uso um adoquery para exibir os dados e navegar pelo banco e um outro para as ações de cadastro como foi o caso do update. O que devo fazer???? devo setar algo?? No meu código está assim, logo após a instrução de update:


Application.MessageBox('Registro Alterado com sucesso!!!', 'Aviso do Sistema', MB_OK);

// Carregando as informações
data_module.Query_Clientes.Open;
data_module.Query_Clientes.Refresh;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

13/09/2013

Basta abrir e fechar a query, sem o refresh.
GOSTEI 0
Fabricio Luciano

Fabricio Luciano

13/09/2013

Obrigado Joel....funcionou. Aliás, obrigado a todos pelas sugestões.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

13/09/2013

Que bom que conseguiu.
Estou então concluindo o tópico. Abraço a todos.
GOSTEI 0
POSTAR