实在惨愧,我做了vb+Ado+sqlser2000两年,可有一个问题一直没注意到!
就是用vb+ado+sqlserver2000做一个人事系统时,打印职员资料,需要打印图片,可怎么存放好呢,在数据库里是放路径还是放图片,打印又怎么做,用什么控件,请各位帮帮忙小弟急死了.

解决方案 »

  1.   

    数据库中只存储图片路径
    使用picture
      

  2.   

    放在Database里可以,保存图片二进制信息,打印的时候从database得到Image的信息。
    也可以只保存路径,使用的时候loadpic
      

  3.   

    象人事系统这样的东西,人员的资料自然是储存在数据库里面,很方便将来的移植等问题.至于打印就更简单,使用vb自带的datareport就很方便.
      

  4.   

    兄弟,用FarPoint公司的Spread,最新版是6.0,把图片加载进单元格,不用写任何代码就可以打印预览或直接打印!
      

  5.   

    '将图片保存到数据库
    '******************将图片文件保存到数据库中*************************
    '需要添加commondialog控件
    Sub savePicToDB(CN As ADODB.Connection)
        Dim stm As ADODB.Stream
        Set stm = New ADODB.Stream
        Set rs1 = New ADODB.Recordset
        rs1.Open "select * from tablename", cn1, adOpenKeyset, adLockOptimistic
        With stm
            .Type = adTypeBinary
            .Open
            .LoadFromFile dlg.FileName
        End With
    With rs1
         .AddNew
         .Fields("tp") = stm.Read
         .Update
    End With
    rs1.Close
    Set rs1 = Nothing
    End Sub
      

  6.   

    '将图片或者文件从数据库中读出
    '需要添加一个listview
    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
      

  7.   

    同意wingchi(一颗红心,两手准备)的做法
      

  8.   

    可以调用excel打印,
    在数据库中存储图片路径,在填充到excel的worksheet中进行打印
    excel对象参考可以在office2000帮助文档中查找
      

  9.   

    http://sgreport.yeah.net
    http://www.uepoch.com
    众合打表,完美支持数据类表格、不规则表格、嵌套表格、票据套打等
    在c/s下与在b/s下效果完全一致
    首创web打印在服务端运行组件,客户端得到的是纯html页面,而打印显示效果与c/s下完全一致,包括斜线之类的特殊效果对于图片,支持一般的二进制格式、Access中的OLE对象格式、文件格式
      

  10.   

    '将图片文件存入Ado -image字段
    Public Sub SavePictureToAdodc(rs As ADODB.Recordset, ByVal filename As String, FieldName As String)
    Dim Length As Long, f As Integer
    ''''''''''''''''
    Dim pid As Long, pHnd As Long ' 分别声明 Process Id 及 Process Handle 变数
    p = "c:\arj a  c:\" + FieldName + ".arj " + filename + " -y"pid = Shell(p, vbHide) ' Shell 传回 Process Id
     
    pHnd = OpenProcess(SYNCHRONIZE, 0, pid) ' 取得 Process Handle
    If pHnd <> 0 Then
    Call WaitForSingleObject(pHnd, INFINITE) ' 无限等待,直到程序结束
    Call CloseHandle(pHnd)
    End If
    ''''''''''''''''''
    If pid = 0 Then
      MsgBox "Arj.exe未发现,请将该文件拷贝至c:\", vbCritical, "提示 "
      Exit Sub
    End If
        Length = FileLen("c:\" + FieldName + ".arj")
        ReDim barray(Length) As Byte    f = FreeFile
        Open "c:\" + FieldName + ".arj" For Binary As #f
        Get #f, , barray
        Close #1
        
        rs(FieldName).Value = barray
        
    End Sub
    '将image调入图片文件
    Public Sub LoadPictureFromAdodc(rs As ADODB.Recordset, FieldName As String, Pict As Image, filename As String)
        Dim Length As Long, f As Integer
        Length = Len(rs(FieldName).Value)
        f = FreeFile
        barray = rs(FieldName).Value
        Open "c:\" + FieldName + ".arj" For Binary As #f
        Put #f, , barray
        Close #1
        
        
    ''''''''''''''''Dim pid As Long, pHnd As Long ' 分别声明 Process Id 及 Process Handle 变数
    p = "c:\arj e  c:\" + FieldName + ".arj  c:\" + " -y"
    pid = Shell(p, vbHide) ' Shell 传回 Process IdpHnd = OpenProcess(SYNCHRONIZE, 0, pid) ' 取得 Process Handle
    If pHnd <> 0 Then
    Call WaitForSingleObject(pHnd, INFINITE) ' 无限等待,直到程序结束
    Call CloseHandle(pHnd)
    End If
    ''''''''''''''''''
    If pid = 0 Then
      MsgBox "Arj.exe未发现,请将该文件拷贝至c:\", vbCritical, "提示 "
      Exit Sub
    End IfOn Error GoTo er1
        Pict.Picture = LoadPicture(filename)
    GoTo ok
    er1:
    'MsgBox "调入 " + FieldName + " 失败!" + Chr(13) + Chr(13) + err.Description, vbCritical, "调入图片"
    ok:
    End Sub
    方法旧了点(99年用过),希能有点帮助
      

  11.   

    用Image存放图片。
    要打印的时候下载到机器。