Fórum Acento no MySQL 5.1 (Delphi 2010 + dbExpress + Windows Xp) #15333
06/02/2010
Amigos,
Estou a dois dias pelejando pra resolver um problema. Ja pesquisei mas ta complicado...
O problema é a centuação de palavras no MySQL 5.1 utilizando DBExpress e Delphi 2010 no Windows XP SP3.
Se eu utilizar o navicat 8 com os campos configurados em utf8/utf8_general_ci ou latin1/latin1_swedish_ci, consigo colocar acentos e salvar sem nenhum problema. Consigo até buscar esses acentos na minha aplicação delphi com um select * from table.
O problema é que se eu atualizo ou insiro um registro via aplicação (update ou insert) onde o texto contenha acentos, o banco de dados recebe uns caracteres nada haver. Tipo assim:
insert table set nome = 'José' where codigo = 1
depois de executar, se for relizado um select nome from table where codigo = 1 eu tenho isso:
José
e isso ocorre para todos os acentos e inclusive o ç (cedilha).
Já não sei mais o que fazer pois pesquisei em diversos sites e tudo que entendi que podia ser feito não deu certo.
Alguem sabe como resolver esse problema? Seria alguma configuração de caracter na aplicação delphi?
Obrigado.
Posts
Cara da uma olhada como foi criado a codificação do banco tente criar como UTF8 ou Latin1 isso é esquema de unicode.
esqueci de mensionar tambem. no postgres acimade 8.1 tem tambem um padrao do Brasil que é o WIN1252 pode ser que funcione.
07/02/2010
Ronaldo Araujo
Leandro,
Obrigado pela força mas essas duas tentantivas eu ja havia feito. No navicat eu consigo colocar acento normalmente utilizando utf8 ou latin1. Ja alterei a tabela de caracteres para 1252 mas tambem não deu certo.
Eu acredito que o problema esta em alguma configuração dos componentes do dbexpress no delphi. O problema é o que?!
Continuo ainda com o problema. Se alguem tiver alguma sugestão...
Obrigado
08/02/2010
Ronaldo Araujo
Depois de muita peleja e muita pesquisa, encontrei uma solução para o problema. não sei se é a melhor opção mas pelo menos funcionou corretamente.
Deixo aqui a solução caso alguem passe pelo mesmo problema. Feliz aquele que transfere o que sabe e aprende com o que ensina.
Para resolver o problema, insira a seguinte função na sua aplicação:
function StrToPChar(const Str: string): PChar;
{Converte String em Pchar}
type
TRingIndex = 0..7;
var
Ring: array[TRingIndex] of PChar;
RingIndex: TRingIndex;
Ptr: PChar;
begin
Ptr := @Str[Length(Str)];
Inc(Ptr);
if Ptr^ = #0 then
begin
Result := @Str[1];
end
else
begin
Result := StrAlloc(Length(Str)+1);
RingIndex := (RingIndex + 1) mod (High(TRingIndex) + 1);
StrPCopy(Result,Str);
StrDispose(Ring[RingIndex]);
Ring[RingIndex]:= Result;
end;
end;
Depois, antes de executar a SQL na sua query vc faz o seguinte:
TextoSQL := 'Update table set nome = 'josé' where codigo = 1';
SQLQuery.SQL.Text := StrToPChar(TextoSQL);
SQLQuery.ExecSQL;
Pronto, o comando irá gravar José com acento correto na base de dados do MySQL.
Forte abraço a todos e espero que isso ajude quem precisar...
08/02/2010
Emerson Nascimento
se a solução é passar a string como PChar, porque não sar a função PChar() do Delphi?
TextoSQL := 'Update table set nome = 'josé' where codigo = 1';
SQLQuery.SQL.Text := PChar(TextoSQL);
SQLQuery.ExecSQL;