Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
ВнизAccess 2007 vs Delphi 2007 Найти похожие ветки
← →
Shamansky (2009-12-23 15:52) [0]Вопрос у меня такой, в 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;
//_ComServer := IMyInterface(TVarData(_MyObject).VUnknown);
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); но выдает ошибку доступа к памяти.
← →
Виталий Панасенко (2009-12-23 17:15) [1]http://www.sql.ru/Forum/actualthread.aspx?tid=594564
http://www.google.com.ua/search?hl=ru&client=firefox&rls=org.mozilla%3Aru%3Aofficial&hs=32m&q=Access2007%2BAttachment&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&meta=lr%3Dlang_ru&aq=f&oq=
← →
Shamansky (2009-12-24 14:38) [2]Немного прояснилась ситуация, вылетает ошибка доступа к памяти, когда просто делаю так:
var
att: OleVariant;
att :=MyTable.Fields.Item[1].Value; - вот здесь вылетает ошибка, вопрос, я что не могу просто здесь выполнить присваивание, или надо хитро как-то делать?
Как вытащить список имен файлов я знаю, вопрос такой, если я сделаю запрос TADOQuery (SELECT files.filedata, files.filename, files.filetyp), который вернет FileData, FileName, FileType. Вопрос такой, какой тип данных мне выставить для FileData? Blob или какой?
← →
Anatoly Podgoretsky © (2009-12-24 15:33) [3]> Shamansky (24.12.2009 14:38:02) [2]
Летит и крылышками машет.
← →
Shamansky (2009-12-24 15:44) [4]
> Летит и крылышками машет.
А по существу есть что подсказать?
← →
Anatoly Podgoretsky © (2009-12-24 16:00) [5]> Shamansky (24.12.2009 15:44:04) [4]
Так будь более конкретен, а то у тебя что то летает.
← →
Shamansky (2009-12-24 16:26) [6]Конкретнее так: каким образом при доступе к полю базы данных Access 2007 типа attachment конвертировать возвращаеме значение поля
MyTable.Fields.Item[1].Value
типа OleVariant в тип Recordset2?
← →
Shamansky (2009-12-24 22:38) [7]вот такая ошибка:
Access violation at address 3468CC47 in module ACEDAO.DLL
← →
Shamansky (2009-12-28 14:03) [8]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c