Ryox 0 Denunciar post Postado Novembro 12, 2014 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árioQueryCad_Usuarios.Parameters[1].Value := Edit2.Text; //codigo NomeQueryCad_Usuarios.Parameters[2].Value := Edit3.Text; //codigo CPFQueryCad_Usuarios.Parameters[3].Value := Edit4.Text; //codigo EmailQueryCad_Usuarios.Parameters[4].Value := Edit5.Text; //codigo UsuárioQueryCad_Usuarios.Parameters[5].Value := Edit6.Text; //codigo SenhaQueryCad_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árioQueryCad_Usuarios.Parameters[1].Value := Edit2.Text; //codigo NomeQueryCad_Usuarios.Parameters[2].Value := Edit3.Text; //codigo CPFQueryCad_Usuarios.Parameters[3].Value := Edit4.Text; //codigo EmailQueryCad_Usuarios.Parameters[4].Value := Edit5.Text; //codigo UsuárioQueryCad_Usuarios.Parameters[5].Value := Edit6.Text; //codigo SenhaQueryCad_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 usuarioQueryCad_Usuarios.ExecSQL;ShowMessage ('USUÁRIO EXCLUIDO COM SUCESSO');end; Compartilhar este post Link para o post Compartilhar em outros sites
LazaroBinda 3 Denunciar post Postado Novembro 13, 2014 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
Ryox 0 Denunciar post Postado Novembro 13, 2014 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 Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Novembro 13, 2014 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
LazaroBinda 3 Denunciar post Postado Novembro 13, 2014 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
Ryox 0 Denunciar post Postado Novembro 13, 2014 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
LazaroBinda 3 Denunciar post Postado Novembro 13, 2014 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
Chrnos 30 Denunciar post Postado Novembro 13, 2014 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
Ryox 0 Denunciar post Postado Novembro 13, 2014 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
LazaroBinda 3 Denunciar post Postado Novembro 13, 2014 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
Ryox 0 Denunciar post Postado Novembro 13, 2014 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
LazaroBinda 3 Denunciar post Postado Novembro 13, 2014 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
Ryox 0 Denunciar post Postado Novembro 13, 2014 É 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