Foxtable(狐表)用户栏目专家坐堂 → 在sqlserver2008中的varbinary(MAX) 类型的文件,如何取出来呀?


  共有212人关注过本帖树形打印复制链接

主题:在sqlserver2008中的varbinary(MAX) 类型的文件,如何取出来呀?

帅哥哟,离线,有人找我吗?
ycwk
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1228 积分:8561 威望:0 精华:0 注册:2016/2/2 21:52:00
在sqlserver2008中的varbinary(MAX) 类型的文件,如何取出来呀?  发帖心情 Post By:2024/11/8 17:38:00 [只看该作者]

在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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/11/9 8:40:00 [只看该作者]

把二进制列的帮助都看一看:http://www.foxtable.com/webhelp/topics/2952.htm

 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1228 积分:8561 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By: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 

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/11/11 10:32:00 [只看该作者]

没有办法。只能保存为文件

 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1228 积分:8561 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2024/11/11 10:35:00 [只看该作者]

这段代码我以前用过啊,可以按ctrl+c 把文件复制到剪贴板中,这样在接下来再按ctrl+v的时候,可以复制到任何路径。

 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1228 积分:8561 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2024/11/11 10:35:00 [只看该作者]

上述代码执行的时候复制的是fileName列的内容,而不是执行的    上述代码,怎么让其按ctr+c后执行代码,而不是复制格子中的内容?
[此贴子已经被作者于2024/11/11 11:32:04编辑过]

 回到顶部