powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сохранение файла в базу данных?!
23 сообщений из 23, страница 1 из 1
Сохранение файла в базу данных?!
    #32310135
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ли хранение файлов в базе данных Access?
Подкинте примерчик.

Имеем:
- ВБ 6.0 SP5
- Access 97
- много желания повышать свой профессиональный уровень:-)

Задача:
Сделать приложение для работы с базой данных в которой хранятся изображения (TIFF, JPEG) с описанием.
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310155
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принцып тот же что и здесь
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310174
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2DionX:
Спасибо принял, но хотелось бы посмотреть вариант VB + Access!
Может кто-нибудь делал?

Заранее спасибо!
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310180
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310205
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот кусок работающего кода
поле 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
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310208
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Попробую переварить!
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310249
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мдя... sql-запрос у big-duke поставлен болле экономично по отношению к ресурсам...
автор big-duke писал:SELECT TOP 1 * FROM Media
поэтому в моей функции, конечно же, лучше использовать такой же запрос.
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310387
Iliya_Sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зачем захламлять базу лишними данными - храни в поле "изображение" просто ссылку на файл. При чтении записи из базы берешь ссылку файла и грузишь его хоть в PictureBox, хоть в Image
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310394
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4Iliya_Sp
имхо это дело вкуса и требований к программе
кому-то нравится много файлов на диске,кому то одна большая база
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310455
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-дя!
Срочно надо книгу искать!..
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32310497
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какую ?
BOL или MSDN ?
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311174
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 big-duke:
Может линк прямой даш?
Я по инету искал не нашел, хотя может и искал плохо?!.
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311176
Iliya_Sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4big-duke
Абсолютно согласен :)
Тока я понял, что человек это все на Access хочет делать, а там хранение изображений в полях значительно повлияет на производительность.
Если все это просто ради того, чтобы проверить, как работает, то все нормально.
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311185
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то меня сомнения начали терзать!
Может я изначально неправильно вибрал базу данных для хранения изображений (файлов)?

Access выбрал т.к. нехотелось бы привязывать программу к SQL-серверу? чтобы была хоть какая-то "независимость"!
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311199
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может линк прямой даш?

http://msdn.microsoft.com/
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311214
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и не догнал чего оттуда качать надо...
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311217
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ничего качать и не надо. Просто в поле Search MSDN For надо вставить ключевое слово и активизировать поиск. В полученном списке статей выбрать ту, которая наиболее полно в названии подходит под описание решения данной проблемы.
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311222
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-да извиняюсь притормозил!
Просто при вызове справки в бейсике кричит что не установлен MSDN, я и подумал что инсталировать надо!
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311412
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4Boyler с примером разобрался ?
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311551
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2big-duke:
НЕТ! Не понял честно говоря, как не ковырял ничего не получается!
Вы меня конечно простите за тупость... :-(

А непонятно вот что...
Обсолютно не пойму где сама база данных, где ее поля, как ее объявить, ак в первом так и во втором примере...

У меня в базе
Таблица - [Table]
Поля: |Наименование| |Pазмер| |Файл|
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311594
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
strSQL =  "SELECT TOP 1  * FROM Media" 
Call myApp.Service.OpenCursor(strSQL, rstt) 

вот этот кусок замените на свой, который открывает вашу базу с вашей таблицей

Код: plaintext
1.
2.
3.
4.
!UID = UID 
!FN = FSO.GetFileName(FN) 
!MediaType = MediaType 
.Fields( "FNData" ).AppendChunk FileBuffer 

вот этот кусок замените на следующий

Код: plaintext
1.
2.
3.
.Fields( "Наименование" ).value = FSO.GetFileName(FN) 
.Fields( "Размер" ).value = FileLen(FN) 
.Fields( "Файл" ).AppendChunk FileBuffer 


fso - это объекта filesystemobject
rstt - adodb.recordset, когда будетет его открывать не забудьте поставить
Код: plaintext
1.
2.
3.
     .CursorType = adOpenDynamic
     .CursorLocation = adUseClient
     .LockType = adLockOptimistic

...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311610
DionX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)
...
Рейтинг: 0 / 0
Сохранение файла в базу данных?!
    #32311637
Фотография Boyler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю разжовывать далее некуда!
Сейчас поковырять не смогу, работы много!

Робяты спасибо!
Я всегда знал что есть еще на Руси люди добрые! ...куда уж нам ... казахам... :-)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сохранение файла в базу данных?!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]