Witajcie,
Mam pytanie w projekcie mamy sytuację, że w tabeli oracle jest pole typu varchar2(15) i jest wartość: '0123456789 '. Nie pytajcie błagam dlaczego tak, dlaczego nie ma pola typu CHAR, skąd te spacje itd ... przyjmijcie na wiarę, że taki [CIACH!] zastałem i nie mam siły przebicia aby to zmienić.
No to dalej będzie pierd0lnik...
Sęk w tym, że komponenty bazodanowe gdy robimy selecta do tej tabeli obcinają same te białe znaki w efekcie Length(dsName.FieldByName('PoleZDB').AsString) zwraca 10 zamiast 15 mimo iż ten sam length na bazie zwraca 15.
Znaczy, te wasze super-inteligentne komponenty same robią trima i to jeszcze wychodzi na to, ze zawsze to robią.
Albo dlatego, ze ktoś je tak ustawił, albo tak robią i koniec.
To obcinanie oczywiście ma sens, ale tylko dla pól typu fixed
(ftFixedChar, ftFixedWideChar) czyli w bazie to będzie char
a nie varchar
.
Niestety nie mam możliwości sprawdzenia tego na innym delphi (pracujemy na D5) i starych komponentach firmy Comarch
Comarch robił jakieś komponenty dla Delphi?
Jakie?
Jeśli to jakoś analogiczny twór do struktury (a bardziej do obiektów programowalnych - czysta masakra...) bazy danych w ich sztandarowym ich produkcie, to faktycznie pierd0lnik...
i nie mam pojęcia skąd ten trim ...
Wyżej pisałem...
No można to zrobić jeszcze obsługując zdarzenie TField.OnGetTex
dla danego pola w TDataSet
.
mało tego niektórzy developerzy twierdzą, że to wina samego VCL.
Bzdury gadają, ponieważ w standardowym VCL nie jest to w ogóle dotykane.
Tekst jest serwowany z bazy as-is
, pod kątem białych znaków.
Pytanie do was czy spotkaliście się z takim zachowaniem np ADO lub Firedac?
FireDAC ma taką opcję:
http://docwiki.embarcadero.com/Libraries/Tokyo/en/FireDAC.Stan.Option.TFDFormatOptions.StrsTrim
Ale to nie działa dla pól typu VarChar
!
Standardowe komponenty ADO (vel dbGO) takiej opcji nie posiadało.