求助,如何保存和显示jpg文件
用database ole blob 不能显示jpg文件,求好办法!
难过中,不知道是不是我保存文件错了,两种方法都不能
SQLCA.AutoCommit = True
ole_1.insertfile ( is_path+"\"+ls_filename)
lb_blob = ole_1.objectdata
UPDATEBLOB test
SET photo = :lb_blob
WHERE id = :id
USING SQLCA ;
SQLCA.AutoCommit = False
文件保存后,数据库里值是:0xD0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000000000010000000100000000000000001000000200000001000000FEFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
用picture方式显示的时候,提示:
---------------------------
JPEG Processing Error
---------------------------
Not a JPEG file: starts with 0xd0 0xcf
---------------------------
确定
---------------------------
保存时用FileRead()读入文件
//---------------------------------------------------------
//图片入库,处理大于32K的情况
//---------------------------------------------------------
integer i,li_cnt,li_rtn,li_filenum,loops
long flen, bytes_read
blob b, tot_b
string ls_id
SetPointer(HourGlass!)
flen = FileLength(p_1.PictureName)
If flen < 0 Then return
li_FileNum = FileOpen(p_1.PictureName,StreamMode!, Read!, LockRead!)
IF flen > 32765 THEN
IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
ELSE
loops = 1
END IF
FOR i = 1 to loops
yield()
bytes_read = FileRead(li_FileNum, b)
tot_b = tot_b + b
NEXT
FileClose(li_FileNum)
ls_id = dw_1.GetItemString(dw_1.GetRow(),'id')
SQLCA.AutoCommit = True
UPDATEBLOB employee SET photo = :tot_b
WHERE id = :ls_id
USING SQLCA ;
IF SQLCA.SQLNRows > 0 THEN
COMMIT USING SQLCA ;
END IF
SQLCA.AutoCommit = False
显示时用SELECTBLOB取出,再p_1.SetPicture(b_jpg)
SQLCA.AutoCommit = True
SELECTBLOB photo
INTO :Emp_id_pic
FROM employee
WHERE employee.id = :ls_id
USING SQLCA ;
SQLCA.AutoCommit = False
If IsNull(Emp_id_pic) or len(Emp_id_pic) = 0 Then
p_1.SetPicture(Emp_pic)
messagebox('错误','没有照片!')
Return 1
Else
p_1.SetPicture(Emp_id_pic)
End If
将图片放到ole再取出blob保存入数据库,然后用数据窗口里的database ole blob显示
因为用
SQLCA.AutoCommit = True
ole_1.insertfile ( is_path+"\"+ls_filename)
lb_blob = ole_1.objectdata
UPDATEBLOB test
SET photo = :lb_blob
WHERE id = :id
USING SQLCA ;
SQLCA.AutoCommit = False
会造成存和读的格式不统一