Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос:  DAO и файлы Добавлено: 27.08.11 15:16  

Автор вопроса:  Dark Engine | Web-сайт: www.wentas.2bb.ru | ICQ: 343191665 
Уважаемые коллеги, вопрос из раздела странных. Нужно каким-то образом запихать файл в базу DAO. VB6. хотя бы намекните, как это можно сделать, пожалуйста.Ответы, типа, DAO и VB6 попрошу не писать. Переводить всю систему на платформу .NET никто не собирается, а софт, уже написанный на DAO требуется не с нуля создать, а модифицировать.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #1 Добавлено: 27.08.11 15:23
Ничего не понятно. Какой файл? в какую базу? что модифицировай? Конкретней пожалуйста. Телепаты еще не подтянулись.

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #2 Добавлено: 27.08.11 16:19
тип поля image, если он там есть. ОН позволяет хранить бинарные данные неограниченной длины

Ответить

Номер ответа: 3
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #3
Добавлено: 27.08.11 17:20
AndreyMp
Файл - любой. Хоть doc, хоть pdf, хоть tif. Ну это те, что реально там могут оказаться. А вообще, хотелось бы предусмотреть возможность запихать в базу совершенно любой файл, чертеж AutoCAD, архив... а тестить буду вообще на mp3 (дабы проверить скорость обработки). База на DAO, обычная аксесс-образная. Что же до модификаций, то я просто обосновывал отказ от предложений по решениям на .NET платформе и/или на ADO. То есть, программа уже есть, ее перевод на NET-платформу никто не собирается проводить (ибо есть только Visual Studio 6, новее не покупалась), нужно только чуть переделать базу, вписать возможность пихать туда файлы. База уже на DAO и переписывать её под ADO тоже никто не будет. Извините.

Artyom
Есть тип BINARY. Картинки туда пихаются. Этот алгоритм я уже реализовывал. Но при попытке запихать туда что-то отличное от картинки - прога в лучшем случае виснет, в худшем - вылетает. Проблема непонятна. Вопрос в том, можно ли реализовать алгоритм, конвертирующий в бинарку любой файл, и так же аккуратно его оттуда вытягивающий?

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4242
 Web-сайт: all-oracle.ru
 Профиль | | #4
Добавлено: 28.08.11 00:09
Dark Engine пишет:
Есть тип BINARY

хм.. точно есть такой тип?
Какую СУБД ты используешь? Надеюсь не Access?

Ответить

Номер ответа: 5
Автор ответа:
 chialexus



ICQ: 321922 

Вопросов: 3
Ответов: 53
 Web-сайт: chialexus.narod.ru
 Профиль | | #5
Добавлено: 28.08.11 00:48
В DAO тип BINARY - тип данных, который хранит фиксированную длину двоичных данных.Максимальная длина составляет 255 байт.
Еще есть тип MEMO - такие поля могут содержать до 1,2 ГБ текстовых данных.
По моему БД Access не может быть огромной - 2 Gb максималка.
Проще использовать ссылки на файлы (их местоположение на винте).

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4242
 Web-сайт: all-oracle.ru
 Профиль | | #6
Добавлено: 28.08.11 08:48
chialexus пишет:
Проще использовать ссылки на файлы (их местоположение на винте).

Согласен, для Access это, пожалуй, будет единственный приемлемый выход..

Ответить

Номер ответа: 7
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #7
Добавлено: 28.08.11 13:35
chialexus
Не совсем. Он хранит динамический массив из порций (пакетов) данных по 255 байт. Количество загоняемых пакетов вроде ограничено только размером базы.

EROS
Думал уже над этим...у этого метода три недостатка:
1. Если файл будет удален, ссылка потеряет актуальность.
2. Если база зашарена (а так оно и работает), и работает с ней сразу несколько человек, ссылка будет доступна только на том компе, на котором лежит файл.
3. Если в попытках решить первые два недостатка прописать код, копирующий файл в папку с базой - возникнет элементарный беспорядок, в котором без специальной индексации не разобраться. Индексацию вводить влом.
Поэтому и хотелось бы запихать файл в базу.

Ответить

Номер ответа: 8
Автор ответа:
 Dan



ICQ: 609276007 

Вопросов: 24
Ответов: 195
 Профиль | | #8 Добавлено: 28.08.11 15:15
а если менять расширение файла на jpg, изначальное расширение записать в какое нибудь поле

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4242
 Web-сайт: all-oracle.ru
 Профиль | | #9
Добавлено: 29.08.11 07:30
Dark Engine пишет:
Думал уже над этим...у этого метода три недостатка:

Все описанный тобой недостатки это лишь вопрос организации работы с БД и файловым хранилищем. Кроме того, по этому принципу работают десятки, если не сотни, систем документооборота, ERP систем и прочих систем. И кроме того, твой способ хранения файлов, непосредственно в БД, в виде двоичных данных имеет куда более серьезный недостаток чем описанные тобой выше. Дело в том, что размер БД, как ты понимаешь, не безграничный.. и при таком подходе он очень скоро станет максимальным. Насколько я помню чертежи AutoCAD и проектная документация весят весьма и весьма прилично
Вариантов решения я вижу два:
1. Это предложенный тебе ранее. Хранить в БД только ссылки на файлы в файловой системе. При этом актуальность этих записей лежит исключительно на тебе. Можно,скажем, завести пользователя в системе и дать ему права на папку для хранения файлов и под ним выполнять все операции по созданию/удалению файлов для защиты от несанкционированного доступа.
2. Использовать БД, отличную от Access, позволяющую содавать кластерные/распределенные системы и подключать внешние хранилища..

Ответить

Номер ответа: 10
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #10
Добавлено: 29.08.11 17:42
EROS пишет:
способ хранения файлов, непосредственно в БД, в виде двоичных данных имеет куда более серьезный недостаток чем описанные тобой выше. Дело в том, что размер БД, как ты понимаешь, не безграничный.. и при таком подходе он очень скоро станет максимальным.

Кто мешает саму базу хранить в одном файле, а загнанные в двоичном виде файлы - создавать новые файлы баз по мере их наполнения? То есть, не хватает места для загрузки следующего файла - создать новый файл базы и туда файлик залить. Это просто бы решило проблему индексации, из-за которой создавать файловое хранилище нет особого желания.
EROS пишет:
 Использовать БД, отличную от Access, позволяющую содавать кластерные/распределенные системы и подключать внешние хранилища..

А какую? Я просто не особо в курсе, какие это поддерживают...

А вообще, в принципе, после некоторых экспериментов пришел к выводу, что и правда лучше все же хранить файлы где-то рядом с базой (не в оригинальном месте на винте, конечно, а копировать их в "хранилище";).

Ответить

Номер ответа: 11
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #11 Добавлено: 29.08.11 18:09
В SQL Server размер базы не ограничен, можно разделять базу данных на отдельыне файлы как горизонтально (разные таблицы в разных файлах) так и вертикально (разные сегменты одной таблицы в разных файлах). В 2008 версии есть поддержка FILESTREAM - механизм, позволяющий хранить BLOB не в файле данных, а в отдельных файлах, по одному на каждый BLOB, при этом остается проверка целостности на уровне БД, и с блобом можно работать двумя способами - как с varbinary(max) полем, используя SQL, и как с обычным файлом, используя функции файловой системы.

Ответить

Номер ответа: 12
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #12
Добавлено: 30.08.11 09:23
ОК, спасибо :)

Ответить

Страница: 1 |

Поиск по форуму





© Copyright 2002-2011 VBNet.RU | Пишите нам