powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как через ADO в тблицах читать и писать данные типа image (BLOB)
2 сообщений из 2, страница 1 из 1
Как через ADO в тблицах читать и писать данные типа image (BLOB)
    #32092990
Vlad_Butusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сабж. Хелп. мучаюсь...
Приветствуется всё.
Зараннее тэнкс!
...
Рейтинг: 0 / 0
Как через ADO в тблицах читать и писать данные типа image (BLOB)
    #32093503
Alexei Petrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное, вот так.
Сразу говорю, я этот код писал не сам и дажене проверял, как он работает; скачал откуда-то из Сети... Надеюсь поможет.

Пример работы с IMAGE (VB).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
'рекордсет на запись для редактирования
Private rsCurrentEmp As ADODB.Recordset
'Command-объект на запись для редактирования
Private cmdCurrentEmp As New ADODB.Command
Private rsNameOrg As ADODB.Recordset

Private Sub Command1_Click()
 CommonDialog1.ShowOpen
 If CommonDialog1.FileName <>  "" Then Image1.Picture = LoadPicture(CommonDialog1.FileName)
End Sub

'инфа в статусбар
Private Sub Form_Activate()
  frmMain.sbrMain.Panels(1).Text = "Редактирование записи"
End Sub

Private Sub Form_Load()
 Me.Caption = "Редактирование записи"
 orgNameRS
 'параметры CommonDialog'а
 CommonDialog1.Flags = cdlOFNFileMustExist
 CommonDialog1.Flags = cdlOFNHideReadOnly
 CommonDialog1.InitDir = "C:\"
 CommonDialog1.Filter = "Графические файлы (*.jpg) | *.jpg"

 'Длина полей
 txtEmp(0 ).MaxLength =  50 
 txtEmp( 1 ).MaxLength =  20 
 txtEmp( 2 ).MaxLength =  20 
 txtEmp( 3 ).MaxLength =  100 
 txtEmp( 4 ).MaxLength =  200 
 txtEmp( 5 ).MaxLength =  50 
 txtEmp( 6 ).MaxLength =  200 
 txtEmp( 7 ).MaxLength =  50 
 txtEmp( 10 ).MaxLength =  40 
 txtEmp( 11 ).MaxLength =  8 
 
 Me.Refresh
 
 'из какого рекордсета какое поле :)
 Set DataCombo1.RowSource = rsNameOrg
 DataCombo1.ListField = "name"
 
 If frmEmployee.newRecord = False Then
  currentRec
 Else
  DataCombo1.Text = "ООО ДНК"
 End If
 
 Me.Refresh
 
 End Sub

'Записи в comboBox
Private Sub orgNameRS()
 Dim cnNameOrg As New ADODB.Command
 Set cnNameOrg.ActiveConnection = frmLogon.cn
  cnNameOrg.CommandText = "procAllMyOrg "
  cnNameOrg.CommandType = adCmdStoredProc

Set rsNameOrg = New ADODB.Recordset
 With rsNameOrg
   .LockType = adLockReadOnly
   .CursorType = adOpenStatic
   .CursorLocation = adUseClient
   .Open cnNameOrg
  End With
End Sub

'Редактирование/просмотр выбранной записи
Private Sub currentRec()
 'Выполняем хранимую процедуру и передаем запись в рекордсет
 Dim prm As ADODB.Parameter
 Set cmdCurrentEmp.ActiveConnection = frmLogon.cn
  cmdCurrentEmp.CommandText = " procKadresCurrRec "
  cmdCurrentEmp.CommandType = adCmdStoredProc
 'Заполняем параметры
 Set prm = cmdCurrentEmp.CreateParameter("currRec", adInteger, adParamInput, , frmEmployee.idCount)
   cmdCurrentEmp.Parameters.Append prm

   cmdCurrentEmp.Prepared = True
   cmdCurrentEmp.Execute

 'Рекордсет с текущей записью
  Set rsCurrentEmp = New ADODB.Recordset
  With rsCurrentEmp
   .LockType = adLockOptimistic
   .CursorType = adOpenStatic
   .CursorLocation = adUseServer
   .Open cmdCurrentEmp
  End With

 'Привязка к полям
 Set txtEmp(0).DataSource = rsCurrentEmp
  txtEmp(0).DataField = "fio"
 
 Set txtEmp(1).DataSource = rsCurrentEmp
  txtEmp(1).DataField = "phone"
 
 Set txtEmp(2).DataSource = rsCurrentEmp
  txtEmp(2).DataField = "mobile"
 
 Set txtEmp(3).DataSource = rsCurrentEmp
  txtEmp(3).DataField = "homeInfo"
 
 Set txtEmp(4).DataSource = rsCurrentEmp
  txtEmp(4).DataField = "homeAddress"
 
 Set txtEmp(5).DataSource = rsCurrentEmp
  txtEmp(5).DataField = "car"
 
 Set txtEmp(6).DataSource = rsCurrentEmp
  txtEmp(6).DataField = "education"
 
 Set txtEmp(7).DataSource = rsCurrentEmp
  txtEmp(7).DataField = "family"
 
 'Присваивается тексту в comboB значение поля соответствующего id
 rsNameOrg.MoveFirst
 rsNameOrg.Find " id= " & rsCurrentEmp.Fields(" organisation ").Value
 DataCombo1.Text = rsNameOrg.Fields(" name ").Value
 
 Set dtpDateContract.DataSource = rsCurrentEmp
  dtpDateContract.DataField = " dateContract "
 
 Set txtEmp(10 ).DataSource = rsCurrentEmp
  txtEmp( 10 ).DataField = "jobTitle "
 
 Set txtEmp(11 ).DataSource = rsCurrentEmp
  txtEmp( 11 ).DataField = "salary "
 
 Set dtpBirthDay.DataSource = rsCurrentEmp
  dtpBirthDay.DataField = " birthDay "
  
 Set txtInfo.DataSource = rsCurrentEmp
  txtInfo.DataField = " info "
  
 Set Image1.DataSource = rsCurrentEmp
  Image1.DataField = " photo "
 
 chkStatus.Value = rsCurrentEmp.Fields(" status ").Value
 
End Sub
Private Sub cmdSave_Click()

'Проверяем заполнение поля "ФИО"
 If txtEmp(0).Text = "" Then
  MsgBox "Для сохранения необходимо заполненить поле " & Chr$(34) & "ФИО" & Chr$(34) & ".", vbInformation, "ДНК-Кадры"
  Exit Sub
 Else
  'проверяем новая запись или исправление текущей
  If frmEmployee.newRecord = True Then
   'Command-объект на запись
   Dim cmdSave As New ADODB.Command
   Dim prm As ADODB.Parameter
   Set cmdSave.ActiveConnection = frmLogon.cn
   cmdSave.CommandText = "procKadresSave"
   cmdSave.CommandType = adCmdStoredProc
 
  'Заполняем параметры
   Set prm = cmdSave.CreateParameter(" fio ", adVarChar, adParamInput, 80 , Trim(txtEmp( 0 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("phone ", adVarChar, adParamInput, 20 , Trim(txtEmp( 1 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("mobile ", adVarChar, adParamInput, 20 , Trim(txtEmp( 2 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("homeInfo ", adVarChar, adParamInput, 100 , Trim(txtEmp( 3 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("homeAddress ", adVarChar, adParamInput, 200 , Trim(txtEmp( 4 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("car ", adVarChar, adParamInput, 50 , Trim(txtEmp( 5 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("education ", adVarChar, adParamInput, 200 , Trim(txtEmp( 6 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("family ", adVarChar, adParamInput, 50 , Trim(txtEmp( 7 ).Text))
    cmdSave.Parameters.Append prm
   rsNameOrg.MoveFirst
   rsNameOrg.Find "name='" & DataCombo1.Text & "' "
   Set prm = cmdSave.CreateParameter(" organisation ", adVarChar, adParamInput, 40 , rsNameOrg.Fields("id ").Value)
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter(" dateContract ", adVarChar, adParamInput, 10 , dtpDateContract.Month & ". " & dtpDateContract.Day & " . " & dtpDateContract.Year)
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter(" jobTitle ", adVarChar, adParamInput, 40 , Trim(txtEmp( 10 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("salary ", adCurrency, adParamInput, , Val(txtEmp(11 ).Text))
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("birthDay ", adVarChar, adParamInput, 10 , dtpBirthDay.Month & ". " & dtpBirthDay.Day & " . " & dtpBirthDay.Year)
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter(" info ", adLongVarChar, adParamInput, Len(txtInfo.TextRTF) + 1 , txtInfo.TextRTF)
    cmdSave.Parameters.Append prm
  
   'Создаем временный файл для фотографии и читаем из него в бин. данные
   Dim FileBuff() As Byte
   Dim FileLen As Long

   SavePicture Image1.Picture, "tempfile.bin"
   Open "tempfile.bin" For Binary As #1
   FileLen = LOF(1)
   ReDim FileBuff(FileLen) As Byte
   Get #1, , FileBuff()
   Close #1
   'Удаляем временный файл
   Kill ("tempfile.bin ")
  
   'заливаем бин. в параметр для хранимой процедуры
   Set prm = cmdSave.CreateParameter("photo", adLongVarBinary, adParamInput, FileLen + 1, FileBuff)
    cmdSave.Parameters.Append prm
   Set prm = cmdSave.CreateParameter("status", adInteger, adParamInput, , chkStatus.Value)
    cmdSave.Parameters.Append prm
    
   'сюда дадут id новой записи
   Set prm = cmdSave.CreateParameter(" newId ", adInteger, adParamOutput)
    cmdSave.Parameters.Append prm
    
    cmdSave.Prepared = True
    'снятие блокировки с записи
    Set rsCurrentEmp = Nothing
    'обновление записи
    cmdSave.Execute
   
   'сохраняем параметры грида
   frmEmployee.saveGridParams
    
   'Обновляем записи и параметры грида в форме со списком
   frmEmployee.rsEmp.Requery
   frmEmployee.gridParams
   
   'загружаем сохраненные параметры
   frmEmployee.loadGridParams
   
   'Переходим на добавленную запись
   frmEmployee.rsEmp.MoveFirst
   frmEmployee.rsEmp.Find (" id= " & cmdSave.Parameters(" newId ").Value)
   
   'Количество записей в статусбар
   frmMain.sbrMain.Panels(2).Text = "Всего записей: " & frmEmployee.rsEmp.RecordCount
    
   Set cmdSave = Nothing
   Set prm = Nothing
         
   Set cmdCurrentEmp = Nothing
   Set frmEmployeeMore = Nothing
   
   Unload Me
          
  Else
   'Если нет флага на создание новой записи, то обновляем текущую
    'Command-объект на запись
   Dim cmdUpdate As New ADODB.Command
   Dim prmUpdate As ADODB.Parameter
   Set cmdUpdate.ActiveConnection = frmLogon.cn
   cmdUpdate.CommandText = "procKadresUpdateRec"
   cmdUpdate.CommandType = adCmdStoredProc
 
  'Заполняем параметры
   Set prmUpdate = cmdUpdate.CreateParameter(" idRec ", adInteger, adParamInput, , frmEmployee.rsEmp.Fields(" id ").Value)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter(" fio ", adVarChar, adParamInput, 80 , txtEmp( 0 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("phone ", adVarChar, adParamInput, 20 , txtEmp( 1 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("mobile ", adVarChar, adParamInput, 20 , txtEmp( 2 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("homeInfo ", adVarChar, adParamInput, 100 , txtEmp( 3 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("homeAddress ", adVarChar, adParamInput, 200 , txtEmp( 4 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("car ", adVarChar, adParamInput, 50 , txtEmp( 5 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("education ", adVarChar, adParamInput, 200 , txtEmp( 6 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("family ", adVarChar, adParamInput, 50 , txtEmp( 7 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   rsNameOrg.MoveFirst
   rsNameOrg.Find "name='" & DataCombo1.Text & "' "
   Set prmUpdate = cmdUpdate.CreateParameter(" organisation ", adVarChar, adParamInput, 40 , rsNameOrg.Fields("id ").Value)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter(" dateContract ", adVarChar, adParamInput, 10 , dtpDateContract.Month & ". " & dtpDateContract.Day & " . " & dtpDateContract.Year)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter(" jobTitle ", adVarChar, adParamInput, 40 , txtEmp( 10 ).Text)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("salary ", adCurrency, adParamInput, , Val(txtEmp(11 ).Text))
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter("birthDay ", adVarChar, adParamInput, 10 , dtpBirthDay.Month & ". " & dtpBirthDay.Day & " . " & dtpBirthDay.Year)
    cmdUpdate.Parameters.Append prmUpdate
   Set prmUpdate = cmdUpdate.CreateParameter(" info ", adLongVarChar, adParamInput, Len(txtInfo.TextRTF) + 1 , txtInfo.TextRTF)
    cmdUpdate.Parameters.Append prmUpdate
   
   
   'Создаем временный файл для фотографии и читаем из него в бин. данные
   Dim FileBuff1() As Byte
   Dim FileLen1 As Long

   SavePicture Image1.Picture, "tempfile.bin"
   Open "tempfile.bin" For Binary As #1
   FileLen1 = LOF(1)
   ReDim FileBuff1(FileLen1) As Byte
   Get #1, , FileBuff1()
   Close #1
   'Удаляем временный файл
   Kill ("tempfile.bin ")
  
   'заливаем бин. в параметр для хранимой процедуры
   Set prmUpdate = cmdUpdate.CreateParameter("photo", adLongVarBinary, adParamInput, FileLen1 + 1, FileBuff1)
    cmdUpdate.Parameters.Append prmUpdate
   
  Set prmUpdate = cmdUpdate.CreateParameter("status", adInteger, adParamInput, , chkStatus.Value)
    cmdUpdate.Parameters.Append prmUpdate
   
    cmdUpdate.Prepared = True
    cmdUpdate.Execute
   
   'сохраняем параметры грида
   frmEmployee.saveGridParams
   
   'Обновляем записи и параметры грида в форме со списком
   frmEmployee.rsEmp.Requery
   frmEmployee.gridParams
   
   'загружаем сохраненные параметры
   frmEmployee.loadGridParams
   
   'переходим на текущую запись
   frmEmployee.rsEmp.MoveFirst
   frmEmployee.rsEmp.Find ("id=" & cmdUpdate.Parameters("idRec").Value)
   
   'Количество записей в статусбар
   frmMain.sbrMain.Panels(2 ).Text = "Всего записей: " & frmEmployee.rsEmp.RecordCount
   
   Set cmdUpdate = Nothing
   Set prmUpdate = Nothing
         
      
   Set cmdCurrentEmp = Nothing
   Set rsCurrentEmp = Nothing
   Set frmEmployeeMore = Nothing
    
   Unload Me
  End If
 End If
End Sub
Private Sub cmdDel_Click()
 frmEmployee.deleteRec
End Sub

Private Sub cmdExit_Click()
 Set cmdCurrentEmp = Nothing
 Set rsCurrentEmp = Nothing
 Set frmEmployeeMore = Nothing
 Unload Me
End Sub
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как через ADO в тблицах читать и писать данные типа image (BLOB)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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