Search code examples
sql-serverdelphiadodelphi-6

Reading a unicode string from SQL Server with Delphi 6


I need to read a nvarchar(max) field from a SQL Server 2008 database using Delphi 6 and ADO. I can handle the unicode text just fine but it seems the ADO component is "preconverting" the string to code page before I even get to have a look at it.

I've tried accessing the field as a TBlobField but it gives me the converted version as well: I'm storing 10 bytes of data representing 5 chinese characters and BlobSize returns 5.

Could anyone suggest a way to get the raw memory from the blob field without having it converted ?


Solution

  • I found it. It turned out to be really simple: Open the dataset as if it was a normal field and the do the following:

    AQuery.FieldByName('LocalText').SetFieldType(ftWideString);
    WSBuffer := (AQuery.FieldByName('LocalText') as TWideStringField).Value;
    

    (WSBuffer is a WideString type).