Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Access 2007 vs Delphi 2007 [Access 2007]


Shamansky ©   (2009-12-23 15:52:00) 

Вопрос  у меня такой, в 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); но выдает ошибку доступа к памяти.


Shamansky   (2009-12-28 14:03:00) [1]

Удалено модератором


Shamansky   (2009-12-24 22:38:00) [2]

вот такая ошибка:
Access violation at address 3468CC47 in module ACEDAO.DLL


Shamansky   (2009-12-24 16:26:00) [3]

Конкретнее так: каким образом при доступе к полю базы данных Access 2007 типа attachment конвертировать возвращаеме значение поля MyTable.Fields.Item[1].Valueтипа OleVariant в тип Recordset2?


Anatoly Podgoretsky   (2009-12-24 16:00:00) [4]

> Shamansky  (24.12.2009 15:44:04)  [4]

Так будь более конкретен, а то у тебя что то летает.


Shamansky   (2009-12-24 15:44:00) [5]


> Летит и крылышками машет.

А по существу есть что подсказать?


Anatoly Podgoretsky   (2009-12-24 15:33:00) [6]

> Shamansky  (24.12.2009 14:38:02)  [2]

Летит и крылышками машет.


Shamansky   (2009-12-24 14:38:00) [7]

Немного прояснилась ситуация, вылетает ошибка доступа к памяти, когда просто делаю так:

var
att: OleVariant;

att :=MyTable.Fields.Item[1].Value; - вот здесь вылетает ошибка, вопрос, я что не могу просто здесь выполнить присваивание, или надо хитро как-то делать?

Как вытащить список имен файлов я знаю, вопрос такой, если я сделаю запрос TADOQuery (SELECT files.filedata, files.filename, files.filetyp), который вернет FileData, FileName, FileType. Вопрос такой, какой тип данных мне выставить для FileData? Blob или какой?


Виталий Панасенко   (2009-12-23 17:15:00) [8]

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=


Наверх

Титульная страница Поиск, карта сайта Написать письмо