Вопрос у меня такой, в Access 2007 добавили такой тип полей -Attachment. В него можно добавлять файлы, Ассеss их сжимает и запысывает в базу, таким образом в одном поле одной записи может быть до 2 гиг разных файлов. А задача встала такая, что нада из делфи обратиться к этой базе и вытащить оттуда этот список файлов, с возможностью их сохранить и показать. Я обращаюсь к полю через DAO импортировав либу ассеса:
procedure TForm1.Button1Click(Sender: TObject);
var
DAO: _DBEngine;
db: Database;
MyTable: DAO_TLB.Recordset2;
ClassID: TGUID;
V120: string;
oldPass, newPass: string;
DatabaseName : string;
TableName : string;
filename : string;
Fields : DAO_TLB.Fields;
attachments :DAO_TLB.Recordset2;
atField : DAO_TLB.Field2;
Table1 : Variant;
begin
if OpenDialog1.Execute then
databaseName := OpenDialog1.FileName;
TableName := 'Table1';
V120 := 'DAO.DBEngine.120';
SetCurrentDir(ExtractFileDir(Application.ExeName));
try
try
ClassID := ProgIDToClassID(v120);
except
end;
DAO := CreateComObject(ClassID) as _DBEngine;
db := DAO.OpenDatabase(DatabaseName, true, false, '');
MyTable := (db.OpenTable(TableName,EmptyParam) as Recordset2);
MyTable.MoveFirst;
attachments :=Recordset2(TVarData(MyTable.Fields.Item[1].Value).VUnknown);
except
on E: Exception do
begin
ShowMessage(e.message);
end;
end;
end;
к другим полям я доступ получаю, а вот с аттачмент загвоздка. если напрямую обращаться к полю, то я получаю результат типа OleVariant, мне же нужен тип Recordset2. Вопрос как сконвертить OleVariant to Recordset2. я пробовал сделать так: attachments :=Recordset2(TVarData(MyTable.Fields.Item
[1].Value).VUnknown); но выдает ошибку доступа к памяти.