再次散掉所有家当: 一个非常郁闷的问题!不知是不是PB的bug 请大家发表一下看法 !!
其实是个老问: 一个图片处理问题:
=============================================================
我上传脚本是
=========================================================
///* 用大文本处理
long ll_row
ll_row = dw_1.getRow ()
if ll_row < 0 then return
gs_zh = dw_1.getItemString (ll_row, "幢号")
gs_dy = dw_1.getItemString (ll_row, "单元")
gs_lc = dw_1.getItemString (ll_row, "楼层")
ls_fh = dw_1.getItemString (ll_row, "房号")
String ls_FileName, ls_pathName, ls_currDir
int li_ret, li_filePtr, li_loops, i
long ll_fileLen, ll_bytes_read, ll_new_pos
blob lbb_read, lbb_total
ls_currDir = getCurrentDirectory () //当前路径
li_ret=GetFileOpenName("选择图片文件",ls_pathname,ls_filename, "jpg", &
"JPG文件(.jpg),*.jpg,BMP文件(.bmp),*.bmp" )
changeDirectory (ls_currDir)
IF Li_ret <= 0 then return
//messageBox ('', '')
setPointer (hourGlass!)
li_filePtr = fileOpen (ls_pathName, STREAMMODE!, READ!, Shared!)
if li_filePtr <> 1 then
messageBox ("错误", "打开图形文件失败!", stopSign!)
return
end if
ll_fileLen = fileLength (ls_pathname)
if ll_fileLen > 32766 then
li_loops = long ((ll_fileLen - 1)/32766) + 1
else
li_loops = 1
end if
messageBox (string (ll_fileLen) , string (li_loops) )
for i = 1 to li_loops step 1
ll_bytes_read = fileRead (li_filePtr, lbb_read)
lbb_total = lbb_total + lbb_read
ll_new_pos = ll_new_pos + ll_bytes_read
fileSeek (li_filePtr, ll_new_pos, FROMBEGINNING!)
next
FileClose (li_filePtr)
sqlca.autocommit = true
UPDATEBLOB 楼盘信息
SET 户型图 = :lbb_total
WHERE 幢号 = :gs_zh AND
单元 = :gs_dy AND
楼层 = :gs_lc AND
房号 = :ls_fh
USING SQLCA;
if SQLCA.SQLCode = 0 then
commit using sqlca;
messageBox ("提示", "保存图片成功!")
else
rollback using sqlca;
messageBox ("数据库错误", "保存图片失败!~r~n~r~n错误代码:" + &
string (sqlca.sqlDbCode) + "~r~n详细信息:" + &
sqlca.sqlERRText, stopSign!)
end if
sqlca.autocommit = false
=============================================================
读图片的脚本是:
==============================================================
/* 用大文本处理*/
long ll_row
ll_row = dw_1.getRow ()
if ll_row < 0 then return
gs_zh = dw_1.getItemString (ll_row, "幢号")
gs_dy = dw_1.getItemString (ll_row, "单元")
gs_lc = dw_1.getItemString (ll_row, "楼层")
ls_fh = dw_1.getItemString (ll_row, "房号")
//open (w_ckhxt)
//显示图片 - 用大文本处理 - 使用系统打开方式
blob lbb_pic, lb_temp
setpointer (hourGlass!)
sqlca.autocommit = true
SELECTBLOB 户型图
INTO :lbb_pic
FROM 楼盘信息
WHERE 幢号 = :gs_zh AND
单元 = :gs_dy AND
楼层 = :gs_lc AND
房号 = :ls_fh
USING SQLCA;
sqlca.autocommit = false
if SQLCA.SQLCode <> 0 then
messageBox ("数据库错误", "读取户型图失败!~r~n~r~n错误代码:" + &
string (sqlca.sqlDbCode) + "~r~n详细信息:" + &
sqlca.sqlERRText, stopSign!)
else
if len (lbb_pic) > 0 then
long ll_handle, ll_fileLen, i, ll_loops
ll_handle = FileOpen("Temp.jpg",StreamMode!, Write!, lockWrite!, replace!)
ll_fileLen = len(lbb_pic)
if ll_fileLen > 32766 then
ll_loops = long ((ll_fileLen - 1)/32766) + 1
else
ll_loops = 1
end if
messageBox (string (ll_fileLen) , string (ll_loops) ) //
For i=1 to ll_loops step 1
lb_temp = Blobmid(lbb_pic,(i - 1)*32765+1,32765)
filewrite(ll_handle,lb_temp)
Next
FileClose(ll_handle)
//打开
ShellExecute(handle(this), '', "Temp.jpg", "shell32.dll", '', 0)
else
messageBox ("提示", "还未上传户型图!", exclamation!)
end if
end if
setPointer (arrow!)
======================================================================
脚本其实都不用大家仔细看了,基本都是通常的处理方法 ,
问题:是我用ODBC连接时,在上传能全部上传(messageBox显示循环次数), 而在读取图片的时候不关怎么样都只能读取 32767字节 (messageBox提示),调式了老半天硬没找出错误,
刚才实在没办法了,才抱着试一试的心态,把连接方式改为直连(mss),却突然行了
但现在MSS连接方式行了,却存在其他问题,如:
SELECT "密码", "姓名"
INTO :ls_pwd, :ls_userName
FROM "Y系统用户"
WHERE "ID" = :ls_userId
USING sqlca;
如果在字段两端加上引号用mss连接会出现语法错误(而odbc连接则不会有错误),而偏偏我为了做区分,我一般都加了引号,真是郁闷至极!!
我就打算就将读取图片的连接方式改为MSS连接算了,因为程序里只有一个地方用要读图片!
================================================
我在网上搜索了一下,被图片搞郁闷了的人好真不少 :),所以在百忙之中发出此贴供大家分享(现在真的很忙,一般周末都没得休息)
现在请大家再讨论一下:
1:ODBC下读图片只能读32K是不是PB的BUG;
2:究竟ODBC连接和MSS连接以及OLE DB有些什么区别,具体什么时候用什么连接??
(全部家当就179分了)