| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 740 人关注过本帖
标题:努力了几天也没解决的问题,只好请教高手解答
取消只看楼主 加入收藏
highwain
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-18
收藏
 问题点数:0 回复次数:0 
努力了几天也没解决的问题,只好请教高手解答
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
搜索更多相关主题的帖子: 解答 
2008-08-20 17:27
快速回复:努力了几天也没解决的问题,只好请教高手解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025953 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved