|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Возможно ли хранение файлов в базе данных Access? Подкинте примерчик. Имеем: - ВБ 6.0 SP5 - Access 97 - много желания повышать свой профессиональный уровень:-) Задача: Сделать приложение для работы с базой данных в которой хранятся изображения (TIFF, JPEG) с описанием. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 12:20 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Принцып тот же что и здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 12:30 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
2DionX: Спасибо принял, но хотелось бы посмотреть вариант VB + Access! Может кто-нибудь делал? Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 12:38 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Public Function WriteRecord(ByVal CN As ADODB.Connection, _ ByVal Table As String, _ ByVal Fields As Variant, _ ByVal FieldsValue As Variant, _ ByRef ErrText As String) As Boolean ' функция добавления новой строки в таблицу ' CN - открытое подключение к БД ' Table - имя таблицы в которую добавляем запись ' Fields - массив наименований столбцов ' FieldsValue - массив значений столбцов ' В случае если среди вставляемых значений есть файл, ' то значение столбца должно содержать путь. ' При возникновении ошибки функция возвращает false, a в ErrText текст ошибки On Error GoTo errLabel ErrText = "" Dim sql As String Dim st As ADODB.Stream Dim rs As ADODB.Recordset ' построить SQL-запрос и открыть набор записей sql = "SELECT * FROM " & Table Set rs = New ADODB.Recordset Set st = New ADODB.Stream st.Type = adTypeBinary st.Open rs.Open sql, CN, adOpenDynamic, adLockOptimistic rs.AddNew Dim i As Long For i = LBound(Fields) To UBound(Fields) ' проверить тип поля If rs.Fields(Fields(i)).Type = adBinary Or rs.Fields(Fields(i)).Type = adLongVarBinary Or rs.Fields(Fields(i)).Type = adVarBinary Then st.LoadFromFile (FieldsValue(i)) rs.Fields(Fields(i)).Value = st.Read Else rs.Fields(Fields(i)).Value = FieldsValue(i) End If Next i rs.Update GoTo MyExit '*************************************************** errLabel: ErrText = "Ошибка №" & Err.Number & vbCrLf & Err.Description MyExit: On Error Resume Next If rs.State = adStateOpen Then rs.Close Set rs = Nothing If st.State = adStateOpen Then st.Close Set st = Nothing WriteRecord = IIf(ErrText = "", True, False) End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 12:41 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
вот кусок работающего кода поле fndata имеет тип "Поле объекта OLE" Public Sub SaveMedia() On Error GoTo errH: dim FN As String dim FileBuffer As String fn="C:\1.bmp" FileBuffer = Space(FileLen(FN)) Open FN For Binary As #1 Get #1, , FileBuffer Close #1 strSQL = "SELECT TOP 1 * FROM Media" Call myApp.Service.OpenCursor(strSQL, rstt) With rstt .AddNew !UID = UID !FN = FSO.GetFileName(FN) !MediaType = MediaType .Fields("FNData").AppendChunk FileBuffer .Update .Close End With SM Exit Sub errH: Select Case Err.Number Case 1000 EM "Не выбран файл." Case Else EM End Select End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 12:54 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Спасибо! Попробую переварить! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 12:56 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
мдя... sql-запрос у big-duke поставлен болле экономично по отношению к ресурсам... автор big-duke писал:SELECT TOP 1 * FROM Media поэтому в моей функции, конечно же, лучше использовать такой же запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 13:13 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Зачем захламлять базу лишними данными - храни в поле "изображение" просто ссылку на файл. При чтении записи из базы берешь ссылку файла и грузишь его хоть в PictureBox, хоть в Image ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 14:11 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
4Iliya_Sp имхо это дело вкуса и требований к программе кому-то нравится много файлов на диске,кому то одна большая база ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 14:13 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
М-дя! Срочно надо книгу искать!.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2003, 14:35 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
2 big-duke: Может линк прямой даш? Я по инету искал не нашел, хотя может и искал плохо?!. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 07:17 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
4big-duke Абсолютно согласен :) Тока я понял, что человек это все на Access хочет делать, а там хранение изображений в полях значительно повлияет на производительность. Если все это просто ради того, чтобы проверить, как работает, то все нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 07:27 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Чего-то меня сомнения начали терзать! Может я изначально неправильно вибрал базу данных для хранения изображений (файлов)? Access выбрал т.к. нехотелось бы привязывать программу к SQL-серверу? чтобы была хоть какая-то "независимость"! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 08:14 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Так и не догнал чего оттуда качать надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 08:51 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
А ничего качать и не надо. Просто в поле Search MSDN For надо вставить ключевое слово и активизировать поиск. В полученном списке статей выбрать ту, которая наиболее полно в названии подходит под описание решения данной проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 08:55 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
М-да извиняюсь притормозил! Просто при вызове справки в бейсике кричит что не установлен MSDN, я и подумал что инсталировать надо! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 09:01 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
2big-duke: НЕТ! Не понял честно говоря, как не ковырял ничего не получается! Вы меня конечно простите за тупость... :-( А непонятно вот что... Обсолютно не пойму где сама база данных, где ее поля, как ее объявить, ак в первом так и во втором примере... У меня в базе Таблица - [Table] Поля: |Наименование| |Pазмер| |Файл| ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 12:03 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2.
вот этот кусок замените на свой, который открывает вашу базу с вашей таблицей Код: plaintext 1. 2. 3. 4.
вот этот кусок замените на следующий Код: plaintext 1. 2. 3.
fso - это объекта filesystemobject rstt - adodb.recordset, когда будетет его открывать не забудьте поставить Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 12:29 |
|
Сохранение файла в базу данных?!
|
|||
---|---|---|---|
#18+
2 Boyler для того чтобы пользоваться моим примером, нужно сначала открыть подключение к твоей базе данных. Т.е.: public cn as adodb.connection cn.connectionstring="Provider=Microsoft.Jet.OLEDB.4.0;" & _ Data Source=C:\m.mdb;" cn.open потом открываем набор записей. Т.е. показываем из какой таблицы и что выбирать автор писал:sql = "SELECT * FROM " & Table и какое подключение при ентом использовать автор писал:rs.Open sql, CN , adOpenDynamic, adLockOptimistic Второй и третий параметр здесь показывают, что рекордсет будет динамический с блокировкой записи только на время её изменения. Так как наша цель добавить новую запись, то вызываем метод rs.AddNew и простовляем значения всех полей для новой записи. Нас интересует именно то место, где вставляется файл. Т.е. автор писал:st.LoadFromFile (FieldsValue(i)) rs.Fields(Fields(i)).Value = st.Read тоесть файл сначала загружается в объект ADODB.Stream с помощью метода LoadFromFile (ПутьКФайлу) и уже потом записывается в одну из ячеек новой записи rs.Fields(Fields(i)).Value = st.Read (метод Read позволяет считать данные из объекта Stream) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2003, 12:34 |
|
|
start [/forum/topic.php?fid=60&msg=32310394&tid=2170510]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 169ms |
0 / 0 |