读写image字段

rosytree 2000-07-31 09:28:00
我发现用updateblob语句无法将数据写入image字段,程序也没有任何错误提示,我检查过所传的blob变量,是正确的,请各位大虾指教,感激不尽。
...全文
234 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
viv_wangsc 2000-12-23
  • 打赏
  • 举报
回复
此外,SQLSERVER7使用blob语句好象有问题,需要到www.sybase.com.cn下载新的for sql7的pb6.5的直连程序
下面是我使用blob的一些语句,希望对你有参考:

blob lb_file,lb_tmp
long ll_flen, ll_bytes_read, ll_new_pos
integer li_fnum, li_loops, li_i

openWithParm(w_pub_wait,'正在上传版本到服务器,上传文件:['+ as_file +']请稍侯!')

//取文件长度
ll_flen = FileLength(as_file)
if ll_flen<0 then return -1
//因为一次最多只能读出32765个字节,所以需要计算重复读的次数
IF ll_flen > 32765 THEN
IF Mod(ll_flen, 32765) = 0 THEN
li_loops = ll_flen/32765
ELSE
li_loops = (ll_flen/32765) + 1
END IF
ELSE
li_loops = 1
END IF

//读取文件
ll_new_pos = 1
li_fnum = FileOpen(as_file ,StreamMode!)

for li_i = 1 to li_loops
ll_bytes_read = FileRead(li_fnum, lb_tmp)
lb_file = lb_file + lb_tmp
next

FileClose(li_fnum)

//更新数据库中的文件清单
UPDATEBLOB wh_wjb SET wjnr= :lb_file
WHERE wjmc=:as_file;
if sqlca.sqlcode<>0 then
rollback;
return -1
end if
commit;

close(w_pub_wait)

return 1
michaelzhang 2000-12-23
  • 打赏
  • 举报
回复
没错,长度问题。同意wwwunix。
romance_zhang 2000-12-23
  • 打赏
  • 举报
回复
试试qianhaiyuan的方法。
selectblob、updateblob的操作结果无法通过sqlca.sqlcode判断,要判断sqlnrows=1测试是否成功。
qianhaiyuan 2000-12-11
  • 打赏
  • 举报
回复
用的是MS SQL Server 7吗?别忘了SQL Server数据库要:

sqlca.autocommit=True

UpdateBlob ......

sqlca.autocommit=false

MHB 2000-12-09
  • 打赏
  • 举报
回复
你用的一定是 MS SQL Server 7 ,是PB6.5 或 PB6 的直连 DLL 有Bug, 请下载新的直连程序!
PB7 就没这个问题。
mingjob 2000-11-09
  • 打赏
  • 举报
回复
  pb内嵌的fileread()最多函数每次最多只能读出32,765 bytes大小的文件,所以估计你用updateblob语句无法将数据写入image字段是因为这个问题。你可以在使用fileread()函数之前用FileLength()函数获得文件大小,再用文件大小除以32765可以得到一个整数,用此整数作为你的循环次数,循环读出你要插入的图片文件即可。你可以看看下面的例程:

//定义使用到的变量
string docname, named, ls_filepath

integer value, fh ,id, li_FileNum, loops, i

long flen, bytes_read, new_pos, ll_filesize

blob b, tot_b, Emp_pic,Emp_pic_sel

//
value = GetFileOpenName("Select Picture File", &
+ docname, named, "jpg", &
+ "Bmp Files (*.BMP),*.BMP," &
+ "Jpg Files (*.JPG),*.jpg")



// Set a wait cursor

SetPointer(HourGlass!)

// Get the file length, and open the file

IF value = 1 THEN

flen = FileLength(docname)

li_FileNum = FileOpen(docname, &
StreamMode!, Read!, LockRead!)

// Determine how many times to call FileRead

IF li_FileNum <> -1 THEN

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

END IF

// Read the file

new_pos = 1

FOR i = 1 to loops
bytes_read = FileRead(li_FileNum, b)
tot_b = tot_b + b

NEXT

FileClose(li_FileNum)
Emp_pic = tot_b

//更新数据库图片信息

UPDATEBLOB game_field SET image = :Emp_pic WHERE id = : id;

//判断往数据库中插入图片是否成功

IF (sqlca.sqlcode = 0) THEN

messagebox("提示","插入图片成功!")

ELSE

messagebox("提示","插入图片失败!", Exclamation!)
return

END IF

祝你好运!

唏嘘的猪肉贩 2000-11-08
  • 打赏
  • 举报
回复
关心
wwwunix 2000-08-08
  • 打赏
  • 举报
回复
要用循环,每次读入32K字节,然后将每次读入的32K字节合成为一个大的blob就可以了。

1,075

社区成员

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

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