Lazrus UTF-8 baza danych WIN1250

Odpowiedz Nowy wątek
2019-03-09 10:46
0

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 ?

Skoro potrzebujesz rozwiązania dla Lazarusa, to po co dodałeś tag delphi? :| - furious programming 2019-03-09 16:45

Pozostało 580 znaków

2019-03-09 11:41
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';

pozdrawiam
paweld

Pozostało 580 znaków

2019-03-09 13:57
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, 2019-03-09 14:15
do łączenia się z bazą danych? - Paweł Dmitruk 2019-03-09 14:08
do łączenia używam TIBConnection - amprogramming 2019-03-09 16:32

Pozostało 580 znaków

2019-03-09 16:31
0

do łączenia używam TIBConnection

Pozostało 580 znaków

2019-03-10 08:15

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:[email protected];
      DataSet.Fields[i].OnSetText:[email protected];
    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);

pozdrawiam
paweld
Dzięki ... właśnie brakowało mi CP1250ToUTF8() z LConvEncoding - amprogramming 2019-03-10 11:30

Pozostało 580 znaków

2019-03-10 09:26
2

Pamiętajcie, tylko, że jeżeli w aplikacji UTF8 wprowadzę znaki z poza tablicy WIN1250 - to zapewne nastąpi utrata danych.

Pozostało 580 znaków

2019-03-23 20:08
0

http://www.destructor.de/firebird/charsets.htm i poczytaj od Specifying the client character set a nie wymyślacie jakieś potworki.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
edytowany 1x, ostatnio: abrakadaber, 2019-03-23 20:09

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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