Конференция "Начинающим" » Access 2007 vs Delphi 2007 [Access 2007]
 
  • Shamansky (23.12.09 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); но выдает ошибку доступа к памяти.
  • Виталий Панасенко (23.12.09 17:15) [1]
  • Shamansky (24.12.09 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 © (24.12.09 15:33) [3]
    > Shamansky  (24.12.2009 14:38:02)  [2]

    Летит и крылышками машет.
  • Shamansky (24.12.09 15:44) [4]

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

    А по существу есть что подсказать?
  • Anatoly Podgoretsky © (24.12.09 16:00) [5]
    > Shamansky  (24.12.2009 15:44:04)  [4]

    Так будь более конкретен, а то у тебя что то летает.
  • Shamansky (24.12.09 16:26) [6]
    Конкретнее так: каким образом при доступе к полю базы данных Access 2007 типа attachment конвертировать возвращаеме значение поля
    MyTable.Fields.Item[1].Value

    типа OleVariant в тип Recordset2?
  • Shamansky (24.12.09 22:38) [7]
    вот такая ошибка:
    Access violation at address 3468CC47 in module ACEDAO.DLL

  • Shamansky (28.12.09 14:03) [8]
    Удалено модератором
 
Конференция "Начинающим" » Access 2007 vs Delphi 2007 [Access 2007]
Есть новые Нет новых   [134435   +34][b:0][p:0.001]