Acentos no Firebird - Erro de gravação
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.
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
Curtidas 0
Respostas
Wesley Yamazack
27/05/2010
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
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
GOSTEI 0
Francisco Rodrigues
27/05/2010
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.
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.
GOSTEI 0
Wesley Yamazack
27/05/2010
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
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
GOSTEI 0
Francisco Rodrigues
27/05/2010
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
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
GOSTEI 0
Wesley Yamazack
27/05/2010
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
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
GOSTEI 0
Francisco Rodrigues
27/05/2010
Olá, Wesley.
Compilei o programa no Delphi 2007 e os erros foram corrigidos.
Um abraço.
Francisco Rodrigues
Compilei o programa no Delphi 2007 e os erros foram corrigidos.
Um abraço.
Francisco Rodrigues
GOSTEI 0
Wesley Yamazack
27/05/2010
Blz amigo.
Um abraço, até o próximo.
Wesley Y
Um abraço, até o próximo.
Wesley Y
GOSTEI 0