* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Native-формат данных
31 марта 2009
Приведу обещанное описание Native-формата данных: • Данные для поля (каждому полю соответствует экземпляр потомка TField), имеющего DataType=ftInteger или ftLargeint, в Native-формате представлены просто в виде числа типа longint (или, что то же самое, Integer); данные для ftSmallint – числом типа Smallint, ftWord – типа Word. • Для полей с DataType=ftString данные хранятся в виде последовательности символов, завершающейся #0 (символом с кодом 0); длина последовательности вместе с #0 не должна превышать значение_поля_Size + 1. Если поле Transliterate данного экземпляра TStringField равно True, то потомок TDataSet должен предоставить метод Translate для преобразования данных из кодировки символов, используемой в конкретном наборе данных, в кодировку ANSI (и обратно). В том виде, как он реализован в TDataSet, метод Translate просто возвращает исходную строку.
• Для полей с DataType=ftWideString данные хранятся в формате WideString. • Для полей ftFloat и ftCurrency – в виде числа типа double. • Для полей ftBoolean – в виде WordBool. • Для полей ftDateTime, ftDate и ftTime – в виде TDateTime. • Для полей с DataType=ftTimeStamp – в виде TSQLTimeStamp (модуль SqlTimSt). • Для полей ftBytes и ftVarBytes – в виде последовательности байтов. • Для полей ftBCD и ftFMTBCD – в виде TBcd (модуль FMTBcd). • Для полей ftBLOB, ftMemo, ftGraphic данные так же, как и для ftBytes, хранятся в виде последовательности байтов; потомок TDataSet обязан предоставить метод CreateBlobStream для создания объекта-потомка TStream, обеспечивающего доступ к данным. • Для полей ftReference – в виде массива байтов. • Для полей ftVariant – в любом виде, совместимом с одним из представлений данных в Variant (см. описание Variant в справочной системе Delphi; подробное описание доступно в MSDN (ключевые слова, например, – “VARIANT and VARIANTARG”). • Для полей ftInterface, ftIDispatch – в виде указателя на интерфейс. • Для полей ftGuid – в виде строки, которая может быть расшифрована вызовом StringToGuid. • Для полей ftADT и ftArray – определяются типами содержащихся в них полей (каждое поле читается отдельно). • Для полей ftDataSet – насколько я понял, формат хранимых данных не имеет значения; потомок TDataSet обязан предоставить метод CreateNestedDataset для создания экземпляра нужного потомка TDataSet на основе содержащейся в данном поле информации.