Главная страница
    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.46 MB
Время: 0.006 c
15-1257258721
Romkin
2009-11-03 17:32
2010.03.07
Конкурс на Исходниках. С призами


15-1261271160
Игорь Шевченко
2009-12-20 04:06
2010.03.07
К вопросу о локализации среды


2-1262423504
serhiyiv
2010-01-02 12:11
2010.03.07
TMemoryStream


2-1262076709
tipman
2009-12-29 11:51
2010.03.07
Узнать о завершении работы потока, как?


2-1261744100
Who_is_you?
2009-12-25 15:28
2010.03.07
Процедура прерывания. В Delphi 7 pointer ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский