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

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

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

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

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

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

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

У меня в базе
Таблица - [Table]
Поля: |Наименование| |Pазмер| |Файл|
...
Рейтинг: 0 / 0
31.10.2003, 12:29
    #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
31.10.2003, 12:34
    #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
31.10.2003, 12:50
    #32311637
Boyler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение файла в базу данных?!
Я думаю разжовывать далее некуда!
Сейчас поковырять не смогу, работы много!

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


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