Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Access violation at address; Arithmetic exception... Como


coisvaes

Pergunta

Olá, Pessoal,

Estou desenvolvendo uma aplicação com Delphi 7, ClientDataSet e DBExpress com Firebird 1.5 e, de um momento para o outro, começaram a aparecer as seguintes mensagens de erro:

1) Project Teste.exe raised exception class EDatabaseError with message 'arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets '. Process stoped. - Esta mensagem aparece quando digíto alguma palavra com acento, mesmo estando utilizando WIN1252 na criação do banco de dados e no SQLConnection. Na tentativa de isolar o problema, fiz uma nova aplicação utilizando o mesmo banco de dados e o erro não ocorreu.

2) Nesta mesma aplicação, incialmente eu utilizava em SQLQuery.SQL=SELECT * FROM <TABELA>. Como esta tabela possui muitos registros, mudei para SELECT * FROM <TABELA> WHERE NUMERO = :NUMERO, ajustei SQLQuery.PARAMS e, no evento OnCreate do formulario fiz assim:

procedure TfrmTeste.FormCreate(Sender: TObject);

begin

dmTeste := TdmTeste.Create(Self);

dmTeste.ClientDataSetTeste.FetchParams;

dmTeste.ClientDataSetTeste.Params.ParamByName('NUMERO').Value := NULL;

{

ou dmTeste.SQLQuery.Params.ParamByName('NUMERO').Value := NULL;

}

dmTeste.ClientDataSetTeste.Open;

end;

Mas, depois desta alteração, aparece a mensagem de erro ‘(…) raised exception class EAccessViolation with message

'Access violation at address 004023D2 in module… ' em:

dmTeste.ClientDataSetTeste.Open;

Fiz o mesmo procedimento em outra aplicação e, também não deu erro!

Alguém sabe como resolver isso sem que seja necessário refazer a aplicação e, principalmente, como evitar que estes erros aconteçam?

Desde já, muitíssimo obrigado.

Francisco Rodrigues

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
dmTeste.ClientDataSetTeste.FetchParams;

dmTeste.ClientDataSetTeste.Params.ParamByName('NUMERO').Value := NULL;

{

ou dmTeste.SQLQuery.Params.ParamByName('NUMERO').Value := NULL;

}

dmTeste.ClientDataSetTeste.Open;

end;

Mas, depois desta alteração, aparece a mensagem de erro ‘(…) raised exception class EAccessViolation with message

'Access violation at address 004023D2 in module… ':

Claro que vai dar o erro, pois você está passando um valor nulo para um campo que deve ser integer e primarykey, tente passar um número qualquer que você tenha em seu banco de dados e teste!

dmTeste.ClientDataSetTeste.FetchParams;
  dmTeste.ClientDataSetTeste.Params.ParamByName('NUMERO').Value := 1;
{
 ou   dmTeste.SQLQuery.Params.ParamByName('NUMERO').Value := 1;
}

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, amigo Douglas Soares,

Realmente, atribuindo um valor válido ao parametro, não dá erro. Mas, a idéia é, ao criar o form, alimentar o valor deste parâmetro com NULL. Desta forma o ClientDataSet será aberto e nenhum registro será trafegado, já que não existem registros com chave nula. Assim ele estará vazio, pronto para receber um novo registro a ser cadastrado. Testei isto em outra aplicação, utilizando o mesmo banco de dados, conforme abaixo, e não deu erro.

A Query foi parametrizada assim:

SELECT

CODIGO,

NOME

FROM

CLIENTE

WHERE

CODIGO = :CODIGO

Ajustei o parâmetro ‘CODIGO’ assim:

DataType: ftInteger

ParamType: ptImput

E, no OnCreate do formulário fiz assim:

DM := TDM.Create(Self);

DM.ClientDataSet.FetchParams;

DM.ClientDataSet.Params.ParamByName(‘CODIGO’).Value := NULL;

DM.ClientDataSet.Open; {Aqui dá erro em uma aplicação e em outra, não}

O que me deixa intrigado é o fato de um conceito funcionar normalmente em uma aplicação e, em outra, não. De qualquer forma, sua ajuda foi de grande importância. Muitíssimo obrigado.

E, quanto à acentuação, alguma dica?

Francisco Rodrigues

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...