努力了几天也没解决的问题,只好请教高手解答
lcFileName = GETFILE("BMP;jpg","图片文件:" ,"照片选取",0)picstr=FILETOSTR(lcFileName)
lcommand="update 资料信息表 set 资料图象 ='"+picstr+"'"
lcommand = lcommand +" where 文件编号 = " + thisform.txtyb.value
SET MULTILOCKS ON
if sql_comm(lcommand)
SELECT tmp_INFOR
=CURSORSETPROP("Buffering", 3, "tmp_INFOR")
endif
我在写一个按钮命令的时候碰到一个问题:我的意思是想把图片文件转换成字符串,然后把这个字符串存入到远程ACCESS数据库的一个表的字段中,该字段的类型为备注字段。如果我直接用命令“update tmp_table set 资料图象 = picstr where 文件编号 = thisform.txtyb.value”,就可以顺利的把字符串写进字段中,但tmp_table必须是一个自由临时表,而且因为我无法直接用“SELECT 资料信息表”命令,所以我在网上下了的函数 SQL_COMM(),函数如下。但又碰到了一个问题,如果是一般的UPDATE命令语句(就是把picstr直接用一定长度的字符串来代替)这个函数都运行正确,但就是当这个字符串是用FILETOSTR()函数取来的时候就是显示错误(上面的程序就是提示错误)。我怀疑是不是用函数FILETOSTR()取来的字符串过长了,于是我就把picstr赋值给了一个TEXT文本框,发现这个文本框只显示这个长串的前几个字符(我把picstr用STRTOFILE()输出成TXT文件可以看到完整的字符串)。举个例子一个小图,输出成TXT的时候字符串是“BM6 6 ( 靠靠”,但赋给TEXT文本框的时候只显示“BM6 ”。而且运行SQL_COMM()函数的错误提示就是操作语句‘update 资料信息表 set 资料图象 =’BM6 。这个问题困惑我很久了,哪位大哥或大姐可以帮我看看是什么原因阿,怎么解决这个问题。非常感谢了!
**************************************************************
*
* FUNCTION SQL_COMM 执行 SQL 命令
* 参数:cCommandStr: 需要执行的语句 cCursorName: 数据保存表名
* cErrorStr: 错误信息提示 cTitleStr:错误窗口标题
* 返回:如果成功返回 .T. 否则返回 .F.
***************************************************************
FUNCTION SQL_COMM
LPARAMETER cCommandStr,cCursorName,cErrorStr,cTitleStr
LOCAL lcResult,lcAnswer,lcMSG_Str,lcMSG_Title,lcMSG_Program
LOCAL lcDBFname,Pos1,Pos2,lcSTR1
STORE 0 TO lcResult,lcAnswer
IF TYPE("gHandle")<>"N"
=MESSAGEBOX("连接句柄 (gHandle) 无效!"+CHR(13)+CHR(13)+"数据源尚未进行正确的连接.",48,"错误")
RETURN .F.
ELSE
IF gHandle <= 0
=MESSAGEBOX("连接句柄无效!"+CHR(13)+CHR(13)+"数据源连接不成功或没有进行正确的连接.",48,"错误")
RETURN .F.
ENDIF
ENDIF
IF TYPE("cCommandStr")<>"C"
RETURN .F.
ENDIF
IF TYPE("cCursorName")<>"C"
cCursorName = "SQLtemp"
ENDIF
IF TYPE("cErrorStr")<>"C"
lcDBFname = " "
if ATC("UPDA",UPPER(cCommandStr)) # 0
Pos1 = ATC(" ",cCommandStr,1)
IF Pos1 > 0
lcDBFName = ALLTRIM(SUBSTR(cCommandStr, Pos1))
Pos2 = ATC(" ", lcDBFName, 1)
IF Pos2 > 0
lcDBFname = ALLTRIM(SUBSTR(lcDBFName, 1, Pos2))
ENDIF
ELSE
lcDBFName = ""
ENDIF
cErrorStr = "程序试图对服务器数据库 '"+lcDBFname+"'进行修改数据(UPDATE)操作时出错!"+CHR(13)+CHR(13)
ENDif
ENDIF
IF TYPE("cTitleStr")<>"C"
cTitleStr = "错误"
ENDIF
lcMSG_Title = "数据没有被正确的读出或写入,将有可能造成数据的不完整性。"+CHR(13)+"请稍候重试 !"+CHR(13)+CHR(13)
IF !EMPTY(PROGRAM())
lcMSG_Program = "错误程序:"+PROGRAM(1)+CHR(13)
ELSE
lcMSG_Program = ""
ENDIF
IF USED(cCursorName)
USE IN &cCursorName
ENDIF
DO WHILE lcResult <= 0
lcResult = SQLEXEC(gHandle,cCommandStr,cCursorName)
IF lcResult <= 0
=AERROR(nErr)
IF ATC("执行操作命令:'", cErrorStr) = 0
lcMSG_Str = cErrorStr+lcMSG_Title+lcMSG_Program+"错误原因: "+nErr(2)+CHR(13)+CHR(13)+"执行操作命令:'"+cCommandStr+"'"
ELSE
lcMSG_Str = cErrorStr
ENDIF
lcAnswer=MESSAGEBOX(lcMSG_Str,48+5,cTitleStr)
IF lcAnswer = 2
RETURN .F.
ELSE
IF (ATC('通讯连结失败', nErr(2)) > 0) OR (ATC('CONNECT', UPPER(nErr(2))) > 0) THEN
DO FORM Frm_InitDB TO gHandle
ENDIF
ENDIF
ENDIF
ENDDO
RETURN .T.
ENDFUNC