Delphi XE2 + MySQL + dbExpress + polskie znaki.

0

Witam wszystkich.
Właśnie zaczynam bawić się intensywniej Delphi i takim układem jak w temacie.
Mam na zdalnym serwerze bazę MySQL z ustawionym kodowaniem UTF8 (jak wyczytałem w jednym z artykułów - polecanym):

[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_polish_ci

Z bazą generalnie nie mam problemów. Bez kłopotów edytuję jej dane (z polskimi znakami) z poziomu Toad'a - no po prostu działa.
Również z poziomu mojej aplikacji łączę się z nią przez dbExpress bez problemu i wykonuję na niej zapytania.
Niestety, polskie znaki w danych wczytywanych z bazy, w mojej aplikacji wyświetlane są jako znak zapytania "?".
Siedzę nad tym już trzeci dzień - przewaliłem mnóstwo artykułów w googlach i próbowałem różnych rzeczy opisywanych przez ludzi również i z tego forum (łącznie z funkcją utf8ansi) ... i kicha (no chyba, że nie trafiłem we właściwy wątek).
Poniżej kod mojej aplikacji:

procedure TForm1.FormShow(Sender: TObject);
var
  s : String;
begin
  SQLConn1.Connected := False;

  SQLConn1.Params.Values['HostName']    := '192.168.1.1';
  SQLConn1.Params.Values['Database']    := 'baza';
  SQLConn1.Params.Values['User_Name']   := 'root';
  SQLConn1.Params.Values['Password']    := '0o9i8u7y';
  SQLConn1.Params.Values['Server Port'] := '3306';

  SQLConn1.Connected := True;

  if SQLConn1.Connected then
    begin
      StaticText1.Caption := 'Database: Connected';

      SQLQuery1.Active := False;
      SQLQuery1.SQL.Clear;
      SQLQuery1.SQL.Add('select nazwisko from osoby');
      SQLQuery1.Active := True;

      while not SQLQuery1.Eof do
      begin
        ListBox1.Items.Add(SQLQuery1.FieldValues['nazwisko']);

        SQLQuery1.Next;
      end;

      SQLQuery1.Active := False;
      SQLQuery1.Close;
    end
  else
    begin
      StaticText1.Caption := 'Database: Disconnected';
    end;

  SQLConn1.Connected := False;
end;

To też nie działa:

ListBox1.Items.Add(Utf8ToAnsi(SQLQuery1.FieldValues['nazwisko']));

Nie mam już pomysłów. Utknąłem z tym problemem.
Pomóżcie proszę ruszyć z tym.

Może bazę inaczej skonfigurować?
Będę wdzięczny za sugestie.

Irmo

0

procedure TDM.DataBaseAfterConnect(Sender: TObject);
begin
with qX do
begin
Close;
SQL.Clear;
SQL.Text := 'set names cp1250';
Prepare;
ExecSQL;
Close;
end;
end;

0

Dzięki za odpowiedź. Nie do końca rozwiązało to mój problem, ale analiza kodu z pewnością zaowocuje w przyszłości ;)

0

Rozkminiłem to i podzielę się swoim rozwiązaniem z innymi borykającymi się z tym problemem.
W komponencie SQLConnection / Driver / ServerCharSet należy wpisać cp1250 ... i tyle (oczywiście trzeba ponownie zaktywować pozostałe komponenty połączone z SQLConnection dla efektu).
Pewnie to podstawowa podstawa, ale potrafi na początku zabrać troszkę czasu ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1