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 ?
0
0
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';
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 :(
0
do łączenia używam TIBConnection
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);
2
Pamiętajcie, tylko, że jeżeli w aplikacji UTF8 wprowadzę znaki z poza tablicy WIN1250 - to zapewne nastąpi utrata danych.
0
http://www.destructor.de/firebird/charsets.htm i poczytaj od Specifying the client character set
a nie wymyślacie jakieś potworki.