Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Delphi Access Attachment поле  [new]
Janex
Member

Откуда: Латвия
Сообщений: 1086
Привет всем.
Есть база Access (.accdb), там в таблице поле типа Attachment, тоесть вроде как
Blob, но в нём фаили, и болеe одного ...
Знает кто то как в дельфе добратся до етих фаилов, типо выташить и записать их в нормальные фаили ?

WBR
Janex
14 май 19, 11:04    [21884159]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4500
Janex,

+ Что-то типа того

TBlobField(ADODataSet1.FieldByName('myAttachment')).SaveToFile(sFileNameWithPath);
14 май 19, 11:35    [21884201]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Janex
Member

Откуда: Латвия
Сообщений: 1086
Gerasimenko
Janex,

+ Что-то типа того

TBlobField(ADODataSet1.FieldByName('myAttachment')).SaveToFile(sFileNameWithPath);


Там в етом одном поле myAttachment много чего - название фаила, расширени фаила и сам фаил, и
таких комплектов может бить много ... ето какои то комплексныи поле. Если выгрузить блоб,
то там всё в ондои куче будет и неразобратся ... :(
14 май 19, 11:39    [21884206]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Janex
Member

Откуда: Латвия
Сообщений: 1086
Gerasimenko
Janex,

+ Что-то типа того

TBlobField(ADODataSet1.FieldByName('myAttachment')).SaveToFile(sFileNameWithPath);


Кстати нет - из блоба вытаскивается только названия фаилов :(
14 май 19, 11:51    [21884219]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4500
Janex
Gerasimenko
Janex,

+ Что-то типа того

TBlobField(ADODataSet1.FieldByName('myAttachment')).SaveToFile(sFileNameWithPath);


Кстати нет - из блоба вытаскивается только названия фаилов :(

Что там у тебя и в каком виде - провидцев нет

+ Можешь через поток делать

(ADODataSet1.FieldByName('myAttachment') as TBlobField).SaveToStream(myTsm); 

или
myTsm:=ADODataSet1.CreateBlobStream(ADODataSet1.FindField('myAttachment'),bmRead);

14 май 19, 12:06    [21884245]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Janex
Member

Откуда: Латвия
Сообщений: 1086
Gerasimenko,

Вот что пишут про ето:
In MS Access accdb Microsoft introduced a new data type called attachments. Many types of files can be stored in a column which has the attachment data type. Someone can add bitmap files, jpg files, sound files, word documents, etc. to a column without increasing the size of the database.

Если и выташу ети данные через поток, то там будет росоль из мноигих фаилов, а мне надо и х по одному достать ...
14 май 19, 12:18    [21884268]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4500
Janex
Gerasimenko,

Вот что пишут про ето:
In MS Access accdb Microsoft introduced a new data type called attachments. Many types of files can be stored in a column which has the attachment data type. Someone can add bitmap files, jpg files, sound files, word documents, etc. to a column without increasing the size of the database.

Если и выташу ети данные через поток, то там будет росоль из мноигих фаилов, а мне надо и х по одному достать ...


https://stackoverflow.com/questions/26958872/handling-fields-of-attachment-type-in-ms-access-using-ado

Не рекомендуют использовать вне Access. Если, все же, такая необходимость есть, то использовать специальные компоненты, поддерживающие данный тип. Например: ACE DAO Recordset2
14 май 19, 12:56    [21884314]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Janex
Member

Откуда: Латвия
Сообщений: 1086
Кое какои прогресс есть.
задумался, что вот так можно добратся до конкретных фаилов:
SELECT id,
       Attachments.filedata,
       Attachments.filename
FROM   TASKS

Есть, yра, победа :)

Но вот блин опять гемороя - записивая блоб в фаил всегда получаю фаил на 10-20 баитов
длинее чем он должен бить. Кто то, что то всем фаилам с переди добавляет какую то
чуш размером 10-20 баитов ...
Что ЕТО ?
Пробовал и через UniDAC, и через FiredDAC, всё одно ...
Какои то ODBC/OLE/ПОЛЕ/МОЛЕ провидер не тот или что ?
Как такое может бить ?
14 май 19, 15:15    [21884520]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10998
Janex,

А данные еще и упаковываться могут https://docs.microsoft.com/en-us/office/vba/api/access.attachment и файлов может быть несколько. Не туда ты копаешь.
14 май 19, 15:25    [21884538]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
Janex
Member

Откуда: Латвия
Сообщений: 1086
Janex,
Ех ... ладно, забудьте, ето сам Access, наверно, хронит какую то дополнительную инфу про фаил,
а то в етом паразитном хедере упомянуто расширение фаила...
14 май 19, 15:26    [21884541]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Access Attachment поле  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10998
Попробуй как-то так
var rs: Recordset;
....
rs := ADODataSet1.FieldByName('myAttachment').AsVariant as Recordset;
........
14 май 19, 15:30    [21884547]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить