Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ryox

Comando Sql Update

Recommended Posts

Fala Galera, estou com uma duvida creio q simples, mas nao estou conseguindo solucionar, rss

estou montando um sistema simples inicialmente, somente com cadastro e consultas, pois acredito que pratica ajuda assim como a teoria.

mas chega de bla bla bla, e vamos ao problema!

 

criei um cadastro de usuarios, simples, com dados (Id_usuario, nome, cpf, email, usuario e senha),

na hora do insert eu consigo, porem nao limpa o campo assim que eu inserir, mas ate ai beleza.

O B.O. é quando eu tento dar um update, ele nao faz nda creio q estou errando em alguma coisa, ate pq no DELETE ele faz normalmente.

nao como eu gostaria mas faz, rss

 

OBs: Delphi 2010 + SQL Anywhere 9

 

vou postar o codigo e me espero que me ajudem,

att

Ryox

 

procedure Tfrm_cad_usuario.BitBtn1Click(Sender: TObject);
begin
//INSERINDO DADOS DO CADASTRO DO USUÁRIO!!!!

QueryCad_Usuarios.Close;

QueryCad_Usuarios.SQL.Text := 'insert into usuarios values (:cod_usuario, :nome, :cpf, :email, :usuario, :senha)';

QueryCad_Usuarios.Parameters[0].Value := Edit1.Text; //codigo Usuário

QueryCad_Usuarios.Parameters[1].Value := Edit2.Text; //codigo Nome

QueryCad_Usuarios.Parameters[2].Value := Edit3.Text; //codigo CPF

QueryCad_Usuarios.Parameters[3].Value := Edit4.Text; //codigo Email

QueryCad_Usuarios.Parameters[4].Value := Edit5.Text; //codigo Usuário

QueryCad_Usuarios.Parameters[5].Value := Edit6.Text; //codigo Senha

QueryCad_Usuarios.ExecSQL;

ShowMessage ('INSERIDO COM SUCESSO');


end;

procedure Tfrm_cad_usuario.BitBtn2Click(Sender: TObject);
begin
//ALTERANDO CADASTRO DO USUÁRIO!!!!

QueryCad_Usuarios.Close;

QueryCad_Usuarios.SQL.Text := 'UPDATE USUARIO SET (:nome[1], :cpf[2], :email[3], :usuario[4], :senha[5])WHERE :cod_usuario[0]';

QueryCad_Usuarios.Parameters[0].Value := Edit1.Text; //codigo Usuário

QueryCad_Usuarios.Parameters[1].Value := Edit2.Text; //codigo Nome

QueryCad_Usuarios.Parameters[2].Value := Edit3.Text; //codigo CPF

QueryCad_Usuarios.Parameters[3].Value := Edit4.Text; //codigo Email

QueryCad_Usuarios.Parameters[4].Value := Edit5.Text; //codigo Usuário

QueryCad_Usuarios.Parameters[5].Value := Edit6.Text; //codigo Senha

QueryCad_Usuarios.ExecSQL;

ShowMessage ('ALTERADO COM SUCESSO');
end;

procedure Tfrm_cad_usuario.BitBtn3Click(Sender: TObject);
begin
//EXCLUINDO USUÁRIO!!!!

QueryCad_Usuarios.Close;

QueryCad_Usuarios.SQL.Text := 'delete from usuarios where cod_usuario=:[0]';

QueryCad_Usuarios.Parameters[0].Value := Edit1.Text; //codigo usuario

QueryCad_Usuarios.ExecSQL;

ShowMessage ('USUÁRIO EXCLUIDO COM SUCESSO');
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sintaxe correta pra Update é:

Update Table NomeTabela Set Campo1 = :Valor1, Campo2 = :Valor2 ... CampoN = :ValorN.

Sendo assim:

 

Seu update deveria ficar:

UPDATE USUARIO SET Campo1 = :nome, Campo2 = :cpf, Campo3 = :email, Campo4 = :usuario, Campo5 = :senha WHERE Campo 6 = :cod_usuario 

Outra Coisa:

 

O índice dos parâmetros não está associado ao nome deles, e sim à ordem em que eles aparecem na query.

 

Talvez seria melhor vc usar o ParamByName. No caso acima ficaria:

QueryCad_Usuarios.ParamByName('nome').AsString := Edit1.Text;  //codigo Usuário

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve Lazaro,

coloquei como mandou:

 

UPDATE USUARIO SET Campo1 = :nome, Campo2 = :cpf, Campo3 = :email, Campo4 = :usuario, Campo5 = :senha WHERE Campo 6 = :cod_usuario 
QueryCad_Usuarios.SQL.Text := 'UPDATE USUARIO SET nome :=[1], cpf:=[2], email :=[3], usuario:=[4], senha:=[5])WHERE cod_usuario :=[0]';
Porem ainda nao consegui, ainda da erro.
Outra Coisa:

 

O índice dos parâmetros não está associado ao nome deles, e sim à ordem em que eles aparecem na query.

 

Talvez seria melhor você usar o ParamByName. No caso acima ficaria:

QueryCad_Usuarios.ParamByName('nome').AsString := Edit1.Text;  //codigo Usuário

No caso do ParamByName estou usando o Field o qual se apresenta na minha query.

 

estarei postando ftos para melhor entender.

 

Desde ja agradeço a ajuda.

 

Att

 

Ryox

 

xr7cxgdry63c0a3cehxmi_t.jpg

 

xtdtxgop5r0nz9wnk4ugi_t.jpg

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu update ainda está errado... o correto é por campo = :id, não campo :=id entende? Você colocou assim:

 

 

'UPDATE USUARIO SET nome :=[1], cpf:=[2], email :=[3], usuario:=[4], senha:=[5])WHERE cod_usuario :=[0]';

 

Deveria ser assim:

 

'UPDATE USUARIO SET nome = :[1], cpf = :[2], email = :[3], usuario = :[4], senha = :[5] WHERE cod_usuario = :[0]';

 

Além disso tem um ')' sobrando no seu comando sql. Uma dúvida: os nomes dos seus identificadores de parâmetros realmente são [1], [2] .... [5]? Ou seriam os da imagem? Se forem os da imagem, o correto seria trocar os [0] .. [5] pelo nome do identificador, como fez no insert. Ficaria assim:

 

 

'UPDATE USUARIO SET nome = :nome, cpf = :cpf, email = :email, usuario = :usuario, senha = :senha WHERE cod_usuario = :cod_usuario';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu Update deveria ser como o Chrnos colocou aí:

 

 

 

'UPDATE USUARIO SET nome = :nome, cpf = :cpf, email = :email, usuario = :usuario, senha = :senha WHERE cod_usuario = :cod_usuario';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lazaro e Chrnos, vamos ao detalhes, rss

agora temos outro problema, vamos a eles:

 

mudei meu update para:

 

QueryCad_Usuarios.SQL.Text := 'UPDATE usuarios SET nome = :[1], cpf = :[2], email = :[3], usuario = :[4], senha = :[5] WHERE cod_usuario = :[0]';

porem nao apresenta erro, aparece a Showmessage (incluido com sucesso mas nao altera no banco).

 

na imagem q postei pode ver que os FIELDS sao os numeros:

0 - cod_usuario

1 - nome

....

 

entao utilizo o [0], [1] ...

 

ao menos assim que fiz na consulta para acessar na tela de login.

 

 

Datamodule2.ADODataSet1.Close;

Datamodule2.ADODataSet1.Parameters[0].Value :=Edit1.Text;
Datamodule2.ADODataSet1.Parameters[1].Value :=Edit2.Text;
DataModule2.ADODataSet1.Open;
if DataModule2.ADODataSet1.IsEmpty then
Begin
ShowMessage ('Login ou Senhas Inválidos');
Application.Terminate
End

 

estou fazendo algo errado ainda, mas nao tem santo que mude, rss

 

estou tentando trazer tbm os dados na tabela para poder alterar mas inicialmente estou fazendo isso manual.

ex: pra mudar o campo eu digito novamente tudo e altero um campo so,

quando o correto seria quando digitasse o id ele trouxesse tdos os campos preenchidos não é?

 

desde ja agradeço.

 

att

 

Jorge Alexandre

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o Seguinte:

 

Utilize a query de Update conforme Chrnos te passou:

'UPDATE USUARIO SET nome = :nome, cpf = :cpf, email = :email, usuario = :usuario, senha = :senha WHERE cod_usuario = :cod_usuario';

E daí seta seus parâmetros pelo nome:

  Datamodule2.ADODataSet1.Parameters.ParamByName('nome').Value :=Edit1.Text;  
  Datamodule2.ADODataSet1.Parameters.ParamByName('cpf').Value :=Edit2.Text;
  Datamodule2.ADODataSet1.Parameters.ParamByName('email').Value :=Edit3.Text;
  Datamodule2.ADODataSet1.Parameters.ParamByName('usuario').Value :=Edit4.Text
  Datamodule2.ADODataSet1.Parameters.ParamByName('senha').Value :=Edit5.Text
  Datamodule2.ADODataSet1.Parameters.ParamByName('cod_usuario').Value :=Edit6.Text

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra coisa que me veio a mente aqui.... após atualizar os dados, você está refazendo a consulta que exibe as informações no grid? No código que postou não vi isso no seu botão e, sem atualizar os dados, não irá mudar nada na tela, mesmo que ocorra o update/delete com sucesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lazaro,

 

Acha mais viavel eu deixar a busca pelo parametro do que pelo Fields?

pois pra fazer o parametro ler vou criar um select meio extenso nao é?

 

Chonos,

 

creio q nao estou fazendo essa nova consulta, como posso proceder?

 

att

Ryox

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Acha mais viavel eu deixar a busca pelo parametro do que pelo Fields?

pois pra fazer o parametro ler vou criar um select meio extenso nao é?

 

Não entendi o que vc quiser com isso. Parametros e Fields são coisas distintas no dataset.

 

A principal vantagem de se usar o nome dos parâmetros é a facilidade de analisar o código posteriormente.

Porém é melhor vc fazer da forma que te deixa mais à vontade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o inserir estava normal, testei o parametro por ele, e coloquei assim:

 

 

//INSERINDO DADOS DO CADASTRO DO USUÁRIO!!!!

QueryCad_Usuarios.Close;
QueryCad_Usuarios.SQL.Text := 'insert into usuarios values (:cod_usuario, :nome, :cpf, :email, :usuario, :senha)';
QueryCad_Usuarios.Parameters.ParamByName('codusuario').Value := Edit1.Text;
QueryCad_Usuarios.Parameters.ParamByName('nome').Value := Edit2.Text;
QueryCad_Usuarios.Parameters.ParamByName('cpf').Value := Edit3.Text;
QueryCad_Usuarios.Parameters.ParamByName('email').Value := Edit4.Text;
QueryCad_Usuarios.Parameters.ParamByName('usuario').Value := Edit5.Text;
QueryCad_Usuarios.Parameters.ParamByName('senha').Value := Edit6.Text;
QueryCad_Usuarios.ExecSQL;
ShowMessage ('INSERIDO COM SUCESSO');
end;

Mas nao funcionou, kkkkkkkkk

No sql da query coloquei:

 

select * from usuarios

where (cod_usuario = :codusuario, nome = :nome, cpf = :cpf, email = :email, usuario = :usuario, senha = :senha)

Compila normal, mas ai quando vou inserir ele apresenta erro:

QueryCad_Usuarios:Parameter 'codusuario' not found.

 

Creio q seja mais facil pelo Field do que pelo parametro.

 

alguma nova solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

QueryCad_Usuarios.SQL.Text := 'insert into usuarios values (:cod_usuario, :nome, :cpf, :email, :usuario, :senha)';

QueryCad_Usuarios.Parameters.ParamByName('codusuario').Value := Edit1.Text;

 

cod_usuario é diferente de codusuario. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É meus amigos pelo parambyname nao deu mesmo.

 

voltei para o Parameters [0].... kkkk

 

Poxa deixei o do update certinho ele ate aparece a mensagem do Showmessage q foi alterado com sucesso,

mas nao altera os dados .

 

QueryCad_Usuarios.SQL.Text := 'UPDATE usuarios SET nome = :[1], cpf = :[2], email = :[3], usuario = :[4], senha = :[5] WHERE cod_usuario = :[0]';

 

Alguma nova ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.