VB+sql问题(在线等待)

stevenqi 2002-06-13 01:51:56
怎么样将VB读出的图片存到SQL数据库中
...全文
19 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine 2002-06-13
  • 打赏
  • 举报
回复
在vb.net里好象不行啊。
get命令用了fileget代替。
如果想把一个内容赋值给数组,不行啊。
canli15 2002-06-13
  • 打赏
  • 举报
回复
请问楼上的,NumBlocks = FileLength \ BLOCKSIZE
这句的作用是什么呢。补充:
为什么在for 中不直接用filelength???
canli15 2002-06-13
  • 打赏
  • 举报
回复
请问楼上的,NumBlocks = FileLength \ BLOCKSIZE
这句的作用是什么呢。
yuhaii 2002-06-13
  • 打赏
  • 举报
回复
答案:
用来存储图片的字段PIC用Image类型:
包括读写两部分.
哎,舍不得呀,还是贴出来了,没有文件大小限制.

'***********************************************
Dim Conn As New ADODB.Connection
Dim FileName As String
Const BLOCKSIZE = 4096
Dim ADORst As New ADODB.Recordset 'ADODB Recordset
Dim ADOFld As ADODB.Field

Private Sub Command1_Click()

Save_Click

Dim arsfile As ADODB.Recordset
Dim aa As ADODB.Record
Dim n As Long
Dim arrBytes() As Byte


Set arsfile = New Recordset
arsfile.Open "select * from A_file where id=2", Conn, adOpenStatic, adLockOptimistic

n = arsfile.Fields("word").ActualSize
ReDim arrBytes(1 To n) As Byte
arrBytes = arsfile.Fields("PIC").GetChunk(n)

Open App.Path & "\test2.jpg" For Binary As #1
Put #1, , arrBytes
Close #1

End Sub

Private Sub Form_Load()
Set Conn = New Connection
Conn.CursorLocation = adUseClient
Conn.Provider = "MSDataShape"
Conn.Open "driver={sql server};server=10.0.0.1;uid=sa;pwd=;database=cmstest;"
ADORst.Open "A_File", Conn, adOpenDynamic, adLockOptimistic
'Set ADOFld.Recordset = ADORst '
End Sub

Private Sub SaveToDB(ByRef Fld As ADODB.Field, DiskFile As String)
Dim byteData() As Byte
Dim NumBlocks As Long
Dim FileLength As Long
Dim LeftOver As Long
Dim SourceFile As Long
Dim i As Long
SourceFile = FreeFile
Open App.Path & "\test.jpg" For Binary Access Read As SourceFile
FileLength = LOF(SourceFile)
If FileLength = 0 Then
Close SourceFile
MsgBox DiskFile
Else
NumBlocks = FileLength \ BLOCKSIZE
LeftOver = FileLength Mod BLOCKSIZE
Fld.Value = Null
ReDim byteData(BLOCKSIZE)
For i = 1 To NumBlocks
Get SourceFile, , byteData()
Fld.AppendChunk byteData()

Next i
ReDim byteData(LeftOver)
Get SourceFile, , byteData()
Fld.AppendChunk byteData()
Close SourceFile
End If
End Sub

Private Sub Save_Click()
ADORst.AddNew
ADORst("id").Value = 2
Set ADOFld = ADORst("PIC")
Call SaveToDB(ADOFld, FileName)

ADORst.Update
End Sub
abcmouse 2002-06-13
  • 打赏
  • 举报
回复
如果你网络应用的话,最好是存储到数据中,用楼上的说法;
如果本地应用,就没有所谓了,方便的话就存储路径和文件名(绝对路径)
tnt_tnt 2002-06-13
  • 打赏
  • 举报
回复
楼上的基本上是说到了点子上的!
在存储的时候确实要用到二进制的数据传输!
amao1997 2002-06-13
  • 打赏
  • 举报
回复
两种解决办法:
1、将路径与文件名存入数据库
2、在数据库表中建立BLOB等二进制大文本类型域。

真正的朋友

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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