''取得最大序号,我自己的表,同你的有些不同 strSQL = "SELECT TOP 1 ship_accident_accessory_SN AS SN FROM HY_ship_accident_accessory WHERE ship_code=" & AddstringBracket(ShipCode) _ & " AND ship_accident_SN=" & AddstringBracket(Me.txtship_accident_SN.Text) _ & " ORDER BY ship_accident_accessory_SN DESC "
数据库中存放图像的字段是二进制类型(Access为OLE类型)。
比如,如果用“CommonDialog”控件来选择你硬盘上的图像文件;
用“Picture”控件来显示图像,那么下面的代码供参考:
(运行VB,选择“工程\引用”命令,引用“Microsoft AetiveX Date 2.5 Library”。已连接数据库,打开了相应的记录集rs)
Dim StmPic As ADODB.Stream
Dim StrPicTemp As String
......
'保存你所选择的图像
Set StmPic = New ADODB.Stream
StmPic.Type = adTypeBinary '指定流是二进制类型
StmPic.Open '将数据获取到Stream对象中
StmPic.LoadFromFile (CommonDialog1.FileName) '将选择的图像加载到打开的StmPic中
rs.AddNew
rs.Fields(1).Value = StmPic.Read '从StmPic对象中读取数据
rs.Update
StmPic.Close
......
'读取显示数据库中的图像
Set StmPic = New ADODB.Stream
StrPicTemp = "c:\temp.tmp" '临时文件,用来保存读出的图片
With StmPic
.Type = adTypeBinary
.Open
.Write rs.Fields(1) '写入数据库中的数据至Stream中
.SaveToFile StrPicTemp, adSaveCreateOverWrite '将Stream中数据写入临时文件中
.Close
End With
Picture1.Picture = LoadPicture(StrPicTemp) '用Picture控件显示图像
......
''上传任何类型数据至image字段
Dim arrFile() As String
Dim i As Integer
Dim stm As New ADODB.Stream
Dim rs As New ADODB.Recordset
Dim cnAcc As New ADODB.Connection
Dim intMax As Integer
' If Not CheckKey Then Exit Sub 这个不要
arrFile = Split(strFileList, Chr(0))''文件名 你自己选一个就好 比如"c:\11.bmp"
cnAcc.Open strFileCon''连接字符串,不会写的话 ……%¥#※×((
cnAcc.CursorLocation = adUseClient
''取得最大序号,我自己的表,同你的有些不同
strSQL = "SELECT TOP 1 ship_accident_accessory_SN AS SN FROM HY_ship_accident_accessory WHERE ship_code=" & AddstringBracket(ShipCode) _
& " AND ship_accident_SN=" & AddstringBracket(Me.txtship_accident_SN.Text) _
& " ORDER BY ship_accident_accessory_SN DESC "
rs.Open strSQL, cnAcc, adOpenForwardOnly, adLockReadOnly, adCmdText
If rs.EOF And rs.BOF Then
intMax = 1
Else
intMax = rs(0) + 1
End If
strSQL = "SELECT * FROM HY_ship_accident_accessory"''打开附件表
If rs.state = adStateOpen Then rs.Close
rs.Open strSQL, cnAcc, adOpenStatic, adLockBatchOptimistic
With stm''打开流
.Type = adTypeBinary
.Open
End With
Screen.MousePointer = 11
On Error GoTo cancle
cnAcc.BeginTrans
For i = LBound(arrFile) To UBound(arrFile)''根据所有的文件名
rs.AddNew
rs("ship_code") = ShipCode
rs("ship_accident_SN") = Me.txtship_accident_SN.Text
rs("ship_accident_accessory_SN") = intMax
intMax = intMax + 1
rs("ship_accident_accessory_name") = arrFile(i)
stm.LoadFromFile strPath & arrFile(i)''load文件
rs("ship_accident_accessory_data") = stm.Read''存入文件
rs.Update
DoEvents
Next
rs.UpdateBatch
cnAcc.CommitTrans
Screen.MousePointer = 0
stm.Close
Set stm = Nothing
Set rs = Nothing
cnAcc.Close
Set cnAcc = Nothing
Exit Sub
cancle: cnAcc.RollbackTrans
Set stm = Nothing
Set rs = Nothing
cnAcc.Close
Set cnAcc = Nothing
Screen.MousePointer = 0
MsgBox Err.Description
End SubPrivate Sub DownLoadAcc(ByVal strSNList As String, ByVal strDesDir As String)
Dim arr() As String
Dim i As Integer
Dim stm As New ADODB.Stream
Dim rs As New ADODB.Recordset
Dim cnAcc As New ADODB.Connection
cnAcc.Open strFileCon
rs.Open strSQL, cnAcc, adOpenStatic, adLockReadOnly
With stm
.Type = adTypeBinary
.Open
End With
Screen.MousePointer = 11
On Error GoTo cancle
While Not rs.EOF
stm.Write rs("AccFile")''用流读数据库
stm.SaveToFile strDesDir & "\" & rs("Fname"), adSaveCreateOverWrite''save到硬盘
rs.MoveNext''下一个
DoEvents
Wend
Screen.MousePointer = 0
stm.Close
Set stm = Nothing
Set rs = Nothing
cnAcc.Close
Set cnAcc = Nothing
Exit Sub
cancle: Set stm = Nothing
Set rs = Nothing
cnAcc.Close
Set cnAcc = Nothing
Screen.MousePointer = 0
MsgBox Err.Description
End Sub
这是VB的
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;258038&Product=vbb