Fórum Erro Delphi Não Consigo Resolver! Dados Inconsistentes #510888
16/02/2015
0
Fiz um form de cadastro e ao clicar no botão gravar ele me retorna um erro, não consigo resolver o erro de forma alguma.
Obs.: Banco de Dados Firebird com driver obdc e com ADOConection + ADOQuery
Esse é o Form:
[img:descricao=Form_Cad_Clientes]http://arquivo.devmedia.com.br/forum/imagem/316964-20150216-172711.jpg[/img]
Esse é o Erro:
[img:descricao=Mensagem de Erro]http://arquivo.devmedia.com.br/forum/imagem/316964-20150216-172742.jpg[/img]
Código do botão gravar
procedure TFrmCadClientes.BtnGravarClick(Sender: TObject);
begin
if EdtNomeRazao.Text = '' then
begin
Mess(FrmCadClientes.Handle,'Dados em Branco!Preencha os Dados Corretamente!!!', mb_iconinformation or mb_ok);
EdtNomeRazao.SetFocus;
exit;
end
else
if EdtNumeroAtivoInativo.Text = '' then
begin
Mess(FrmCadClientes.Handle,'Dados em Branco!Preencha os Dados Corretamente!!!', mb_iconinformation or mb_ok);
EdtNumeroAtivoInativo.SetFocus;
exit;
end ;
TRY
DM.ConexaoBd.BeginTrans;
if f_operacao = 'I' then
begin
DM.CmdCadClientes.CommandText:='INSERT INTO CLIENTES (SITUACAO, DATACADASTRO, NOME, ULTIMAALTERACAO, NOMEFANTASIA, ENDERECO, NUMERO, BAIRRO, CIDADE, ESTADO, CEP, RG, CPF, DATANASCIMENTO, TELEFONE1, TELEFONE2, TELEFONE3, CELULAR, EMAIL, CONTATO, LIMITE, OBSERVACOES)';
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + 'VALUES(:PSITUACAO, :PDATACADASTRO,';
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + ':PNOME, :PULTIMAALTERACAO, :PNOMEFANTASIA, :PENDERECO, :PNUMERO, :PBAIRRO, :PCIDADE, :PESTADO, :PCEP, :PRG, :PCPF,';
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + ':PDATANASCIMENTO, :PTELEFONE1, :PTELEFONE2, :PTELEFONE3, :PCELULAR, :PEMAIL, :PCONTATO, :PLIMITE, :POBSERVACOES)';
end
else
begin
DM.CmdCadClientes.CommandText:='UPDATE CLIENTES SET';
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + 'SITUACAO=:PSITUACAO,' ;
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + 'DATACADASTRO=:PDATACADASTRO, NOME=:PNOME, ULTIMAALTERACAO=:PULTIMAALTERACAO, NOMEFANTASIA=:PNOMEFANTASIA,';
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + 'ENDERECO=:PENDERECO, NUMERO=:PNUMERO, BAIRRO=:PBAIRRO, CIDADE=:PCIDADE, ESTADO=:PESTADO, CEP=:PCEP, RG=:PRG,';
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + 'CPF=:PCPF, DATANASCIMENTO=:PDATANASCIMENTO, TELEFONE1=:PTELEFONE1, TELEFONE2=:PTELEFONE2, TELEFONE3=:PTELEFONE3,';
DM.CmdCadClientes.CommandText:=DM.CmdCadClientes.CommandText + 'CELULAR=:PCELULAR, EMAIL=:PEMAIL, CONTATO=:PCONTATO, LIMITE=:PLIMITE, OBSERVACOES=:POBSERVACOES WHERE CODIGO=:PCODIGO';
end;
with DM.CmdCadClientes.Parameters do
begin
if f_operacao = 'I' then
ParamByName('PCODIGO').Value:=EdtCodigo.Text;
ParamByName('PSITUACAO').Value:=EdtNumeroAtivoInativo.Text;
ParamByName('PDATACADASTRO').Value:=MskDataCadastro.Text;
ParamByName('PNOME').Value:=EdtNomeRazao.Text;
ParamByName('PULTIMAALTERACAO').Value:=MskUltimaAlteracao.Text;
ParamByName('PNOMEFANTASIA').Value:=EdtApelidoFantasia.Text;
ParamByName('PENDERECO').Value:=EdtEndereco.Text;
ParamByName('PNUMERO').Value:=EdtNumero.Text;
ParamByName('PBAIRRO').Value:=EdtBairro.Text;
ParamByName('PCIDADE').Value:=EdtNomeCidade.Text;
ParamByName('PESTADO').Value:=EdtEstado.Text;
ParamByName('PCEP').Value:=MskCep.Text;
ParamByName('PRG').Value:=EdtRgIe.Text;
ParamByName('PCPF').Value:=MskCpfCnpj.Text;
ParamByName('PDATANASCIMENTO').Value:=MskDataNascimento.Text;
ParamByName('PTELEFONE1').Value:=MskTelefone1.Text;
ParamByName('PTELEFONE2').Value:=MskTelefone2.Text;
ParamByName('PTELEFONE3').Value:=MskTelefone3.Text;
ParamByName('PCELULAR').Value:=MskCelular.Text;
ParamByName('PEMAIL').Value:=EdtEmail.Text;
ParamByName('PCONTATO').Value:=EdtContato.Text;
ParamByName('PLIMITE').Value:=EdtLimiteCredito.Text;
ParamByName('POBSERVACOES').Value:=MemoObservacoes.Lines.Text;
DM.CmdCadClientes.Prepared:=True;
DM.CmdCadClientes.Execute;
DM.CmdCadClientes.Prepared:=False;
end;
DM.ConexaoBd.CommitTrans;
LimpaCampos;
DesabilitarEdit;
DesabilitarMascara;
DesabilitarMemo;
EXCEPT
DM.ConexaoBd.RollbackTrans;
Mess(FrmCadClientes.Handle,'Falha na Gravação...',mb_iconinformation or mb_ok);
BtnGravar.Enabled := True;
END;
BtnPesquisar.Enabled := True;
BtnIncluir.Enabled := True;
BtnSair.Enabled := True;
BtnAlterar.Enabled := False;
BtnGravar.Enabled := False;
BtnCancelar.Enabled := False;
LimpaCampos;
end;
Alguém sabe como resolver o erro.
Bruno Henrique
Curtir tópico
+ 0Posts
16/02/2015
Bruno Henrique
Gostei + 0
19/02/2015
Douglas
O problema parece estar em algum parâmetro. Faça o seguinte, debugue o código e verifique exatamente o ponto que o erro ocorre.
Gostei + 0
20/02/2015
Bruno Henrique
Blz!!!
Eu debuguei o código e o erro ocorre na última linha(Aonde eu comentei: //O ERRO OCORRE AQUI QUANDO EU DEBUGO) mais não consigo descobrir o que é, para mim está tudo certo
begin
CmdCadClientes.CommandText:='UPDATE CLIENTES SET ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'SITUACAO=:PSITUACAO,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'DATACADASTRO=:PDATACADASTRO,NOME=:PNOME,ULTIMAALTERACAO=:PULTIMAALTERACAO,NOMEFANTASIA=:PNOMEFANTASIA,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'ENDERECO=:PENDERECO,NUMERO=:PNUMERO,BAIRRO=:PBAIRRO,CIDADE=:PCIDADE,ESTADO=:PESTADO,CEP=:PCEP,RG=:PRG,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'CPF=:PCPF,DATANASCIMENTO=:PDATANASCIMENTO,TELEFONE1=:PTELEFONE1,TELEFONE2=:PTELEFONE2,TELEFONE3=:PTELEFONE3,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'CELULAR=:PCELULAR,EMAIL=:PEMAIL,CONTATO=:PCONTATO,LIMITE=:PLIMITE,OBSERVACOES=:POBSERVACOES ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'WHERE CODIGO=:PCODIGO';//O ERRO OCORRE AQUI QUANDO EU DEBUGO
end;Gostei + 0
20/02/2015
Douglas
begin CmdCadClientes.CommandText:='UPDATE CLIENTES SET '+ ' SITUACAO=:PSITUACAO, '+ ' DATACADASTRO=:PDATACADASTRO, '+ ' NOME=:PNOME, '+ ' ULTIMAALTERACAO=:PULTIMAALTERACAO, '+ ' NOMEFANTASIA=:PNOMEFANTASIA, '+ ' ENDERECO=:PENDERECO, '+ ' NUMERO=:PNUMERO, '+ ' BAIRRO=:PBAIRRO, '+ ' CIDADE=:PCIDADE, '+ ' ESTADO=:PESTADO, '+ ' CEP=:PCEP, '+ ' RG=:PRG, '+ ' CPF=:PCPF, '+ ' DATANASCIMENTO=:PDATANASCIMENTO, '+ ' TELEFONE1=:PTELEFONE1, '+ ' TELEFONE2=:PTELEFONE2, '+ ' TELEFONE3=:PTELEFONE3, '+ ' CELULAR=:PCELULAR, '+ ' EMAIL=:PEMAIL, '+ ' CONTATO=:PCONTATO, '+ ' LIMITE=:PLIMITE, '+ ' OBSERVACOES=:POBSERVACOES '+ ' WHERE CODIGO=:PCODIGO'; end;
Gostei + 0
20/02/2015
Bruno Henrique
Não deu certo desse jetio, debuguei meu projeto mais uma vez e percebi que ele não passa pelo try ele já vai direto para o update set.Não consigo entender, acho que o erro está ai.(vou comentar com // aonde ele não passar e aonde ele começa)
procedure TFrmCadClientes.BtnGravarClick(Sender: TObject);
begin
TRY//ele não passa aqui
FrmPrincipal.ConexaoBd.BeginTrans;
if f_operacao='I' then
begin
CmdCadClientes.CommandText:='INSERT INTO CLIENTES (SITUACAO,DATACADASTRO,NOME,ULTIMAALTERACAO,NOMEFANTASIA,ENDERECO,NUMERO,BAIRRO,CIDADE,ESTADO,CEP, ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'RG,CPF,DATANASCIMENTO,TELEFONE1,TELEFONE2,TELEFONE3,CELULAR,EMAIL,CONTATO,LIMITE,OBSERVACOES) ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'VALUES(:PSITUACAO,:PDATACADASTRO,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+':PNOME,:PULTIMAALTERACAO,:PNOMEFANTASIA,:PENDERECO,:PNUMERO,:PBAIRRO,:PCIDADE,:PESTADO,:PCEP,:PRG,:PCPF,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+':PDATANASCIMENTO,:PTELEFONE1,:PTELEFONE2,:PTELEFONE3,:PCELULAR,:PEMAIL,:PCONTATO,:PLIMITE,:POBSERVACOES )';
end
else
begin
CmdCadClientes.CommandText:='UPDATE CLIENTES SET ';//ja pula direto para ca
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'CODIGO=:PCODIGO,SITUACAO=:PSITUACAO,DATACADASTRO=:PDATACADASTRO,NOME=:PNOME,ULTIMAALTERACAO=:PULTIMAALTERACAO, ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'ENDERECO=:PENDERECO,NUMERO=:PNUMERO,BAIRRO=:PBAIRRO,CIDADE=:PCIDADE,ESTADO=:PESTADO,CEP=:PCEP,RG=:PRG,CPF=:PCPF,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'NOMEFANTASIA=:PNOMEFANTASIA,DATANASCIMENTO=:PDATANASCIMENTO,TELEFONE1=:PTELEFONE1,TELEFONE2=:PTELEFONE2,TELEFONE3=:PTELEFONE3,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'CELULAR=:PCELULAR,EMAIL=:PEMAIL,CONTATO=:PCONTATO,LIMITE=:PLIMITE,OBSERVACOES=:POBSERVACOES ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'Where CODIGO=:PCODIGO';
end;
with CmdCadClientes.Parameters do
begin
if f_operacao<>'I' then
ParamByName('PCODIGO').Value := EdtCodigo.Text;
ParamByName('PSITUACAO').Value:=EdtNumeroAtivoInativo.Text;
ParamByName('PDATACADASTRO').Value:=MskDataCadastro.Text;
ParamByName('PNOME').Value:=EdtNomeRazao.Text;
ParamByName('PULTIMAALTERACAO').Value:=MskUltimaAlteracao.Text;
ParamByName('PNOMEFANTASIA').Value:=EdtApelidoFantasia.Text;
ParamByName('PENDERECO').Value:=EdtEndereco.Text;
ParamByName('PNUMERO').Value:=EdtNumero.Text;
ParamByName('PBAIRRO').Value:=EdtBairro.Text;
ParamByName('PCIDADE').Value:=EdtNomeCidade.Text;
ParamByName('PESTADO').Value:=EdtEstado.Text;
ParamByName('PCEP').Value:=MskCep.Text;
ParamByName('PRG').Value:=EdtRgIe.Text;
ParamByName('PCPF').Value:=MskCpfCnpj.Text;
ParamByName('PDATANASCIMENTO').Value:=MskDataNascimento.Text;
if MskDataNascimento.Text <> ' / / '
then ParamByName('PDATANASCIMENTO').value:=MskDataNascimento.Text
else ParamByName('PDATANASCIMENTO').value:='01/01/1900';
ParamByName('PTELEFONE1').Value:=MskTelefone1.Text;
ParamByName('PTELEFONE2').Value:=MskTelefone2.Text;
ParamByName('PTELEFONE3').Value:=MskTelefone3.Text;
ParamByName('PCELULAR').Value:=MskCelular.Text;
ParamByName('PEMAIL').Value:=EdtEmail.Text;
ParamByName('PCONTATO').Value:=EdtContato.Text;
ParamByName('PLIMITE').Value:=StrToFloat(Converte2(EdtLimiteCredito.Text));
ParamByName('POBSERVACOES').Value:=MemoObservacoes.Text;
end;
CmdCadClientes.Prepared:=True;
CmdCadClientes.Execute;
CmdCadClientes.Prepared:=False;
FrmPrincipal.ConexaoBd.CommitTrans;
LimpaCampos;
DesabilitarEdit;
DesabilitarMascara;
DesabilitarMemo;
EXCEPT
FrmPrincipal.ConexaoBd.RollbackTrans;
Mess(FrmCadClientes.Handle,'Falha na Gravação...',mb_iconinformation or mb_ok);
LimpaCampos;
DesabilitarEdit;
DesabilitarMascara;
DesabilitarMemo;
END;
BtnPesquisar.Enabled := True;
BtnIncluir.Enabled := True;
BtnSair.Enabled := True;
BtnAlterar.Enabled := False;
BtnGravar.Enabled := False;
BtnCancelar.Enabled := False;
LimpaCampos;
end;
Gostei + 0
21/02/2015
Douglas
Gostei + 0
21/02/2015
Bruno Henrique
O objeto é um adocommand do CmdCadClientes da paleta ADO
Gostei + 0
21/02/2015
Douglas
O objeto é um adocommand do CmdCadClientes da paleta ADO
OK. Só atente-se para um detalhe o "f_operacao" é quem vai definir o momento que você está inserindo ou alterando. Nunca trabalhei com Adocommand, tente utilizar o AdoQuery.
Gostei + 0
21/02/2015
Bruno Henrique
Eu declarei uma variavel assim f_operacao : char e depois atribui um valor para ela f_operacao:='I'. Vou tentar com o adoquery e te falo.
Grato
Gostei + 0
21/02/2015
Douglas
Gostei + 0
24/02/2015
Bruno Henrique
Não achei solução!!!
Eu apaguei tudo e fiz novamente mais me retorna o erro
o aplicativo esta usando um valor incorreto para a operação atual
Já não sei mais oque fazer
Gostei + 0
24/02/2015
Eduardo Silva.
Lembre-se que no Firebird o formato é YYYY-MM-DD, ou seja, o ano, mês e dia separados por hifens.
Exemplo:
INSERT INTO CLIENTES VALUES(1, 'DOUGLAS', '2015-02-24');
A propósito, por quê você está utilizando o acesso via ODBC com o ADO, isso traz algumas limitações, principalmente
com relação a performance.
Eduardo Belo
Gostei + 0
24/02/2015
Bruno Henrique
eu faço assim está certo???
procedure TFrmCadClientes.MskDataCadastroExit(Sender: TObject);
begin
MskDataCadastro.Text := FormatMaskText('99/999/9999;0',MskDataCadastro.text);
end;Eu uso ADO pq eu não tenho experiencia com outros componentes, se puder ajudar com outros eu agradeço...
abraços
Gostei + 0
24/02/2015
Bruno Henrique
Estive olhando o código e realmente esse erro era por causa das datas não estava formatada ai fiz assim!!!
ParamByName('PDATANASCIMENTO').Value := StrToDate(MskDataNascimento.Text);E o erro desapareceu.Porém apareceu outro erro.
ele pula um if que é o do insert e já logo para a linha do update
declarei uma variavel f_operacao : char e coloquei um valor para ela f_operacao :='I';
end;
TRY
FrmPrincipal.ConexaoBd.BeginTrans;
if f_operacao='I' then
begin//QUANDO COMPILO ELE NÃO PASSA AQUI
CmdCadClientes.CommandText:='INSERT into CADCLIENTES (SITUACAO,DATACADASTRO,DATAULTIMAALTERACAO,NOMERAZAO, ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'ENDERECO,NUMERO,BAIRRO,CODIGOCIDADE,NOMECIDADE,ESTADO,CEP,COMPLEMENTO,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'RGIE,CODIGOCPFCNPJ,NUMEROCPFCNPJ,DATANASCIMENTO,TELEFONE1,TELEFONE2,TELEFONE3,CELULAR,EMAIL,CONTATO,LIMITE,OBSERVACOES) ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'values (:PSITUACAO,:PDATACADASTRO,:PDATAULTIMAALTERACAO,:PNOMERAZAO,:PAPELIDOFANTASIA,:PENDERECO,:PNUMERO,:PBAIRRO,:PCODIGOCIDADE,:PNOMECIDADE,:PESTADO,:PCEP,:PCOMPLEMENTO,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+':PRGIE,:PCODIGOCPFCNPJ,:PNUMEROCPFCNPJ,:PDATANASCIMENTO,:PTELEFONE1,:PTELEFONE2,:PTELEFONE3,:PCELULAR,:PEMAIL,:PCONTATO,:PLIMITE,:POBSERVACOES )';
end
else
begin//JA VAI DIRETO PARA CÁ
CmdCadClientes.CommandText:='UPDATE CADCLIENTES SET ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'SITUACAO=:PSITUACAO,DATACADASTRO=:PDATACADASTRO,DATAULTIMAALTERACAO=:PDATAULTIMAALTERACAO,NOMERAZAO=:PNOMERAZAO,APELIDOFANTASIA=:PAPELIDOFANTASIA,ENDERECO=:PENDERECO,NUMERO=:PNUMERO,BAIRRO=:PBAIRRO,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'CODIGOCIDADE=:PCODIGOCIDADE,NOMECIDADE=:PNOMECIDADE,ESTADO=:PESTADO,CEP=:PCEP,COMPLEMENTO=:PCOMPLEMENTO,RGIE=:PRGIE,CODIGOCPFCNPJ=:PCODIGOCPFCNPJ,NUMEROCPFCNPJ=:PNUMEROCPFCNPJ,';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'DATANASCIMENTO=:PDATANASCIMENTO,TELEFONE1=:PTELEFONE1,TELEFONE2=:PTELEFONE2,TELEFONE3=:PTELEFONE3,CELULAR=:PCELULAR,EMAIL=:PEMAIL,CONTATO=:PCONTATO,LIMITE=:PLIMITE,OBSERVACOES=:POBSERVACOES ';
CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'Where CODIGO=:PCODIGO';
end;
with CmdCadClientes.Parameters do
begin
if f_operacao<>'I' then
ParamByName('PCODIGO').Value := EdtCodigo.Text;
ParamByName('PSITUACAO').Value := EdtNumeroAtivoInativo.Text;
ParamByName('PDATACADASTRO').Value := StrToDate(MskDataCadastro.Text);Ai ele não grava aonde sera que eu estou errando????
Gostei + 0
26/02/2015
Bruno Henrique
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)