VB问题——二进制文件与数据库

ghw 2000-12-26 10:26:00
<问题:>
怎么把文件以二进制方式读入数据库(MS SQL Server 7),在需要时读出并重新生成文件?
请大家指教!

--------------------------
<具体情况:>
我用ADO的AppendChunk把一个从文件读出的二进制流(Byte数组)放入了数据库的image字段,但用GetChunk读出后(只能读出Variant型变量),怎么也转不回原来的二进制流(写入文件后不对)。
...全文
177 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_east_key 2000-12-28
  • 打赏
  • 举报
回复
请到http://www.etechbase.net/advsearch.php,将你这个问题输入到检索框,然后选择准确匹配查询,应该可以帮助你解决这个问题的。
wuccc 2000-12-26
  • 打赏
  • 举报
回复
贴上你的代码
ghw 2000-12-26
  • 打赏
  • 举报
回复
大家帮帮忙啊!
ghw 2000-12-26
  • 打赏
  • 举报
回复
to wuccc:

下面是我用于测试的程序的代码:
按钮Command_open:用于打开一个文件,将其内容存入二进制数组varFile()。
按钮Command_save:用于把二进制数组中的内容存入数据库的image型字段。
按钮Command_read:用于按一个id号,将二进制字段内容取出,并存入文件。


------------------------------------------------------------------------
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command

Dim varFile() As Byte
Dim FileLength, i As Long
Dim conChunkSize As Long

Private Sub Command_open_Click()

CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & _
"(*.txt)|*.txt|Batch Files (*.bat)|*.bat"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowOpen

' 打开文件
' read from file,save it in varFile()
Text_filename.Text = CommonDialog1.FileName
i = 0

Open Text_filename.Text For Binary As #1
FileLength = LOF(1)
If FileLength > 100000 Then
conChunkSize = FileLength / 100
Else
conChunkSize = 1000
End If
ReDim varFile(FileLength-1)
Get #1, , varFile
Close #1

MsgBox "FileLength: " & FileLength
Exit Sub
ErrHandler:
' 用户按了“取消”按钮
Exit Sub
End Sub

Private Sub Command_read_Click()
Dim SQL, ss As String
Dim varContent, varChunk22 As Variant
Dim varByte() As Byte

'从数据库中读出文件内容,写入varContent
SQL = "select * from test1 where "
ss = "id=" & Text2.Text
SQL = SQL + ss + ";"
MsgBox "SQL: " & SQL

rs.CursorLocation = adUseServer
rs.Open SQL, conn, adOpenDynamic, adLockPessimistic
FileLength = rs.Fields("content2").ActualSize
MsgBox "FileLength: " & FileLength

i = 0
Do While i < FileLength
varChunk22 = rs.Fields("content2").GetChunk(conChunkSize)
varContent = varContent & varChunk22
i = i + conChunkSize
Loop
rs.Close

MsgBox "length of varContent: " & Len(varContent)

'将varContent内容转换为Byte类型,存入varByte()
??????????
这段代码怎么编?

'将varByte()写入磁盘
Open "d:\abc" For Binary As #2
Put #2, , varByte
Close #2
End Sub

Private Sub Command_save_Click()
Dim maxid As Integer
Dim varChunk As Variant

'先取出数据库中的最大记录号
rs.CursorLocation = adUseServer
rs.Open "select count(*) as count_all from test1;", conn, adOpenDynamic, adLockPessimistic
maxid = rs.Fields("count_all") + 1
rs.Close
MsgBox "maxid: " & maxid

'使用AppendChunk方法,将从文件得到的内容varFile()存入数据库
rs.CursorLocation = adUseServer
rs.Open "select * from test1;", conn, adOpenDynamic, adLockPessimistic
rs.AddNew
rs.Fields("id") = maxid
rs.Fields("descripe") = Text_filename.Text
MsgBox "ready to insert the file content!"
i = 0
Do While i < FileLength
varChunk = LeftB(RightB(varFile(), FileLength - i), conChunkSize)
rs.Fields("content2").AppendChunk varChunk
i = i + conChunkSize
Loop
MsgBox "insert the file content over!"

rs.Update
MsgBox "Update!"
rs.Close

End Sub


Private Sub Form_Load()
Dim connstr As String
'打开数据库
connstr = "Provider=SQLOLEDB.1;Integrated Security=SSPI; " & _
"Persist Security Info=False;Initial Catalog=mydata;" & _
"Data Source=ghw"
conn.Open connstr

conChunkSize = 1000
End Sub


Private Sub Form_Unload(Cancel As Integer)
conn.Close
Set conn = Nothing
End Sub

------------------------------------------------------------------------

本文涵盖了使用Visual Basic (VB) 进行编程时遇到的各种问题及解决方案,包括但不限于安装程序本地化、OLE DB错误处理、MDI ActiveX封装、多进程结束、文件名显示、系统信息提取、SQL查询、字符串连接、EEPROM操作、二进制文件读取、数据库连接、数据导入导出、权限提升、串口通信、多媒体处理、网络编程、浏览器控件使用、数据库操作、Excel导出、图片显示、数据库中文支持、颜色区域显示、远程用户识别、网页自动提交、数据网格批量录入、网页同步、函数调用、硬件信息读取、编译自动化、软件许可验证、批量操作、数据采集、编程书籍获取、网络版系统使用、打印问题、按钮交互、属性修改、实时曲线绘制、控件数据绑定、对话框保存、前端开发、后端开发、移动开发、游戏开发、大数据开发、开发工具、嵌入式硬件、嵌入式电路知识、嵌入式开发环境、音视频基础、音视频直播流媒体、图像处理AR特效、AI音视频处理、测试、基础运维、DevOps、操作系统、云计算厂商、自然语言处理、区块链、隐私计算、文档协作与知识管理、版本控制、项目管理与协作工具、有监督学习、无监督学习、半监督学习、强化学习、数据安全、数据挖掘、数据结构、算法、非IT技术、自动推理、人工神经网络与计算、自动驾驶、数据分析、数据工程、数据挖掘、程序设计方法、数据库理论、代码管理工具

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧