Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.006 c
4-1229691321
Ort
2008-12-19 15:55
2010.03.07
Неправильно работает нажатие на клавиши


15-1261471578
StriderMan
2009-12-22 11:46
2010.03.07
if Value = True then


2-1262457629
Lordalexander
2010-01-02 21:40
2010.03.07
Окна


2-1262196060
Ivan
2009-12-30 21:01
2010.03.07
Вопрос по скроллингу


15-1261690221
Юрий
2009-12-25 00:30
2010.03.07
С днем рождения ! 25 декабря 2009 пятница





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский