Acento no MySQL 5.1 (Delphi 2010 + dbExpress + Windows Xp)

Delphi

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.
Ronaldo Araujo

Ronaldo Araujo

Curtidas 0

Respostas

Leandro

Leandro

06/02/2010

Cara da uma olhada como foi criado a codificação do banco tente criar como UTF8 ou Latin1 isso é esquema de unicode. 
GOSTEI 0
Leandro

Leandro

06/02/2010

esqueci de mensionar tambem. no postgres acimade 8.1 tem tambem um padrao do Brasil que é o WIN1252 pode ser que funcione.
GOSTEI 0
Ronaldo Araujo

Ronaldo Araujo

06/02/2010

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
GOSTEI 0
Ronaldo Araujo

Ronaldo Araujo

06/02/2010

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...  
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

06/02/2010

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;

GOSTEI 0
POSTAR