Fórum Erro Parametro[Não consigo achar a solução] #511864

24/02/2015

0

Não consigo achar o erro, pressiono run e compila sem erro, quando clico no botão gravar ele me retorna esse erro.Já tentei de tudo

Estou usando:
Banco de Dados: Firebird
Conexão: Adoconnection
Objeto: TADODataSet -------> Name: QueryCadClientes
Objeto: TADOCommand ----> Name: CmdCadClientes

Erro: o aplicativo esta usando um valor incorreto para a operação atual

Abaixo meu código:

Código botão incluir
procedure TFrmCadClientes.BtnIncluirClick(Sender: TObject);
begin
HabilitarEdit;
HabilitarMascara;
HabilitarMemo;
EdtNumeroAtivoInativo.SetFocus;
MskDataCadastro.Text := DateToStr(Date);
BtnIncluir.Enabled := false;
BtnGravar.Enabled := true;
BtnCancelar.Enabled := true;
BtnPesquisar.Enabled := false;
BtnSair.Enabled := false;
QueryCadClientes.Close;
QueryCadClientes.CommandText := 'SELECT MAX(CODIGO)+1 AS COD FROM CADCLIENTES';
QueryCadClientes.Open;
QueryCadClientes.Insert;
EdtCodigo.Text := IntToStr(QueryCadClientes.FieldByName('COD').AsInteger + 1);
end;


Código 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;
      TRY
        FrmPrincipal.ConexaoBd.BeginTrans;
        if f_operacao='I' then
          begin
            QueryCadClientes.Close;
            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 )';
            QueryCadClientes.Open;
          end
          else
          begin
            QueryCadClientes.Close;
            CmdCadClientes.CommandText:='UPDATE CADCLIENTES SET ';
            CmdCadClientes.CommandText:=CmdCadClientes.CommandText+'CODIGO=:PCODIGO,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';
            QueryCadClientes.Open;
          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('PDATAULTIMAALTERACAO').Value := MskUltimaAlteracao.Text;
          ParamByName('PNOMERAZAO').Value:=EdtNomeRazao.Text;
          ParamByName('PAPELIDOFANTASIA').Value := EdtApelidoFantasia.Text;
          ParamByName('PENDERECO').Value := EdtEndereco.Text;
          ParamByName('PNUMERO').Value := EdtNumero.Text;
          ParamByName('PBAIRRO').Value := EdtBairro.Text;
          ParamByName('PCODIGOCIDADE').Value := EdtCidade.Text;
          ParamByName('PNOMECIDADE').Value := EdtNomeCidade.Text;
          ParamByName('PESTADO').Value := EdtEstado.Text;
          ParamByName('PCEP').Value := MskCep.Text;
          ParamByName('PCOMPLEMENTO').Value := EdtComplemento.Text;
          ParamByName('PRGIE').Value := EdtRgIe.Text;
          ParamByName('PCODIGOCPFCNPJ').Value := EdtNumeroCpfCnpj.Text;
          ParamByName('PNUMEROCPFCNPJ').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:=StrToFloat(Converte2(EdtLimiteCredito.Text));
          ParamByName('POBSERVACOES').Value := MemoObservacoes.Text;
        CmdCadClientes.Prepared:=True;
        CmdCadClientes.Execute;
        CmdCadClientes.Prepared:=False;
      end;
    FrmPrincipal.ConexaoBd.CommitTrans;
    LimpaCampos;
    DesabilitarEdit;
    DesabilitarMascara;
    DesabilitarMemo;
  EXCEPT
    FrmPrincipal.ConexaoBd.RollbackTrans;
    Mess(FrmCadClientes.Handle,'Falha na Gravação...',mb_iconinformation or mb_ok);
  END;
  BtnPesquisar.Enabled := true;
  BtnIncluir.Enabled := true;
  BtnSair.Enabled := true;
  BtnAlterar.Enabled:=false;
  BtnGravar.Enabled:=false;
  BtnCancelar.Enabled:=false;
end;
Bruno Henrique

Bruno Henrique

Responder

Posts

24/02/2015

Bruno Henrique

Uppp
Responder

Gostei + 0

15/06/2015

Felipe Tomm

Estou passando pelo mesmo problema Bruno, porém, não é toda vez que ocorre.

Conseguiu alguma solução?
Responder

Gostei + 0

15/06/2015

Ricardo Araujo

Qual banco de dados esta usando, pode post o Erro?
Responder

Gostei + 0

15/06/2015

Felipe Tomm

Boa noite barreto. No meu caso utilizo Oracle, mais precisamente 11g com Delphi 7.
Eis o erro que retorna: O aplicativo está utilizando um valor incorreto para a operação atual.

Já realizei alguns debugs, mas não consegui encontrar o momento do erro.

Para deixar mais a par da aplicação, ela realiza a importação dos XML das NFe. Esse erro acontece somente com alguns xml, e quando acontece, o simples fato de fechar a aplicação e mandar importar o xml, funciona normalmente.

Portanto, esse erro é temporário. Não consegui identificar um padrão para ele.

Alguma sugestão? Obrigado..
Responder

Gostei + 0

16/06/2015

Renato Rubinho

Bom dia,

Por segurança, tente atribuir o tipo de dado no campo e passar no formato esperado pelo banco.

// inteiro
          ParamByName('PCODIGO').AsInteger := StrToInt(EdtCodigo.Text);

// Data - mais provavel de o problema estar aqui
          ParamByName('PDATACADASTRO').AsDateTime :=  StrToDateTime(MskDataCadastro.Text + ' 00:00:00');
Responder

Gostei + 0

16/06/2015

Felipe Tomm

Boa tarde.

Rubinho, voce tem alguma ideia do meu problema?

Agora pela tarde verifiquei todas minhas variáveis com os campos das tabelas, não teria nenhum problema em relação ao tipo de dados.

Tenho duas coisas que acredito ser:
->Algum problema de cache ou buffer em que a aplicação se perde;
->Erro lógico. Apesar de já ter verificado, vou verificar mais a fundo em busca de algum erro.

Como sou um tanto leigo ainda em delphi, tenho uma dúvida quanto a utilização das query. Em vários posts vejo alguns dizendo que dependendo do teu select, o correto é usar open, em outros casos ExecSQL. Enfim, qual a sequencia mais indicada para insert? Close -> Prepared:= true -> ExecSQL.

Obrigado..
Responder

Gostei + 0

17/06/2015

Renato Rubinho

Boa tarde,

Nunca usei ADOCommand, mas não vejo porque usar o QueryCadClientes junto.

Dá uma olhada nesse Link que tem um exemplo

Teoricamente é algo pareceido com o abaixo para funcionar.

 if f_operacao='I' then
          begin
// tira            QueryCadClientes.Close;
//adiciona essas 2 linhas
            CmdCadClientes.Close;
            CmdCadClientes.Parameters.Clear;


            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 )';
  
// adiciona essa linha
CmdCadClientes.ParamCheck:=False;
// tira essa linha           QueryCadClientes.Open; 
          end
Responder

Gostei + 0

17/06/2015

Ricardo Araujo

Acho que pode ser quando você realizar varias importação de XML no período no dia, acho que esta acumula a instancia na memoria do micro e começa a dar erro, tem que verifica que esta criando o Objecto e destruindo depois de fazer a importação.
Depois que você fecha aplicação e entrar novamente o ponteiro que estava na memoria foi limpa.
Responder

Gostei + 0

18/06/2015

Felipe Tomm

Boa tarde Barreto.

Correto! Estou verificando toda a aplicação e ajustando algumas partes do código.

Até quanto a questao da memória, encontrei uma procedure bem bacana, que limpa a memória utilizada pela aplicação a hora que voce chamar ela.

Caso alguem ache interessante, segue abaixo:
procedure Tfrm_danfe.TrimAppMemorySize;
var
  MainHandle : THandle;
begin
  try
    MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
    SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
    CloseHandle(MainHandle) ;
  except
  end;
  Application.ProcessMessages;
end;


De momento, muito obrigado pelo teu retorno. Estarei postando em breve algum resultado.
Responder

Gostei + 0

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

Aceitar