Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.07;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
15-1261527698
KilkennyCat
2009-12-23 03:21
2010.03.07
VBA и application.processmessage


11-1213003972
Kent
2008-06-09 13:32
2010.03.07
Как сохранить данные в dfm


2-1262510778
VertUS
2010-01-03 12:26
2010.03.07
из Memo2 в Memo1


15-1261101984
Kerk
2009-12-18 05:06
2010.03.07
«Лучший свободный проект России»


2-1261834445
Токи
2009-12-26 16:34
2010.03.07
Проблема с БД на парадоксе