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

06/02/2010

0

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

Responder

Posts

06/02/2010

Leandro

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

06/02/2010

Leandro

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

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
Responder

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...  
Responder

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;

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar