W wątku Konwersja bazy na UTF-8 pisałem o konwersji bazy na potrzeby Lazarusa z WIN1250 do UTF-8.
Może zrobić by to od strony aplikacji tzn. zostawić bazę na kodowaniu WIN1250 a samą obsługę bazy napisać pod WIN1250.
Proszę o opinie oraz jak to fizycznie zrobić w środowisku Lazarus ?
- Rejestracja:prawie 10 lat
- Ostatnio:6 miesięcy
- Postów:64
0
- Rejestracja:prawie 10 lat
- Ostatnio:6 miesięcy
- Postów:64
0
Paweł Dmitruk napisał(a):
jeżeli korzystasz z komponentów ZEOS, to we właściwościach połączenia ustawiasz:
ZConnection1.AutoEncodeStrings:=True; ZConnection1.ControlsCodePage:=cCP_UTF8; ZConnection1.ClientCodepage:='WIN1250';
Niestety korzystam ze standardowej karty Lazarusa SQLDB TIBConnection :(
edytowany 1x, ostatnio: amprogramming
do łączenia się z bazą danych?
do łączenia używam TIBConnection
- Rejestracja:prawie 10 lat
- Ostatnio:6 miesięcy
- Postów:64
0
do łączenia używam TIBConnection
- Rejestracja:ponad 22 lata
- Ostatnio:około 13 godzin
1
dodajesz, np. takie procedury:
uses db, LConvEncoding;
procedure TForm1.exec(DataSet: TSQLQuery);
var
i: integer;
begin
for i:=0 to DataSet.Params.Count-1 do
begin
if DataSet.Params[i].DataType=ftString then
DataSet.Params[i].AsString:=UTF8ToCP1250(DataSet.Params[i].AsString);
end;
DataSet.ExecSQL;
end;
procedure TForm1.open(DataSet: TSQLQuery);
var
i: integer;
begin
for i:=0 to DataSet.Params.Count-1 do
begin
if DataSet.Params[i].DataType=ftString then
DataSet.Params[i].AsString:=UTF8ToCP1250(dataset.Params[i].AsString);
end;
DataSet.Open;
for i:=0 to DataSet.Fields.Count-1 do
begin
if DataSet.Fields[i].DataType=ftString then
begin
DataSet.Fields[i].OnGetText:=@GetText;
DataSet.Fields[i].OnSetText:=@SetText;
end;
end;
end;
procedure TForm1.GetText(Sender: TField; var aText: string; DisplayText: Boolean);
begin
aText:=CP1250ToUTF8(Sender.AsString);
end;
procedure TForm1.SetText(Sender: TField; const aText: string);
begin
Sender.AsString:=UTF8ToCP1250(aText);
end;
a później w kodzie zamiast SQLQuery1.Open;
lub SQLQuery1.Active:=True;
używasz:
open(SQLQuery1);
zamiast SQLQuery.ExecSQL;
używasz:
exec(SQLQuery1);
Dzięki ... właśnie brakowało mi CP1250ToUTF8() z LConvEncoding

- Rejestracja:ponad 6 lat
- Ostatnio:prawie 5 lat
- Postów:666
2
Pamiętajcie, tylko, że jeżeli w aplikacji UTF8 wprowadzę znaki z poza tablicy WIN1250 - to zapewne nastąpi utrata danych.

- Rejestracja:ponad 12 lat
- Ostatnio:7 miesięcy
- Postów:6610
0
http://www.destructor.de/firebird/charsets.htm i poczytaj od Specifying the client character set
a nie wymyślacie jakieś potworki.
edytowany 1x, ostatnio: abrakadaber
delphi
? :|