哪个大侠帮我解决这个问题,我高分相送!

时间:2022-04-16 21:26:05
问题是这样的,我现在做的是一个人事管理系统,我的要求是要把照片存放到SQL中,我已经在SQL的表中设了一个字段为image的列的,列名为picture.
现在就是我在查看每位员工的时候,我要求他的照片也就显示在我在前台VB里设的image控件中了.
我的前台语言是VB.
这个问题我已经搞了好久了,没有一个答案.
我本来的做法是把图片放在D盘的一个叫pic的文件夹下,照片的命名是以每个员工的工号来命名的,因为工号唯一.所以每次跳出来的照片也不会有错误的,可是主管的意思是要我把照片存在SQL中,这个我就不知道怎么实现了
看了以前的一个关于image的贴子,我也是一头雾水,不明白
所以恳请大家帮忙,今天是最后的期限了,要不然我就不好交差了.
可可我先在这感谢大家了!!

8 个解决方案

#1



'**************************读图片文件**************************************
Sub GetPicFromDB(cn As ADODB.Connection)
    On Error Resume Next
    Dim fld As Field
    Dim strTemp As String
    Dim stm As ADODB.Stream
    Set stm = New ADODB.Stream
                                      'strTemp = "c:\temp.bmp"
    Set rs1 = New ADODB.Recordset
    rs1.Open "select * from rs_http where htbh='" & frm_manage.Grid2.TextMatrix(frm_manage.Grid2.RowSel, 0) & "'", cn, , , adCmdText
        While Not rs1.EOF
             '*********将数据库中的文件读到硬盘上*************************
           ' strTemp = App.Path + "\temp\" + rs1!Name '`临时文件,用来保存读出的图片

            With stm
                 .Type = adTypeBinary
                 .Open
                 .Write rs1("tp").value
                 strTemp = App.Path & "\temp1\" & rs1!Name
                 .SaveToFile strTemp, adSaveCreateOverWrite
                 .Close
            End With
            Set itemX = lvwPic.ListItems.add(, App.Path & "\temp1\" & rs1!Name, rs1!Name, 1, 1)
            itemX.SubItems(1) = rs1!bz
            rs1.MoveNext
        Wend
    Set stm = Nothing
    rs1.Close
    Set rs1 = Nothing
    End Sub



'******************将图片文件保存到数据库中*************************
Sub SavePicToDb(cn As ADODB.Connection, table1 As String, field1 As String, file1 As String, id1 As String)
        On Error Resume Next
    Dim stm As ADODB.Stream
    Set stm = New ADODB.Stream
    Set rs1 = New ADODB.Recordset
    rs1.Open "select * from " & table1 & " where id = " & id1, cn, adOpenKeyset, adLockOptimistic
    With stm
        .Type = adTypeBinary
        .Open
        .LoadFromFile file1  'DLG.FileName
    End With
    With rs1
         .Fields(field1) = stm.Read
         .Update
    End With
    rs1.Close
    Set rs1 = Nothing
End Sub



#2


你用http://www.google.com一搜吧

肯定有很多解决方案的

#3


给一个vb的例子给你
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim stm As ADODB.Stream

Private Sub SavePictureToDB(cn As ADODB.Connection)
'将BMP图片存入数据库
On Error GoTo EH
    Set stm = New ADODB.Stream
    rs.Open "select ImagePath,ImageValue from tbl_Image", cn, adOpenKeyset, adLockOptimistic
    CommonDialog1.ShowOpen
    Text1.Text = CommonDialog1.FileName
    
    With stm
         .Type = adTypeBinary
         .Open
         .LoadFromFile CommonDialog1.FileName
    End With
    With rs
         .AddNew
         .Fields("ImagePath") = Text1.Text
         .Fields("ImageValue") = stm.Read
         .Update
    End With
    rs.Close
    Set rs = Nothing
Exit Sub
EH: MsgBox Err.Description, vbInformation, "Error"
End Sub


Private Sub LoadPictureFromDB(cn As ADODB.Connection)
'载数据库中读出BMP图片
On Error GoTo EH
    Dim strTemp As String
    Set stm = New ADODB.Stream
    strTemp = "c:\temp.tmp" '临时文件,用来保存读出的图片
    rs.Open "select ImagePath,ImageValue  from tbl_image", cn, , , adCmdText
    With stm
        .Type = adTypeBinary
        .Open
        .Write rs("ImageValue")
        .SaveToFile strTemp, adSaveCreateOverWrite
        .Close
    End With
    Image1.Picture = LoadPicture(strTemp)
    Set stm = Nothing
    rs.Close
    Set rs = Nothing
Exit Sub
EH: MsgBox Err.Description, vbInformation, "Error"
End Sub

#4


学习!

#5




为什么不存放图片的路径

我喜欢只在数据库里面放路径

#6


'*************************************************************************
'**
'** 使用 ADODB.Stream 保存/读取文件到数据库
'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
'**
'** ----- 数据库连接字符串模板 ---------------------------------------
'** ACCESS数据库
'** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
'**     ";Data Source=数据库名"
'**
'** SQL数据库
'** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
'**     "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
'**
'*************************************************************************
'
'保存文件到数据库中
Sub s_SaveFile()
    Dim iStm As ADODB.Stream
    Dim iRe As ADODB.Recordset
    Dim iConcStr As String
    
    '数据库连接字符串
    iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
        ";Data Source=F:\My Documents\客户资料1.mdb"
    
    '读取文件到内容
    Set iStm = New ADODB.Stream
    With iStm
        .Type = adTypeBinary    '二进制模式
        .Open
        .LoadFromFile "c:\test.doc"
    End With
    
    '打开保存文件的表
    Set iRe = New ADODB.Recordset
    With iRe
        .Open "表", iConc, adOpenKeyset, adLockOptimistic
        .AddNew         '新增一条记录
        .Fields("保存文件内容的字段") = iStm.Read
        .Update
    End With
    
    '完成后关闭对象
    iRe.Close
    iStm.Close
End Sub

'从数据库中读取数据,保存成文件
Sub s_ReadFile()
    Dim iStm As ADODB.Stream
    Dim iRe As ADODB.Recordset
    Dim iConc As String
    
    '数据库连接字符串
    iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
        ";Data Source=\\xz\c$\Inetpub\zj\zj\zj.mdb"
    
    '打开表
    Set iRe = New ADODB.Recordset
    iRe.Open "tb_img", iConc, adOpenKeyset, adLockReadOnly
    iRe.Filter = "id=64"
    
    '保存到文件
    Set iStm = New ADODB.Stream
    With iStm
        .Mode = adModeReadWrite
        .Type = adTypeBinary
        .Open
        .Write iRe("img")
        .SaveToFile "c:\test.doc"
    End With
    
    '关闭对象
    iRe.Close
    iStm.Close
End Sub

#7


更多的参考我的贴子:
http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.4633905
交流--数据库中存/取文件(zjcxc)

#8


唉,
很麻烦呀!
虽然问题还是没有解决,
但是看在大家都这么热心的份上,
给分了!
我现在是用的存储路径的办法来做的,能用就好了!

#1



'**************************读图片文件**************************************
Sub GetPicFromDB(cn As ADODB.Connection)
    On Error Resume Next
    Dim fld As Field
    Dim strTemp As String
    Dim stm As ADODB.Stream
    Set stm = New ADODB.Stream
                                      'strTemp = "c:\temp.bmp"
    Set rs1 = New ADODB.Recordset
    rs1.Open "select * from rs_http where htbh='" & frm_manage.Grid2.TextMatrix(frm_manage.Grid2.RowSel, 0) & "'", cn, , , adCmdText
        While Not rs1.EOF
             '*********将数据库中的文件读到硬盘上*************************
           ' strTemp = App.Path + "\temp\" + rs1!Name '`临时文件,用来保存读出的图片

            With stm
                 .Type = adTypeBinary
                 .Open
                 .Write rs1("tp").value
                 strTemp = App.Path & "\temp1\" & rs1!Name
                 .SaveToFile strTemp, adSaveCreateOverWrite
                 .Close
            End With
            Set itemX = lvwPic.ListItems.add(, App.Path & "\temp1\" & rs1!Name, rs1!Name, 1, 1)
            itemX.SubItems(1) = rs1!bz
            rs1.MoveNext
        Wend
    Set stm = Nothing
    rs1.Close
    Set rs1 = Nothing
    End Sub



'******************将图片文件保存到数据库中*************************
Sub SavePicToDb(cn As ADODB.Connection, table1 As String, field1 As String, file1 As String, id1 As String)
        On Error Resume Next
    Dim stm As ADODB.Stream
    Set stm = New ADODB.Stream
    Set rs1 = New ADODB.Recordset
    rs1.Open "select * from " & table1 & " where id = " & id1, cn, adOpenKeyset, adLockOptimistic
    With stm
        .Type = adTypeBinary
        .Open
        .LoadFromFile file1  'DLG.FileName
    End With
    With rs1
         .Fields(field1) = stm.Read
         .Update
    End With
    rs1.Close
    Set rs1 = Nothing
End Sub



#2


你用http://www.google.com一搜吧

肯定有很多解决方案的

#3


给一个vb的例子给你
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim stm As ADODB.Stream

Private Sub SavePictureToDB(cn As ADODB.Connection)
'将BMP图片存入数据库
On Error GoTo EH
    Set stm = New ADODB.Stream
    rs.Open "select ImagePath,ImageValue from tbl_Image", cn, adOpenKeyset, adLockOptimistic
    CommonDialog1.ShowOpen
    Text1.Text = CommonDialog1.FileName
    
    With stm
         .Type = adTypeBinary
         .Open
         .LoadFromFile CommonDialog1.FileName
    End With
    With rs
         .AddNew
         .Fields("ImagePath") = Text1.Text
         .Fields("ImageValue") = stm.Read
         .Update
    End With
    rs.Close
    Set rs = Nothing
Exit Sub
EH: MsgBox Err.Description, vbInformation, "Error"
End Sub


Private Sub LoadPictureFromDB(cn As ADODB.Connection)
'载数据库中读出BMP图片
On Error GoTo EH
    Dim strTemp As String
    Set stm = New ADODB.Stream
    strTemp = "c:\temp.tmp" '临时文件,用来保存读出的图片
    rs.Open "select ImagePath,ImageValue  from tbl_image", cn, , , adCmdText
    With stm
        .Type = adTypeBinary
        .Open
        .Write rs("ImageValue")
        .SaveToFile strTemp, adSaveCreateOverWrite
        .Close
    End With
    Image1.Picture = LoadPicture(strTemp)
    Set stm = Nothing
    rs.Close
    Set rs = Nothing
Exit Sub
EH: MsgBox Err.Description, vbInformation, "Error"
End Sub

#4


学习!

#5




为什么不存放图片的路径

我喜欢只在数据库里面放路径

#6


'*************************************************************************
'**
'** 使用 ADODB.Stream 保存/读取文件到数据库
'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
'**
'** ----- 数据库连接字符串模板 ---------------------------------------
'** ACCESS数据库
'** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
'**     ";Data Source=数据库名"
'**
'** SQL数据库
'** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
'**     "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
'**
'*************************************************************************
'
'保存文件到数据库中
Sub s_SaveFile()
    Dim iStm As ADODB.Stream
    Dim iRe As ADODB.Recordset
    Dim iConcStr As String
    
    '数据库连接字符串
    iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
        ";Data Source=F:\My Documents\客户资料1.mdb"
    
    '读取文件到内容
    Set iStm = New ADODB.Stream
    With iStm
        .Type = adTypeBinary    '二进制模式
        .Open
        .LoadFromFile "c:\test.doc"
    End With
    
    '打开保存文件的表
    Set iRe = New ADODB.Recordset
    With iRe
        .Open "表", iConc, adOpenKeyset, adLockOptimistic
        .AddNew         '新增一条记录
        .Fields("保存文件内容的字段") = iStm.Read
        .Update
    End With
    
    '完成后关闭对象
    iRe.Close
    iStm.Close
End Sub

'从数据库中读取数据,保存成文件
Sub s_ReadFile()
    Dim iStm As ADODB.Stream
    Dim iRe As ADODB.Recordset
    Dim iConc As String
    
    '数据库连接字符串
    iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
        ";Data Source=\\xz\c$\Inetpub\zj\zj\zj.mdb"
    
    '打开表
    Set iRe = New ADODB.Recordset
    iRe.Open "tb_img", iConc, adOpenKeyset, adLockReadOnly
    iRe.Filter = "id=64"
    
    '保存到文件
    Set iStm = New ADODB.Stream
    With iStm
        .Mode = adModeReadWrite
        .Type = adTypeBinary
        .Open
        .Write iRe("img")
        .SaveToFile "c:\test.doc"
    End With
    
    '关闭对象
    iRe.Close
    iStm.Close
End Sub

#7


更多的参考我的贴子:
http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.4633905
交流--数据库中存/取文件(zjcxc)

#8


唉,
很麻烦呀!
虽然问题还是没有解决,
但是看在大家都这么热心的份上,
给分了!
我现在是用的存储路径的办法来做的,能用就好了!