EVET, doğru bir şekilde anladınız. Bu, numaralı kırık olan VCL ve belgelerinin numarasıdır. Karışıklıklarınız mükemmel bir anlam ifade ediyor! Delphi 2009+ uygulamada
, sen string=UnicodeString
için AnsiString
ve AsWideString
için AsString
özelliğini kullanmak zorunda. Aslında , As*String
özellikler gibi tanımlanmıştır: yeryüzünde biz AsString
bir AnsiString
döndüren öğrenmek mümkün olabilir nasıl property AsString: string read GetAsString write SetAsString;
property AsWideString: UnicodeString read GetAsWideString write SetAsWideString;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
? VCL/RTL'nin geri kalanıyla karşılaştırıldığında, hiç de mantıklı değil.
ve TWideStringField
string=UnicodeString
için TStringField
sınıfını kullanan uygulama bozuk. Ayrıca
, documentation is also broken:
Data.DB.TField.AsString
bir dizi (Delphi) veya bir AnsiString (C++) olarak alanın değerini temsil eder.
Bu, Delphi'de string
'u temsil etmemektedir, ancak bir AnsiString
! Mülkün düz string=UnicodeString
türünü kullanması, mükemmel bir şekilde yanıltıcıdır.
Veritabanı bakış açısında, Unicode işlemek veya belirli bir karakter kümesiyle çalışmak DB sürücüsüne kalmış. Ancak VCL bakış açısından, Delphi 2009+ sürümünde sadece string
türünü bilmeniz ve AsString: String
unicode-ready kullanacağından emin olmalısınız.
+1 Bu davranış IMHO olduğundan bir VCL yanlış uygulamasıdır. IMHO yanlış bir adlandırmadır, * geri kalanı VCL/RTL * ile tutarsız ve bir sürü karışıklık/yanlış anlama kaynağı. Sorunun mükemmel anlamda. –