TAK, zrozumiałeś to poprawnie. To jest VCL i jego dokumentacja, które są zepsute. Twoje zamieszanie ma sens!
W 2009+ realizacji Delphi, trzeba użyć AsString
nieruchomość za AnsiString
i AsWideString
dla string=UnicodeString
.
W rzeczywistości, właściwości As*String
są zdefiniowane jako takie:
property AsString: string read GetAsString write SetAsString;
property AsWideString: UnicodeString read GetAsWideString write SetAsWideString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
Jak na ziemi, być może będziemy mogli dowiedzieć się, że AsString
zwraca AnsiString
? To po prostu nie ma sensu, w porównaniu do reszty VCL/RTL.
Implementacja, która używa klasy TStringField
dla AnsiString
i TWideStringField
dla string=UnicodeString
jest zepsuta.
Ponadto documentation is also broken:
Data.DB.TField.AsString
reprezentuje wartość pola jako łańcuch (Delphi) lub AnsiString (C++).
nie stanowią string
w Delphi, ale AnsiString
! Fakt, że nieruchomość posługuje się zwykłym typem string=UnicodeString
, jest całkowicie zwodniczy.
Z punktu widzenia bazy danych, do sterownika DB należy obsługa Unicode lub praca z określonym zestawem znaków. Ale z punktu widzenia VCL, w Delphi 2009+ powinieneś wiedzieć tylko o typie string
i mieć pewność, że użycie AsString: String
będzie gotowe do obsługi Unicode.
+1 Ponieważ takie zachowanie to IMHO, błędna implementacja VCL. Jest to błędne nazewnictwo IMHO, * niezgodne z resztą VCL/RTL * i źródłem wielu nieporozumień/nieporozumień. Twoje pytanie ma sens. –