Erro Parametro[Não consigo achar a solução]
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
Código Botão Gravar
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
Curtidas 0
Respostas
Bruno Henrique
24/02/2015
Uppp
GOSTEI 0
Felipe Tomm
24/02/2015
Estou passando pelo mesmo problema Bruno, porém, não é toda vez que ocorre.
Conseguiu alguma solução?
Conseguiu alguma solução?
GOSTEI 0
Ricardo Araujo
24/02/2015
Qual banco de dados esta usando, pode post o Erro?
GOSTEI 0
Felipe Tomm
24/02/2015
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..
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..
GOSTEI 0
Renato Rubinho
24/02/2015
Bom dia,
Por segurança, tente atribuir o tipo de dado no campo e passar no formato esperado pelo banco.
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');
GOSTEI 0
Felipe Tomm
24/02/2015
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..
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..
GOSTEI 0
Renato Rubinho
24/02/2015
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.
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
GOSTEI 0
Ricardo Araujo
24/02/2015
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.
Depois que você fecha aplicação e entrar novamente o ponteiro que estava na memoria foi limpa.
GOSTEI 0
Felipe Tomm
24/02/2015
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:
De momento, muito obrigado pelo teu retorno. Estarei postando em breve algum resultado.
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.
GOSTEI 0