以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  在sqlserver2008中的varbinary(MAX) 类型的文件,如何取出来呀?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=194093)

--  作者:ycwk
--  发布时间:2024/11/8 17:38:00
--  在sqlserver2008中的varbinary(MAX) 类型的文件,如何取出来呀?
在sqlserver2008中的varbinary(MAX) 类型的文件,如何取出来呀?
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


用python代码已实现,现在我需要用foxtable把他上传的文件提取出来。谢谢!

import pyodbc

# 数据库连接字符串
conn_str = (
    r\'DRIVER={SQL Server};\'
    r\'SERVER=172.16.14.14;\'
    r\'DATABASE=collectdata;\'
    r\'UID=sa;\'
    r\'PWD=12345678\'

)

# 连接到数据库
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()

# 执行查询,假设你的表名为your_table,binary字段名为your_binary_field
cursor.execute("s elec t ItemFile from dbo.test where ID=1")

# 获取查询结果
rows = cursor.fetchall()

# 遍历结果集
for row in rows:
    # row[0] 是binary字段的值
    binary_data = row[0]

    # 指定要保存的文件路径和文件名
    file_path = \'d:\\salarysurvey.xlsx\'

    # 打开文件准备写入
    with open(file_path, \'wb\') as file:
        # 写入binary数据
        file.write(binary_data)

# 关闭数据库连接
cursor.close()
conn.close()

[此贴子已经被作者于2024/11/9 8:57:14编辑过]

--  作者:有点蓝
--  发布时间:2024/11/9 8:40:00
--  
把二进制列的帮助都看一看:http://www.foxtable.com/webhelp/topics/2952.htm
--  作者:ycwk
--  发布时间:2024/11/11 10:29:00
--  
以下代码是想在按下ctrl +c 的时候把文件复制在剪贴板中,现在文件已经能从二进制列中取出来了, 但是无法复制到剪贴板中,请问代码哪里有问题?


Dim cname As String = e.Table.cols(e.Table.colsel).name 
Dim TableName As String = e.Table.name
\'msgbox(TableName)


If cname = "FileName" Then
      Dim dr As DataRow = Tables("文件收发管理表").Current.DataRow
      Dim fl As String = ProjectPath & dr("FileName")
   \' MessageBox.show(fl) 
      
  If e.Control = True AndAlso e.KeyCode = Keys.C Then \'按下ctrl+C
     MessageBox.show("按下") 
     If dr.SQLLoadFile("FileUpload", fl) Then \'如果提取文件成功
       \'Dim Proc As New Process \'打开文件
       \'Proc.File = fl
       \'Proc.Start()
           \'以下三行为将文件路径复制到剪贴板中
           Dim ls As New System.Collections.Specialized.StringCollection
           ls.add(fl)
           MessageBox.Show(fl)
           My.Computer.Clipboard.SetFileDropList(ls)
         

           
     Else
       Messagebox.Show("附件提取失败,可能并不存在附件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
     End If 
  End If
End If 

--  作者:有点蓝
--  发布时间:2024/11/11 10:32:00
--  
没有办法。只能保存为文件
--  作者:ycwk
--  发布时间:2024/11/11 10:35:00
--  
这段代码我以前用过啊,可以按ctrl+c 把文件复制到剪贴板中,这样在接下来再按ctrl+v的时候,可以复制到任何路径。
--  作者:ycwk
--  发布时间:2024/11/11 10:35:00
--  
上述代码执行的时候复制的是fileName列的内容,而不是执行的    上述代码,怎么让其按ctr+c后执行代码,而不是复制格子中的内容?
[此贴子已经被作者于2024/11/11 11:32:04编辑过]