B
blackswanny
имеется MS SQL 2000, имеется приложение, которое используется некую библиотеку DLL, доставшуюся мне "в наследство" от предыдущего разработчика. В этой библиотеке есть класс Connector, возвращающий некий класс TRecordset при выполнении текстового запроса. Всё, что я могу, это передавать строку-SQL запрос и получать в ответ TRecordset, в которой к полям можно обращаться подобно обычным объектам ADO, т.е. есть такие методы для получения данных
function FieldValue(const Index: integer): Variant;
function Fields(const Index: integer): Variant;
function FieldByName(const FieldName: string): Variant;
function FindField(const FieldName: string): Variant;
function Field(const Index: integer): Variant; overload;
function Field(const FieldName: string): Variant; overload;
function Value(const Index: integer): Variant; overload;
function Value(const FieldName: string): Variant; overload;
function FieldIndex(const FieldName: string): integer;
function FieldExists(const FieldName: string): boolean;
я всё это время пользовался Value(const FieldName: string), обращаясь по имени к полю. Появилась задача чтения и записи данных в базу данных большого размера. Так как я могу составлять только строку запроса, без возможности передавать туда параметры типа BLOBField и т.д., я сделал запись через составление большой строки запроса, основную часть которой составляет BLOB-строка данных, теперь возникает проблема чтения этой BLOB-строки (в поле Res), например, такой способ не работает
TBlobStream.Create(( TRecordset.FieldByName('Res')) as TBlobField,bmRead);
Есть еще метод FieldAddress(const Name: ShortString): Pointer, который берется аж из стандартного System , достался от TObject.
свой Variant я никак не могу привести к типам из ADO, мне подойдет любой вариант, даже прямое обращение к памяти, есть варианты?
function FieldValue(const Index: integer): Variant;
function Fields(const Index: integer): Variant;
function FieldByName(const FieldName: string): Variant;
function FindField(const FieldName: string): Variant;
function Field(const Index: integer): Variant; overload;
function Field(const FieldName: string): Variant; overload;
function Value(const Index: integer): Variant; overload;
function Value(const FieldName: string): Variant; overload;
function FieldIndex(const FieldName: string): integer;
function FieldExists(const FieldName: string): boolean;
я всё это время пользовался Value(const FieldName: string), обращаясь по имени к полю. Появилась задача чтения и записи данных в базу данных большого размера. Так как я могу составлять только строку запроса, без возможности передавать туда параметры типа BLOBField и т.д., я сделал запись через составление большой строки запроса, основную часть которой составляет BLOB-строка данных, теперь возникает проблема чтения этой BLOB-строки (в поле Res), например, такой способ не работает
TBlobStream.Create(( TRecordset.FieldByName('Res')) as TBlobField,bmRead);
Есть еще метод FieldAddress(const Name: ShortString): Pointer, который берется аж из стандартного System , достался от TObject.
свой Variant я никак не могу привести к типам из ADO, мне подойдет любой вариант, даже прямое обращение к памяти, есть варианты?