Zeos - problem z kodowaniem

0

Witam. mam taki problem . mam serwer postgresql 8.3 na slacku 12. Serwer jest z localem pl_pl.iso8859-2 -e Latin2. Mam baze danych z kodowaniem latin2.

Pisze aplikacje w delphi która się łączy z bazą poprzez komponent Zeos Access. Problem polega na tym ze jak dodaje rekord z polskimi znakami do bazy to aplikacja widzi dobrze swoj rekord a w phppgadminie już są krzaki. Dodając rekord z poziomu phppgadmina to php widzi dobrze rekord a aplikacja ma krzaki. Dobrze wyświetla tylko ółć. problem tkwi na pewno w delphim.

Dodatkowo powiem ze ustawianie codepage na latin2 w polaczeniu->properties nie daje zadnego efektu.
Ustawienie client encoding na serwie na latin2 takze nic nie daje

0

utf8-general-ci sproboj wszystko na to ustawic..

0

Zaraz po połączeniu z bazą wyśli zapytanie:

SET Names latin2

a pozniej przed zapisem do bazy musisz pozmieniac polskie znaki:

function PoskieZnaki(Text: String): String;
begin
Text := StringReplace(Text, 'ą',      '±', [rfReplaceAll]);
Text := StringReplace(Text, 'Ą',      'ˇ', [rfReplaceAll]);
Text := StringReplace(Text, 'ź',      'Ľ', [rfReplaceAll]);
Text := StringReplace(Text, 'Ź',      '¬', [rfReplaceAll]);
Text := StringReplace(Text, 'ś',      '¶', [rfReplaceAll]);
Text := StringReplace(Text, 'Ś',      '¦', [rfReplaceAll]);
Text := StringReplace(Text, '\',     '\\', [RfReplaceAll]);
Text := StringReplace(Text, '"',     '\"', [RfReplaceAll]);
Text := StringReplace(Text, '''',    '\''',[RfReplaceAll]);

Result := Text;
end;
0

działa:) ale teraz problem jak selectem pobieram dane z bazy to mam krzaki. da rady jakos zeby przy select robił ta funckej polskie znaki?

0

jak wykonasz zapytanie SELECT i bedziesz i pobierał dane z DataSet'a to musisz zrobić funkcję odwrotną do tej co ci podałem czyli zamieniać krzaczki na polskie znaki

function PoskieZnaki2(Text: String): String;
begin
Text := StringReplace(Text, '±',      'ą', [rfReplaceAll]);
Text := StringReplace(Text, 'ˇ',      'Ą', [rfReplaceAll]);
Text := StringReplace(Text, 'Ľ',      'ź', [rfReplaceAll]);
Text := StringReplace(Text, '¬',      'Ź', [rfReplaceAll]);
Text := StringReplace(Text, '¶',      'ś', [rfReplaceAll]);
Text := StringReplace(Text, '¦',      'Ś', [rfReplaceAll]);
Text := StringReplace(Text, '\\',     '\', [RfReplaceAll]);
Text := StringReplace(Text, '\"',     '"', [RfReplaceAll]);
Text := StringReplace(Text, '\''',    '''',[RfReplaceAll]);

Result := Text;
end;

i przy pobiertaniu danych dajesz np.

Edit1.Text := PolskieZnaki2(ZQuery1.FieldByName('nazwa_pola_w_bazie').AsString);
0

Podana wyżej metoda jest ciut skomplikowana i mało przyjazna ;)

Wystarczy w Properties ZConnection wstawić: codepage=WIN1250 . PgSQL zajmie się konwersją automatycznie.

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