图片能直接调用,可WORD文档呢??

解决方案 »

  1.   

    我不是说存图片文件,我是说存Picture等调用的图片。
      

  2.   

    是吧,这样Word文档该怎么办呢?
      

  3.   

    巧啊,我刚完成的一个项目就是实现这样的功能,不光是存储而且还要编辑。不光是Word也包括Excel,PhotoShop等等。
      

  4.   

    to Wind_LQ(风
    介绍介绍。
      

  5.   

    肯定可以的,读出来就按二进制写个文件吗!easy!
      

  6.   

    然后在程序中调用Word的文本呢?
      

  7.   

    存储就是按照一般的读写BLOB字段的方法,在MSDN中都有的。打开我还是用Word打开的,如果是其他文档就用相应的程序打开,也就是按照系统的关联。我是先把要打开的文档写到磁盘上然后用打开的,当然跟好一点的可以用VBA调用Word,另外一个项目组就是用这个方法的,但是我觉得这样做的缺点是并不是所有的程序都可以用这个方法,向Flash、Photoshop很多都不可以这样实现
      

  8.   

    打开文件可以用这个命令实现shell "start path\filename.doc"
    也可以调用ShellExecute这个API函数来实现。
      

  9.   

    谢谢Wind_LQ, 提供较好的思路,我来试试。
      

  10.   

    image字段可以存储任何二进制数据,就看你怎么处理读出来的数据了
      

  11.   

    你看MSDN上的帮助吧,appendchunk方法,你用的是ADO吗
      

  12.   

    就象foxmail收到的附件哪样,打开时还是用word打开。用一个图标连接到数据库的这一个word文件,打开时采用dde或ole, 我也在寻找解决方法。
      

  13.   

    easy! word是用vb开发的(大部分).
    要代码留E-MAIL地址
      

  14.   

    我去书店查找,没有找到此类资料。
    [email protected]
      

  15.   

    MSDN看了很久,没看出什么名堂。水平,水平,唉!
      

  16.   

    tool(最终幻想) 
    可否贴出代码?
      

  17.   

    用ADO的Recordset的Getchunk和Setchunk两个方法,可以读取二进制字段.
    先把要存的图片存到一个磁盘文件中,再用文件读取二进的方法把数据写到库里的二进制字段.
    这个方法不单可以保存图片,任何磁盘文件都可以保存(word文档,mp3歌,甚至应用程序).
    这是我原来给别人解决存图片时写的.
    调用时这下面这个API:
    VB声明 
    Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 
    说明 
      查找与指定文件关联在一起的程序的文件名 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hwnd Long,指定一个窗口的句柄,有时候,windows程序有必要在创建自己的主窗口前显示一个消息框 
    lpOperation String,指定字串“open”来打开lpFlie文档,或指定“Print”来打印它 
    lpFile String,想用关联程序打印或打开一个程序名或文件名 
    lpParameters String,如lpszFlie是可执行文件,则这个字串包含传递给执行程序的参数 
    lpDirectory String,想使用的完整路径 
    nShowCmd Long,定义了如何显示启动程序的常数值。参考ShowWindow函数的nCmdShow参数 
      

  18.   

    bestwishes(新手),不要无聊嘛,扎扎实实搞点东西。
      

  19.   

    可以存入
    我用DELPHI写过类似的代码,不过很长时间啦,代码不太记得
      

  20.   

    我用了如下命令,但好象存入的东西不对。
    Dim file As String
    file = "hh.doc"
    Me.Adodc1.Recordset.Fields("tx").AppendChunk file
      

  21.   

    因为我有的是一段通用的代码,所以比较复杂,其中牵涉很多地方不光是BLOB的读写。我建议你可以看看MSDN中关于appendchunk和getchunk部分的例子,修改一下应该就可以了。如果不行我把我现在的那个模块给你。
      

  22.   

    我看了MSDN,没有查到。我专门去买了两张D版MSDN。要不你给了模块我看看,可能会弄出点头绪来。先谢了。
      

  23.   

    to Wind_LQ(风)
    你可以发到我邮箱上:jqsoft#163.com
      

  24.   

    MSDN中的例子,你先看看。我程序明天给你AppendChunk 和 GetChunk 方法范例
    该范例使用 AppendChunk 和 GetChunk 方法用其他记录中的数据填写图像字段。Public Sub AppendChunkX()   Dim cnn1 As ADODB.Connection
       Dim rstPubInfo As ADODB.Recordset
       Dim strCnn As String
       Dim strPubID As String
       Dim strPRInfo As String
       Dim lngOffset As Long
       Dim lngLogoSize As Long
       Dim varLogo As Variant
       Dim varChunk As Variant
       
       Const conChunkSize = 100   ' 打开连接
       Set cnn1 = New ADODB.Connection
          strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       cnn1.Open strCnn
       
       ' 打开 pub_info 表。
       Set rstPubInfo = New ADODB.Recordset
       rstPubInfo.CursorType = adOpenKeyset
       rstPubInfo.LockType = adLockOptimistic
       rstPubInfo.Open "pub_info", cnn1, , , adCmdTable
       
       ' 提示复制徽标。
       strMsg = "Available logos are : " & vbCr & vbCr
       Do While Not rstPubInfo.EOF
          strMsg = strMsg & rstPubInfo!pub_id & vbCr & _
             Left(rstPubInfo!pr_info, InStr(rstPubInfo!pr_info, ",") - 1) & _
             vbCr & vbCr
          rstPubInfo.MoveNext
       Loop
       strMsg = strMsg & "Enter the ID of a logo to copy:"
       strPubID = InputBox(strMsg)
       
       ' 将徽标复制到大块中的变量。
       rstPubInfo.Filter = "pub_id = '" & strPubID & "'"
       lngLogoSize = rstPubInfo!logo.ActualSize
       Do While lngOffset < lngLogoSize
          varChunk = rstPubInfo!logo.GetChunk(conChunkSize)
          varLogo = varLogo & varChunk
          lngOffset = lngOffset + conChunkSize
       Loop
       
       ' 从用户得到数据。
       strPubID = Trim(InputBox("Enter a new pub ID:"))
       strPRInfo = Trim(InputBox("Enter descriptive text:"))
       
       ' 添加新记录,将徽标复制到大块中。
       rstPubInfo.AddNew
       rstPubInfo!pub_id = strPubID
       rstPubInfo!pr_info = strPRInfo   lngOffset = 0 ' 重置位移。
       Do While lngOffset < lngLogoSize
          varChunk = LeftB(RightB(varLogo, lngLogoSize - lngOffset), _
             conChunkSize)
          rstPubInfo!logo.AppendChunk varChunk
          lngOffset = lngOffset + conChunkSize
       Loop
       rstPubInfo.Update
       
        ' 显示新添加的数据。
       MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _
          "Description: " & rstPubInfo!pr_info & vbCr & _
          "Logo size: " & rstPubInfo!logo.ActualSize   ' 删除新记录,因为这只是演示。
       rstPubInfo.Requery
       cnn1.Execute "DELETE FROM pub_info " & _
          "WHERE pub_id = '" & strPubID & "'"   rstPubInfo.Close
       cnn1.Close   End Sub
      

  25.   

    我也想看看谢谢[email protected]
      

  26.   

    看看数据驿站的iOffice就知道了
    http://www.dbstep.com 产品信息里的iOffice文档管理
      

  27.   

    导入按钮
    Private Sub CmdImport_Click()
        Dim TmpRs As Recordset '临时记录集
        Dim SiZe As Long      '文件大小
        Dim FileNo As Long '文件号
        Dim FieldSize As Long '字段大小
        Dim bit() As Byte
        Dim I As Long
        Dim TmpFileTitle As String
        Const MAX_FIELD_SIZE = 1073741824  '最大存储量为2G   
        FileNo = FreeFile
        On Error Resume Next
        MBbook = Me![FootChild].Form.Book
        TmpDialog.Filename = ""
        TmpDialog.Filter = "(*.*)|*.*"
        TmpDialog.ShowOpen
        '判断打开对话框中是否选择了文件
        If Dir(TmpDialog.Filename) = "" Or IsNull(TmpDialog.Filename) Or TmpDialog.Filename = "" Then
            Exit Sub
        Else
            Call Split(TmpDialog.Filename, "\", tmpfilename())
            TmpFileTitle = tmpfilename(UBound(tmpfilename))
            Open TmpDialog.Filename For Binary As FileNo
            SiZe = LOF(FileNo)
        
            If Not (IsNull(Linktxt) Or Linktxt = "10") Then
               Set TmpRs = CurrentDb.OpenRecordset("SELECT TW_WD_NR.T_BT,TW_WD_NR.O_NR FROM TW_WD_NR WHERE (((TW_WD_NR.T_WDBH) ='" & [Forms]![FS_SCWDset_F]![Linktxt] & "'));", 2, dbSeeChanges)
                 If TmpRs.Recordcount > 0 Then
                      If SiZe > 0 Then
                           With TmpRs
                                  .Edit
                                    For I = 0 To SiZe Step MAX_FIELD_SIZE
                                        FieldSize = IIf(SiZe - I < MAX_FIELD_SIZE, SiZe - I, MAX_FIELD_SIZE)
                                        ReDim bit(FieldSize - 1)
                                        Get FileNo, , bit
                                        .Fields("O_NR").Value = bit
                                        .Update
                                    Next
                            End With
                        End If
                        Close FileNo
                        With TmpRs
                             .Edit
                             .Fields("T_BT").Value = TmpFileTitle
                             .Update
                             .Close
                        End With
                  End If
             Else
                  Dim Rs As Recordset
                  Dim tmpsqlstr As String
                  Set Rs = CurrentDb.OpenRecordset("SELECT TW_WD_NR.T_WDBH FROM TW_WD_NR WHERE (((TW_WD_NR.T_FLBH) ='" & [Forms]![FS_SCWDset_F]![HeadLink] & "'));", 2, dbSeeChanges)
                  Set TmpRs = FootChild.Form.RecordsetClone
                  If Rs.Recordcount < 1 Then
                    With TmpRs
                      .AddNew
                      !T_WDBH = [Forms]![FS_SCWDset_F]![HeadLink] + "001"
                      !T_WDDH = [Forms]![FS_SCWDset_F]![HeadLink] + "001"
                      !T_FLBH = [Forms]![FS_SCWDset_F]![HeadLink]
                      !T_ZJC = "NEW"
                      !T_BT = TmpFileTitle
                      If SiZe > 0 Then
                        For I = 0 To SiZe Step MAX_FIELD_SIZE
                            FieldSize = IIf(SiZe - I < MAX_FIELD_SIZE, SiZe - I, MAX_FIELD_SIZE)
                            ReDim bit(FieldSize - 1)
                            Get FileNo, , bit
                            .Fields("O_NR").Value = bit
                           .Update
                        Next
                        End If
                      .Update
                    End With
                  Else
                    With TmpRs
                      .AddNew
                      '---------------------------获得最大票号----------------------------
                      tmpsqlstr = "SELECT Max(TW_WD_NR.T_WDBH) FROM TW_WD_NR WHERE (((TW_WD_NR.T_FLBH)='" & [Forms]![FS_SCWDset_F]![HeadLink] & "'));"
                      !T_WDBH = GetIDMax(tmpsqlstr)
                      !T_WDDH = GetIDMax(tmpsqlstr)
                      !T_FLBH = [Forms]![FS_SCWDset_F]![HeadLink]
                      !T_ZJC = "NEW"
                      !T_BT = TmpFileTitle
                        If SiZe > 0 Then
                        For I = 0 To SiZe Step MAX_FIELD_SIZE
                            FieldSize = IIf(SiZe - I < MAX_FIELD_SIZE, SiZe - I, MAX_FIELD_SIZE)
                            ReDim bit(FieldSize - 1)
                            Get FileNo, , bit
                            .Fields("O_NR").Value = bit
                           .Update
                        Next
                        End If
                      .Update
                    End With
                  End If
            End If
        End If
        Close FileNo
        Me![FootChild].Form.Requery
        Me![FootChild].Form.Book = MBbook
        
    End Sub导出操作
    Private Sub CmdExport_Click()
        Dim TmpRs As Recordset '临时记录集
        Dim tmpsqlstr As String
        Dim FileNo As Long '文件号
        Dim bit() As Byte '字节数组
        Dim I As Long
        
        Dim TmpFilter As String
        
        FileNo = FreeFile
         'Fu 2000-11-15
         '为 以下的Sql添加一个条件  内容不能为空
        tmpsqlstr = "SELECT TW_WD_NR.* FROM TW_WD_NR WHERE (((TW_WD_NR.O_NR) Is Not Null) AND ((TW_WD_NR.T_WDBH)='" & [Forms]![FS_SCWDset_F]![Linktxt] & "'));"
        Set TmpRs = CurrentDb.OpenRecordset(tmpsqlstr, 2, dbSeeChanges)
        If TmpRs.Recordcount > 0 Then
        
            Call Split(TmpRs.Fields("T_BT").Value, ".", tmpfilename())
            TmpFilter = tmpfilename(UBound(tmpfilename))
                
            With TmpDialog
                .Filename = ""
                .Filter = "(*." & TmpFilter & ")|*." & TmpFilter
                .ShowSave
            End With
                
                '将数据库中的文档内容存入指定文件中
            If IsNull(TmpDialog.Filename) Or TmpDialog.Filename = "" Then
                Exit Sub
            Else
                Open TmpDialog.Filename For Binary As FileNo
                On Error GoTo 0
                
                Set TmpRs = CurrentDb.OpenRecordset(tmpsqlstr, 2, dbSeeChanges)
                With TmpRs
                   
                   
                    Do Until .EOF
                        bit = .Fields("O_NR").Value
                        Put FileNo, , bit
                        .MoveNext
                    Loop
                End With
                Close FileNo
            End If
        Else
           msgbox "没有相应内容,所以无法导出!", 48, "系统提示"
           Exit Sub
        End If
        
    End Sub导出显示
    Private Sub CmdWD_Click()
        Dim TmpRs As Recordset '临时记录集
        Dim tmpsqlstr As String
        Dim FileNo As Long '文件号
        Dim bit() As Byte '字节数组
        Dim I As Long
        Dim CurrentPath As String
        Dim TmpFile As String
        Dim Tmpstr As String
        
        FileNo = FreeFile
        CurrentPath = curdbpath
        Tmpstr = CurrentPath & "TmpDir"
        TmpFile = ""
        On Error Resume Next
        If Dir(Tmpstr, vbDirectory) = "" Then
          MkDir Tmpstr
        End If
        tmpsqlstr = "SELECT TW_WD_NR.T_BT,TW_WD_NR.O_NR FROM TW_WD_NR WHERE (((TW_WD_NR.T_WDBH) ='" & [Forms]![FS_SCWDset_F]![Linktxt] & "'));"
        Set TmpRs = CurrentDb.OpenRecordset(tmpsqlstr, 2, dbSeeChanges)
        
        If IsNull(TmpRs.Fields("O_NR").Value) Then
           msgbox "没有相应内容,所以无法显示!", 48, "系统提示"
           Exit Sub
        End If
        
        If TmpRs.Recordcount > 0 Then
                TmpFile = Tmpstr & "\" & TmpRs.Fields(0).Value
                Open TmpFile For Binary As FileNo
                On Error GoTo 0
                
                Set TmpRs = CurrentDb.OpenRecordset(tmpsqlstr, 2, dbSeeChanges)
                With TmpRs
                    Do Until .EOF
                        bit = .Fields("O_NR").Value
                        Put FileNo, , bit
                        .MoveNext
                    Loop
                End With
                Close FileNo
        End If
        
          If TmpFile <> "" Then
              ShellExecute 0, vbNullString, TmpFile, "", "", vbNormalFocus
          Else
              msgbox "不能浏览,确认是否有文件导出后再浏览!", 48, "系统提示"
          End IfEnd Sub
      

  28.   

    我现在手头上有一个项目,其中也涉及到要把格式化文本的内容存到image字段,然后在客户端显示出来,最近搞的我头昏脑涨,现在看到了楼上各位热心朋友的指点,对我帮助很大,谢谢啦.....
    to Wind_LQ(风)
    我也想要那份资料,可以吗,谢谢。[email protected]
      

  29.   

    '向数据库写文件'连接对象
    Dim Data As New Recordset
    '记录集对象
    Const Default_BlockSize = 4096
    '读写BLOB字段时,默认块的长度
    Dim Block() As Byte
    '把数据分成块
    Dim Size As Long
    '数据长度
    '-----------------------------------------------
    '设置游标类型
    Connect.CursorLocation = adUseClient
    Data.CursorType = adOpenStatic
    Data.LockType = adLockOptimistic
    '设置连接字符串
    Connect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=test.mdb"
    '打开连接
    Connect.Open
    '得到记录集
    Data.Open "SELECT * FROM FILE WHERE ID='123456'", Connect, , , adCmdText
    If Data.RecordCount = 0 Then Exit Sub
    '打开文件
    Open "test.doc" For Binary Access Read As #1
    '得到二进制数据的长度
    Size = LOF(1)
    '先按照默认块的大小申请空间
    ReDim Block(1 To Default_BlockSize)
    Do While Size > 0
      '如果剩下的数据少于默认块的大小,则按照剩余的数据量申请空间
      If Size < Default_BlockSize Then ReDim Block(1 To Size)
      '从文件中读取一块数据写到字段中
      Get #1, , Block
      Data.Fields("BLOB").AppendChunk Block
      '修改剩余数据量
      Size = Size - Default_BlockSize
      '响应系统消息
      DoEvents
    Loop
    '释放空间
    ReDim Block(0)
    '保存字段
    Data.Update
    '关闭文件
    Close #1
    Set Data = Nothing
    Connect.Close
      

  30.   

    '把数据库中的文件写到磁盘'连接对象
    Dim Data As New Recordset
    '记录集对象
    Const Default_BlockSize = 4096
    '读写BLOB字段时,默认块的长度
    Dim Block() As Byte
    '把数据分成块
    Dim Size As Long
    '数据长度
    '-----------------------------------------------
    '设置游标类型
    Connect.CursorLocation = adUseClient
    Data.CursorType = adOpenStatic
    Data.LockType = adLockOptimistic
    '设置连接字符串
    Connect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=test.mdb"
    '打开连接
    Connect.Open
    '得到记录集
    Data.Open "SELECT * FROM FILE WHERE ID='123456'", Connect, , , adCmdText
    If Data.RecordCount = 0 Then Exit Sub
    '打开文件
    Open "test1.doc" For Binary Access Write As #1
    '得到二进制数据的长度
    Size = Data.Fields("BLOB").ActualSize
    '先按照默认块的大小申请空间
    ReDim Block(1 To Default_BlockSize)
    Do While Size > 0
      '如果剩下的数据少于默认块的大小,则按照剩余的数据量申请空间
      If Size < Default_BlockSize Then
        ReDim Block(1 To Size)
        Block = Data.Fields("BLOB").GetChunk(Size)
      Else
        '从字段中读取一块数据写到文件中
        Block = Data.Fields("BLOB").GetChunk(Default_BlockSize)
      End If
      '将数据写到文件中
      Put #1, , Block
      '修改剩余数据量
      Size = Size - Default_BlockSize
      '响应系统消息
      DoEvents
    Loop
    '释放空间
    ReDim Block(0)
    '关闭文件
    Close #1
    Set Data = Nothing
    Connect.Close