CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  DataWindow

datawindow产生的SQL语句为什么不对?急救!

楼主dreamnow(梦想&现实)2005-02-17 20:43:14 在 PowerBuilder / DataWindow 提问

数据库是sybase   asa12.5   ,并且总部设置了权限,对表的操作只能用"用户.表.列",这样的语法访问(如person.mycity.city)。我做了一个datawindow,格式正确,直接在pb里操作datawindow做插入、删除操作都没问题,就是运行程序时发现datawindow执行插入操作时产生的sql语句里没有带用户,系统提示无法找到表,导致插入数据失败。请各位指教!  
   
  以下为语句解释:  
  正确的插入语句应是:  
  insert   into   person.mycity   (city,deptid)  
  value('023','011')  
  现datawindow产生的错误语句是:  
  insert   into   mycity   (city,deptid)  
  value('023','011')  
  问题点数:50、回复次数:9Top

1 楼qltouming(缘木渔人-临渊羡鱼,不若退而结网)回复于 2005-02-18 09:01:04 得分 40

1、设置一全局变量,在程序一开始运行时即取到用户存入其中  
  2、在应用sql语句时,从全局变量用户名中取到值,用构造字符串方式组合成sql语句,  
  Top

2 楼dreamnow(梦想&现实)回复于 2005-02-18 09:29:38 得分 0

老大,你说的方法我想过,但如果多了是不是太麻烦了点,能否说说构造错误的原因并解决Top

3 楼qltouming(缘木渔人-临渊羡鱼,不若退而结网)回复于 2005-02-18 10:38:14 得分 0

和数据库设计有关,如果你在查询分析器中打开这个数据库要求你带用户前缀,那么程序代码中要执行的sql语句就必须带有用户名前缀。  
  如果经常用到也有不写前缀的方法可实现。方法是定义一事务对象连接该数据库(例:Sqlcw=create   Transaction),在连接时指定该用户名。这样在代码中再写sql语句时要在最后加上use   sqlcw,包括commit   或retrun 时都要加上。在事务对象使用完毕后要断开连接并清空。  
  disconnect   using       sqlcw;  
  destroy         sqlcw;Top

4 楼dreamnow(梦想&现实)回复于 2005-02-18 12:16:16 得分 0

谢谢“缘木渔人”。  
  现已发现了原因,问题出在使用setsqlselect()   和dwobject.object.datawindow.table.select所得到的结果不一样,用dwobject.object.datawindow.table.select这样的格式系统就能正确构造sql语句,这点以后也请各位留意以下。Top

5 楼lzheng2001(1加1)回复于 2005-02-18 12:28:39 得分 10

setsqlselect()时   在表名前加上用户名应该也可以吧Top

6 楼dreamnow(梦想&现实)回复于 2005-02-18 13:06:43 得分 0

用setsqlselect()修改过datawindow后,在做insert,update等时就是有问题,帮助中提示用setsqlselect将改变select或update的校验信息,可能跟这有关Top

7 楼qltouming(缘木渔人-临渊羡鱼,不若退而结网)回复于 2005-02-18 13:11:06 得分 0

确实如此。如果在setsqlselect()后还要使用update()特性,需要重新指定。类似下列这种:  
  dw_1.modify("datawindow.table.updatetable   =   'fwxx'")  
  dw_1.modify("fwxx_bh.update   =   yes")  
  dw_1.modify("fwxx_mc.update   =   yes")  
  dw_1.modify("fwxx_bh.Key   =   yes")Top

8 楼qltouming(缘木渔人-临渊羡鱼,不若退而结网)回复于 2005-02-18 13:17:28 得分 0

你也可以使用modify()函数来修改数窗,它不改变数据窗口对象的更新状态并用执行效率更高,原因在于它不验证sql语句的正确性,所以你要保证sql语句正确无误。Top

9 楼qltouming(缘木渔人-临渊羡鱼,不若退而结网)回复于 2005-02-18 13:19:06 得分 0

表意不明,修改一下:  
  你也可以使用modify()函数来直接修改数窗的sql语句(替代完成setsqlselect()的功能),它不改变数据窗口对象的更新状态并用执行效率更高,原因在于它不验证sql语句的正确性,所以你要保证sql语句正确无误。Top

相关问题

  • sql语句急救
  • sql语句问题,急救!!!
  • 急救!这个SQL语句怎么写?
  • 急救:asp程序中的sql语句如何处理时间
  • 急救:一条SQL语句,详情请看里面。
  • 急救!这条件sql语句怎么写?
  • 关于sql语句,在线等待高手急救!
  • 急救,,, 一个简单的sql语句怎么写。
  • 急救:这条sql语句该怎么写?
  • 急救:这条sql语句该怎么写?

关键词

  • 语句
  • sql
  • 用户
  • 修改
  • 执行
  • 数据库
  • 数据
  • 连接
  • datawindow
  • setsqlselect

得分解答快速导航

  • 帖主:dreamnow
  • qltouming
  • lzheng2001

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo