| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1413 人关注过本帖
标题:关于SQL数据库图片更改后不能存盘的问题
只看楼主 加入收藏
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:704
专家分:20
注 册:2014-1-16
结帖率:88.62%
收藏
已结贴  问题点数:20 回复次数:10 
关于SQL数据库图片更改后不能存盘的问题
在SQL数据库建立表shebei,字段PIC 数据类型是TEXT.程序如下:
程序代码:
LOCAL xfilename,xfiletext
xfilename = GETFILE('DOCX,XLSX,jpg')
xfiletext = strconv(FILETOSTR(xfilename),13)
SELECT shebei_one   &&本地临时表shebei_one是从shebei表的一个查询结果,编辑完后保存到远程表shebei
replace pic WITH xfiletext  && pic字段是SQL的TEXT类型

SELECT shebei_one
lcTextString=xfiletext
Thisform.pf.page1.Image1.Stretch = 2
Thisform.pf.page1.Image1.PictureVal=Strconv(lcTextString,14)

&&后面的程序是保存到远程表SHEBEI,因为使用的通用程序,省略。


问题是这样的,当shebei_one添加记录,执行以上程序后,再使用spt的方式INSERT,保存成功,但是如果编辑shebei_one表,再使用spt的方式UPDATE,保存失败,这是
怎么回事呢?
搜索更多相关主题的帖子: SQL 更改 数据库 保存 图片 
2022-02-17 11:06
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:20 
你不编辑,直接用INSERT的这个,改为更新看看
也就是
insert ...
这个位置的语句,直接换成
update ...
看看是否成功,查看
如果成功,那再看,从SQL读下来后,不做任何修改编辑,直接 点 update 看看
2022-02-17 11:35
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:704
专家分:20
注 册:2014-1-16
收藏
得分:0 
问题可能在别的哪个环节,我直接用以下程序,保存成功
程序代码:
LOCAL xfilename,xfiletext
xfilename = GETFILE('DOCX,XLSX,jpg')
xfiletext = strconv(FILETOSTR(xfilename),13)




 字符串=["select * from shebei where id=2","shebei_one1"]

 连接临时_yk()   &&调用远程连接

 Ac=SQLEXEC(nhandle,&字符串)

 IF  Ac<0
       =SQLDISCONNECT(nhandle)
       MESSAGEBOX("读取错误!",0,"错误信息")
     
       RETURN TO MASTER 

 ELSE
    SELECT shebei_one1
   
     Ac2=SQLEXEC(nhandle,"update shebei set pic=?xfiletext ")
     IF ac2>0
        =MESSAGEBOX("保存成功")
     else 
        =MESSAGEBOX("保存失败")
     endif     
      =SQLDISCONNECT(nhandle)

 endif  
2022-02-18 06:59
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:704
专家分:20
注 册:2014-1-16
收藏
得分:0 
但是我采用另外的方式就不能成功
程序代码:
字符串=["select * from shebei where id=2","shebei_one"]
连接临时_yk()   &&调用远程连接

 Ac=SQLEXEC(nhandle,&字符串)

 IF  Ac<0
       =SQLDISCONNECT(nhandle)
       MESSAGEBOX("读取错误!",0,"错误信息")
     
       RETURN TO MASTER 

 ELSE
    

 endif  

ac1=SQLEXEC(nhandle,"select * from shebei ","c_t")  && 产生表 
IF  ac1<0 
      = SQLDISCONNECT(nhandle)
      MESSAGEBOX("读取数据错误!",0,"错误信息") 
      RETURN TO MASTER 
ELSE
    SELECT c_t
    CURSORSETPROP("tables","shebei","c_t")
    CURSORSETPROP("keyfieldlist","id","c_t")
    CURSORSETPROP("updatablefieldlist","id,pic","c_t")
    yy='id shebei.id,pic shebei.pic'
    CURSORSETPROP("updatenamelist",yy,"c_t")
    CURSORSETPROP("sendupdate",.t.,"c_t")
    CURSORSETPROP("wheretype",2)
    cursorsetprop("buffering",5)  &&设置表缓冲
    UPDATE c_t SET pic=shebei_one.pic from shebei_one WHERE c_t.id= shebei_one.id 
    SQLSetprop(nhandle,'Transactions',2)        && 开启远程手工事务
    BEGIN TRANSACTION
        select c_t
        a1=TABLEUPDATE(.t.)
        IF a1=.t. 
         END TRANSACTION  
        ELSE
            rollback  
        ENDIF
   
    SQLSetprop(nhandle,'Transactions',1)        && 开启远程自动事务
    = SQLDISCONNECT(nhandle) &&关闭
    IF a1=.t.
       MESSAGEBOX("数据保存成功!",0,"信息") 
    ELSE
       MESSAGEBOX("数据保存失败!",0,"信息") 
    endif 
    
  
ENDIF  &&数据查询

 


运行完成显示:数据保存失败! 这是怎么回事呢?
2022-02-18 07:45
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
回复 4楼 fanjinyu9108
你用这个方法,保存其他字段,看看是否成功。不要保持你 图片这个字段,随便保存其他1个字段,
如果能保存,问题就是“VFP与SQL中,保存图片的字段”中存在冲突,但如果同样,是错误的,那就是你这个段语句问题。
同时,
yy='id shebei.id,pic shebei.pic'
CURSORSETPROP("updatenamelist",yy,"c_t")
直接改为

* yy='id shebei.id,pic shebei.pic'
CURSORSETPROP("updatenamelist","id shebei.id,pic shebei.pic","c_t")  &&看看,是不是这里导致的

[此贴子已经被作者于2022-2-18 09:30编辑过]

2022-02-18 08:41
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:704
专家分:20
注 册:2014-1-16
收藏
得分:0 
不是的,假如把PIC换成别的字段,就不会出现保存失败,
或者不使用这一句: UPDATE c_t SET pic=shebei_one.pic from shebei_one WHERE c_t.id= shebei_one.id ,也能保存成功
您说问题就是“VFP与SQL中,保存图片的字段”中存在冲突,那怎么解决呢


[此贴子已经被作者于2022-2-18 18:58编辑过]

2022-02-18 18:44
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:704
专家分:20
注 册:2014-1-16
收藏
得分:0 
为什么用=SQLEXEC(nhandle,"update shebei set pic=?mypic ")就不会出现问题呢?
2022-02-18 19:00
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:704
专家分:20
注 册:2014-1-16
收藏
得分:0 
还有,当PIC的值是NULL时,保存也会成功
2022-02-19 11:48
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:704
专家分:20
注 册:2014-1-16
收藏
得分:0 
保存失败的原因终于找到了:把CURSORSETPROP("wheretype",2,"c_t")改成CURSORSETPROP("wheretype",1,"c_t"),立刻就解决了
2022-02-19 11:56
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用fanjinyu9108在2022-2-19 11:56:05的发言:

保存失败的原因终于找到了:把CURSORSETPROP("wheretype",2,"c_t")改成CURSORSETPROP("wheretype",1,"c_t"),立刻就解决了


1或DB_键(来自FOXPRO.H)。用于更新远程表的WHERE子句仅由KeyFieldList属性指定的主字段组成。
2或DB_键可更新(来自FOXPRO.H)。用于更新远程表的WHERE子句由KeyFieldList属性指定的主字段和任何可更新字段组成。
3或DB_键并修改(来自FOXPRO.H)(默认)。用于更新远程表的WHERE子句由KeyFieldList属性指定的主字段和任何其他修改的字段组成。
4或DB_键和时间戳(来自FOXPRO.H)。用于更新远程表的WHERE子句由KeyFieldList属性指定的主字段和时间戳的比较组成。

应该都可以的,是不是你表有问题,你看看,你最后结果是否真的保持了,
2022-02-21 08:44
快速回复:关于SQL数据库图片更改后不能存盘的问题
数据加载中...
 
   



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

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