Главная страница
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.014 c
15-1261527698
KilkennyCat
2009-12-23 03:21
2010.03.07
VBA и application.processmessage


1-1220526665
evgenij
2008-09-04 15:11
2010.03.07
узнать запущена моя программа или нет


2-1261572735
Shamansky
2009-12-23 15:52
2010.03.07
Access 2007 vs Delphi 2007


15-1261060246
Alkid
2009-12-17 17:30
2010.03.07
Кража импульса.


15-1261467759
zorik
2009-12-22 10:42
2010.03.07
dll в компоненте. За и против?