Erro de acentuação no Insert Mysql (MariaDB)

MySQL

Delphi

Banco de Dados

30/04/2022

Prezado(a)s, Bom dia.

Estou com a seguinte situação:

Faço uma busca em um banco de dados access.
Pego o resultado deste select e gravo em um banco de dados mysql remoto.
Abaixo, vou colocar a rotina que faço.
while not ADOQuery1.Eof do
              begin
               //Showmessage(''Passou no While. O Código é:  '' + FieldByName(''Código'').AsString + sLineBreak + ''E o Campo é o '' + FieldByName(''campo'').AsString);

                SQLCampo.Active := False;  // Fecho a TSQLQuery
                SQLCampo.SQL.Clear;

                SQLCampo.SQL.Add(''INSERT INTO campos (id, campo) VALUES ( :ValorID, :ValorCampo )'');
                SQLCampo.ParamByName(''ValorID'').AsInteger := FieldByName(''Código'').AsInteger;
                SQLCampo.ParamByName(''ValorCampo '').AsString := FieldByName(''campo'').AsString;
                SQLCampo.ExecSQL;

                AdoQuery1.Next;

              end;


O problema esta na acentuação do Parametro ValorCampo.
Se eu descomento o Showmessage pra debugar, ele printa certinho, como por exemplo: Passou no While. O código é 70 E o Campo é o RIO DO AÇO.
Já no insert, ele insere o id como 70 e o campo como RIO DO AÇO

Meu conhecimento em Delphi é mínimo, mas já tenteei de várias formas isolar o problema. Entrei diretamente no Mysql e inseri manualmente outro registro como RIO DO AÇO e gravou normal, ou seja, não é o collation ou charset do Mysql.
Dando o Showmessage antes do insert também funciona, então acredito que seja algo relacionado ao ParamByName.

Como posso resolver isso?
Alguém pode me ajudar?
Oswaldo

Oswaldo

Curtidas 0

Respostas

Paulo

Paulo

30/04/2022

Pode não ser o melhor jeito. Mas funciona.

while not ADOQuery1.Eof do
  begin

    with SQLCampo do
    begin
      Active  :=  False;
      SQL.Clear;
      SQL.Add('INSERT INTO campos (id, campo) VALUES (' + id + ', ' + QuotedStr(ValorCampo) + ')');
      ExecSQL;
    end;

    ADOQuery1.Next;

  end;
GOSTEI 0
POSTAR