ADO绑定Image控件内的图片未更新
编号:QA001794
建立日期: 1999年10月1日 最后修改日期:1999年10月1日
所属类别:
chenjian:
操作系统:win98,nt4.0
工具:vb6.0
问题:在自编一程序的数据库操作中,用ADO绑定Image控件内的图片在 image1.Picture = LoadPicture("C:\Win95\Setup.bmp") 后窗体上更新了,但ACCESS中却仍未更新,而文本等其他控件在修改后updata能更新。(在DATA控件绑定中则能更新)有何办法解决?请多指教!非常感谢!
回答:
具体的原因我也不太清楚,不过有一个办法可以解决这个问题,就是将图片文件按二进制方式打开后原封不动地写进数据库(使用SetChunk方法,请注意,建议使用动态Byte数组,不要使用字符串或变体,可能的话,一次性读文件到一个数组,在64M机器上打开4M以下的图片文件没有问题),同时存储该图片文件的扩展名和文件大小,要查看图片时,再使用GetChunk方法读出原先记下的文件长度到一二进制数组,找到Windows Temp目录后存为一个文件再打开。附简单程序如下(程序中如有错误,请自行调试):
数据库表为
0 编号(字符型)
1 图片(ole类型)
2 图片文件扩展名(字符型)
3 图片文件长度(长整型)
Function SavePicture(rstMain as adodb.recordset,strFileName as string)
dim FileHandle as string
dim lngLogoSize as long
dim varLogo() as byte
rstMain.Addnew
rstMain(0).value = txtBH.Text
FileHandle = FreeFile
Open strFileName For Binary As #FileHandle
lngLogoSize = FileLen(strFileName)
ReDim varLogo(lngLogoSize - 1)
Get #FileHandle, , varLogo() '数组名加()可以代表数组
rstMain(1).AppendChunk varLogo()
Close #FileHandle
rstMain(2) = Right(strFileName, 4)
rstMain(3) = lngLogoSize
rstMain.Update
end Function
function ShowPicture(rstMain as adodb.recordset,gTempPath as string)
'显示图片
Dim lngLogoSize As Long
Dim varLogo() As Byte
Dim strTempPath As String
Dim lResult As Long
Dim FileHandle As Long
strTempPath = gTempPath '请自行得到Temp路径
strTempFileName = strTempPath & "PctTemp" & rstMain(2) '存为一临时文件
FileHandle = FreeFile
Open strTempFileName For Output As #FileHandle
Close #FileHandle
Open strTempFileName For Binary As #FileHandle
lngLogoSize = rstMain(3)
ReDim varLogo(lngLogoSize - 1)
varLogo() = rstMain(1).GetChunk(lngLogoSize)
Put #1, , varLogo
Close #1
Set imgPreview.Picture = LoadPicture(strTempFileName)
end function
此问题由xieluo回答。
| |
|
|
| |
|
|