Fórum Acentos no Firebird - Erro de gravação #378413

27/05/2010

0

Minha aplicação apresenta erro quando tento gravar os dados, sempre que digito uma palavra acentuada (nº, JOSÉ, José, Macapá, João, JOÃO, etc...). A mensgem de erro é:Project Teste.exe raised exception class EDatabaseError with message 'arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets '. Process stopped.Estou utilizando o Delphi 7, com Firebird 1.5 e DBExpress. Para criar o banco de dados e as tabelas, utilizei o IB Expert,  assim: Banco de Dados (Server: Local; Page Size: 1024; Charset: WIN1252; SQL Dialect: Dialect 3.) e Tabelas (create table cliente (cli_codigo integer not null, cli_nome varchar(50), primary key (cli_codigo)).
No SQLConnection, ServerCharSet = WIN1252.
O erro ''arithmetic exception, numeric overflow, or string truncation...' ocorre quando do ApplyUpdates e somente quando acentuo alguma palavra. Ajustei o MaxLenght de cada DBEdit, DBMemo, etc de acordo com tamanho de cada campo n atabela e, nos campos do tipo date  estou utilizando MaskEdit = !99/99/9999;1; no ClientDataSet.
Alguém poderia me ajudar? Obrigado.



Francisco Rodrigues

Francisco Rodrigues

Responder

Posts

27/05/2010

Wesley Yamazack

Olá amigo,

  Teria como mandar o banco de dados e uma aplicação de teste ? Pois tudo que você falou é a mesma forma que faço quando utilizo o FB, fica mais fácil analisando ok ?

Um abraço

Wesley Y
Responder

Gostei + 0

27/05/2010

Francisco Rodrigues

Oi, Amigo Wesley Y.

Eu de novo! Como vai? Como disse antes, sou iniciante, rsrs. Enviei parte da aplicação, como você pediu. Está disponível em http://video.devmedia.com.br/discovirtual/198119/TesteAplicacao/TesteAplicacao-2.rar. Um abraço, e, desde já, obrigado.


Responder

Gostei + 0

28/05/2010

Wesley Yamazack

Olá amigo,

   Vendo aqui seu sistema, no meu Firebird, funcionou sem problemas, na hora de colocar o banco de dados eu fiz exatamente como você falou, usuário senha, servidor, faça um teste, crie uma nova aplicação e um novo banco, apenas com um campo, descricao varchar(20). E teste os acentos para ver se funciona, caso não funcione vemos outra solução ok ?

Att,

Wesley Y
Responder

Gostei + 0

30/05/2010

Francisco Rodrigues

Olá, Wesley Y.
Considerando o fato de que a aplicação funcionou normalmente em seu FireBird, eu desinstalei e reinstalei o Firebird (Firebird-1.5.2.4731-Win32) em meu computador. Fiz o mesmo com o Delphi 7. Infelizmente, isto não resolveu o problema do erro Project Teste.exe raised exception class EDatabaseError with message 'arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets '. Process stoped.
Então, fiz uma nova aplicação, utilizando o mesmo banco de dados, tudo do mesmo jeito, e, neste caso, não deu erro.   Voltando a aplicação anterior, estava usando em SQLQuery1, SQL=SELECT * FROM REGNAS; Mas, a tabela pussui +- 75.000 registros e, ao mudar para SELECT * FROM REGNAS WHERE NUMERO = :NUMERO (Mudei SQLQuery1.Params[0]->DataType=ftInteger e ParamType=ptImput), deu erro no momento de abrir o ClientDataSet (dm.ClientDataSet1.Open). O erro foi ‘(…) raised exception class EAccessViolation with message 'Access violation at address 004023D2 in module…   Então, fiz uma nova aplicação aplicando o novo conceito e, não deu erro.   O problema é que não faz sentido eu refazer a aplicação cada vez que der um erro! Preciso resolver o problema na própria aplicação, que continua com os erros.
Eu devo estar fazendo alguma coisa errada em tempo de desenvolvimento. Por exemplo, manter  SQLConnection, Connected=True provoca este tipo de erro? O que você sugere que eu faça para evitar este tipo de situação?

Um abraço,   Francisco Rodrigues
Responder

Gostei + 0

31/05/2010

Wesley Yamazack

Olá amigo,
Desculpe a demora. Vamos por parte

Voltando a aplicação anterior, estava usando em SQLQuery1, SQL=SELECT * FROM REGNAS; Mas, a tabela pussui +- 75.000 registros e, ao mudar para SELECT * FROM REGNAS WHERE NUMERO = :NUMERO (Mudei SQLQuery1.Params[0]->DataType=ftInteger e ParamType=ptImput), deu erro no momento de abrir o ClientDataSet (dm.ClientDataSet1.Open). O erro foi ‘(…) raised exception class EAccessViolation with message 'Access violation at address 004023D2 in module…

Access violation, so acontece quando um objeto que não esta criado ou já foi destruído esta sendo acessado. Veja se o seu DataModule, esta criado antes de utilizar o ClientDataSet.



Quanto ao erro de funciona em uma nova aplicação e não na antiga, você pode adicionar os formulários nesta nova aplicação um de cada vez, e ir testando, mas acho que você esqueceu ou fez algo na nova aplicação que não fez na velha. Tente adicionar um form por vez, e ir testante, primeiro comece pelo datamodule, depois pelos demais.

Já tive problemas com o ClientDataSet, coisas inesplicáveis, já apaguei uma vez, e coloquei um novo, e funcionou, tente fazer a mesma coisa, de repente funciona, faça o mesmo com o seu SQLConnection. OK?

Um abraço

Wesley Y  
Responder

Gostei + 0

08/06/2010

Francisco Rodrigues

Olá, Wesley.
Compilei o programa no Delphi 2007 e os erros foram corrigidos.
Um abraço.
Francisco Rodrigues
Responder

Gostei + 0

08/06/2010

Wesley Yamazack

Blz amigo.

Um abraço, até o próximo.

Wesley Y
Responder

Gostei + 0

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

Aceitar