Fórum Erro Delphi Não Consigo Resolver! Dados Inconsistentes #510888

16/02/2015

0

Boa tarde!!!

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

Bruno Henrique

Responder

Posts

16/02/2015

Bruno Henrique

Ninguem consegue me ajudar????
Responder

Gostei + 0

19/02/2015

Douglas

Olá Bruno Henrique, tudo bem?
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.
Responder

Gostei + 0

20/02/2015

Bruno Henrique

Douglas Claudio,

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;
Responder

Gostei + 0

20/02/2015

Douglas

Bem, tente passar o seu código SQL desta forma abaixo para o commandText. Um outra coisa, Qual é o tipo do objeto CmdCadClientes?

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;  
Responder

Gostei + 0

20/02/2015

Bruno Henrique

Douglas, boa noite!!!

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;
Responder

Gostei + 0

21/02/2015

Douglas

Bruno, você quer inserir ou atualizar os dados? O break está pulando para o local que você comentou, pois o tipo de operação não é igual "I". Novamente, que tipo de objeto é CmdCadClientes?
Responder

Gostei + 0

21/02/2015

Bruno Henrique

Doulgas, quero fazer os dois inserir e atualizar, quando clicar no botão incluir digito o que for preciso nos edits e clico no botão gravar, ai ele executa o comando de insert, quando ele clicar no botão alterar, ele altera o que for preciso e clica no botão gravar, ele executa o update.

O objeto é um adocommand do CmdCadClientes da paleta ADO
Responder

Gostei + 0

21/02/2015

Douglas

Doulgas, quero fazer os dois inserir e atualizar, quando clicar no botão incluir digito o que for preciso nos edits e clico no botão gravar, ai ele executa o comando de insert, quando ele clicar no botão alterar, ele altera o que for preciso e clica no botão gravar, ele executa o update.

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.
Responder

Gostei + 0

21/02/2015

Bruno Henrique

Douglas, bom dia!!!

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
Responder

Gostei + 0

21/02/2015

Douglas

OK, vou ficar no aguardo!
Responder

Gostei + 0

24/02/2015

Bruno Henrique

Douglas, estou tentando ainda!!!

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
Responder

Gostei + 0

24/02/2015

Eduardo Silva.

Como você está formatando os campos do tipo DATE?

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
Responder

Gostei + 0

24/02/2015

Bruno Henrique

Eduardo, boa noite

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
Responder

Gostei + 0

24/02/2015

Bruno Henrique

Eduardo, boa noite!!!

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????
Responder

Gostei + 0

26/02/2015

Bruno Henrique

Por favor!!! Alguem ajuda???
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar