PB修改数据窗口的select语句时遇到问题

qianchenluo 2016-11-21 01:03:30
dw_1.reset()
ls_oldselect=dw_1.describe("datawindow.table.sqlselect")

is_selectwhere =''
uf_createtable()
if is_selectwhere = '' then
dw_1.settransobject(sqllis)
dw_1.retrieve(ld_ksrq,ld_jsrq,ls_patientid,ls_patientname)
else
ls_newsetselect = ls_oldselect + is_selectwhere
dw_1.object.datawindow.table.select = ls_newsetselect
dw_1.settransobject(sqllis)
ll_i = dw_1.retrieve(ld_ksrq,ld_jsrq,ls_patientid,ls_patientname)
end if
dw_1.object.datawindow.table.select = ls_oldselect
这段代码运行第一次时可以正确获取到数据,但是第二次运行时,无法获取数据,依然是第一次的数据,后来通过getsqlselect()发现数据窗口的select语句还是第一次赋值上去的,而通过dw_1.describe()获取的select语句却与第二次的赋值一样
...全文
2853 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
怕我不由得 2018-02-13
  • 打赏
  • 举报
回复
上面的再修改一下 将if 中的 or 改成 and
怕我不由得 2018-02-13
  • 打赏
  • 举报
回复
ls_oldselect=dw_1.describe("datawindow.table.sqlselect") 这句改为 if ls_oldselect<>'' or not isnull(ls_oldselect) then ls_oldselect=dw_1.describe("datawindow.table.sqlselect") 注意 ls_oldselect 声明从局部变量改为实例变量即可
whb00120012 2017-11-30
  • 打赏
  • 举报
回复
这个题主要在于 if pos( ls_oldselect ,'where')>0 then ls_selectwhere='and'+ 字段匹配和 ELSE ls_selectwhere='where'+ 字段匹配和 end if ls_newsetselect = ls_oldselect + is_selectwhere
划]破 2017-11-29
  • 打赏
  • 举报
回复
都过去一年啦,老帖子都被翻出来了…………
r00_a2lBUR 2017-11-11
  • 打赏
  • 举报
回复
这么老的帖子也被翻出来,貌似楼主发完帖子以后就没有回来过
qq_41018401 2017-11-10
  • 打赏
  • 举报
回复
个人建议,要养成良好的编码习惯,以便于快速定位和处理问题。
acen_chen 2017-07-17
  • 打赏
  • 举报
回复
uf_createtable()不知道做了些啥
tmx 2017-07-17
  • 打赏
  • 举报
回复
首先代码顺序应该如下: w_1.reset() //只是把数据清空 ls_oldselect=dw_1.describe("datawindow.table.sqlselect") //应该取出的是没有where条件裸sql语法 is_selectwhere ='' //没有where子句 uf_createtable() //不清楚用途,这个函数后is_selectwhere的值是不会改变的,那后面的if语句永远只执行else前面的半段。 //这就是问题所在,局部变量的值不会因为调用uf_createtable() 而改变 if is_selectwhere = '' then dw_1.settransobject(sqllis) dw_1.retrieve(ld_ksrq,ld_jsrq,ls_patientid,ls_patientname) else ls_newsetselect = ls_oldselect + is_selectwhere dw_1.object.datawindow.table.select = ls_newsetselect dw_1.settransobject(sqllis) ll_i = dw_1.retrieve(ld_ksrq,ld_jsrq,ls_patientid,ls_patientname) end if dw_1.object.datawindow.table.select = ls_oldselect
tmx 2017-07-17
  • 打赏
  • 举报
回复
这段代码非常混乱,对数据窗口的操作需要加以输入研究。
Powertion 2016-11-24
  • 打赏
  • 举报
回复
如果是Oracle,可能是SQL语句末尾缺少一个分号
WorldMobile 2016-11-22
  • 打赏
  • 举报
回复
dw_1.object.datawindow.table.select = ls_newsetselect 改为 dw_1.setsqlselect(ls_newsetselect) 再试试,如果不行,看一下setsqlselect的返回值,是不是你的sql有错误
数据窗口源码介绍 (举例见d_dbit_example.srd,测试数据库为PB自带的EAS Demo DB V120) 1.第一行:release 12; 数据窗口所属PB的版本号,如果想把高版本的datawindow导入低版本的PB中要修改此数字; 2.datawindow()行 通常用修改processing属性,可以把你的数据窗口由grid变成freeform或其它类型 例:freeform:0 grid:1 3.header()行 可以整行复制粘贴,并命名为header[1],header[2],这样可以让数据窗口有多个header 4.table()行 这里全是定义的数据属性,是setitem,update,object.data等方法访问的根源 如果存在table()里的column,数据窗口里可以不存在任何对象,仍然可以访问数据窗口数据 如果想创建一个空的数据窗口,可以只定义: release 12; table() 5.table(column行) 是第几个column,它的ID就是多少,其中也定义了是否可以update和更新到数据表的字段名 6.table(retrieve行) 检索数据使用的SQL语句,可以通过setsqlselect或modify("table.sqlselect")方法去动态修改 修改后要重新定义数据窗口的更新属性 7.column()行 id即是对应table(column行)里的行次,名称(name)可以随便命名,也可以没有,则默认为table(column行)里的name 8.compute()行 计算列,可以通过表达式计算显示特定值(具体函数可以见共享里的画笔函数). 9.text()行 有可以代替计算列; 通过定义text的表达式,可以实现一列中显示两个字段值,注意结果必须要转换成string类型(而column和compute则不行); 10.htmltable()行 按照格式导出(saveas)html文件,为了保证格式的完整,数据窗口的单位最好设置成pixels GenerateCSS='1' //保持格式及颜色 Border='0' //不要table边框 CellSpacing='0' //单元格无间距(此项在界面上经常设置不上) 注: (1)Grid生成标签,Freeform生成
+ 标签; (2)生成htmltable,不知为何会在CSS中的开始自动加一个分号";",导致excel等浏览器打开不能正常显示格式; (3)band为foreground或background的对象导不出来,可以动态修改后再导出. 11.export.xml()行 定义导出xml文件的格式,并为模板保存名称 使用一定要设置usetemplate值 12.import.xml()行 定义导入xml文件的格式,并为模板保存名称 使用一定要设置usetemplate值 13.表达式介绍 略 14.其它也略
Powerbuilder 9.0实用教程》源代码 1.本源代码包括以下章节源代码: 第01章 认识PowerBuilder 9.0、第05章 创建应用程序、第06章 创建窗体、第07章 创建菜单和工具栏、第10章 应用程序的调试和发布、第11章 典型小型实例赏析、第12章 图书管理系统实例和第13章 学生选课系统实例。 2.源代码使用方法参见《附录A 源代码的使用方法》文件。 __________________________________________________________________ 注意: 1.建议读者下载源文件后,将该源文件进行备份,读者使用副本源文件进行学习,这样一但出问题就不用再从网上下载了。 2.将源文件中“数据库文件”文件夹一定要复制到C盘根目录下,这样才能保证您连接数据库文件成功,具体方法参见《附录A 源代码的使用方法》。 对于书中源代码除了数据库外其他都能正常使用,而示例中数据库需要用户在自己的计算机上注册后才能使用,如果不注册数据源就运行应用程序是检索不到任何数据的,下面以连接学生选课系统数据库为例具体介绍如何连接数据库文件。 第1章 认识PowerBuilder 9.0 1 1.1 PowerBuilder 9.0简介 1 1.1.1 中国软件业现状 1 1.1.2 为什么要学习PowerBuilder 9.0 2 1.1.3 PowerBuilder的概述 2 1.1.4 PowerBuilder的特点 3 1.1.5 PowerBuilder 9.0的新特性 6 1.2 安装PowerBuilder 9.0软硬件需求 9 1.2.1 软件环境需求 9 1.2.2 硬件环境需求 9 1.3 PowerBuilder 9.0功能界面介绍 10 1.3.1 PowerBuilder 9.0界面简介 10 1.3.2 常用功能菜单 10 1.4 工作环境设置 16 1.4.1 工具栏的设置 16 1.4.2 窗口排列 19 1.4.3 快捷键设置 20 1.4.4 系统选项设置 21 1.5 用5分钟制作一个简单实例 22 1.5.1 实例运行界面 22 1.5.2 新建一个工作空间对象 22 1.5.3 新建一个应用程序对象 23 1.5.4 创建窗体 23 1.5.5 为应用程序添加open事件代码 25 1.6 小结 27 1.7 习题 27 第2章 编程基础知识 28 2.1 PowerScript脚本语言书写规则 28 2.1.1 忽略大小写 28 2.1.2 语句的断行、续行和分割 28 2.1.3 注释 29 2.2 数据类型 29 2.3 变量和作用域 30 2.3.1 定义变量 30 2.3.2 引用变量 30 2.3.3 变量的作用域 30 2.4 操作符 31 2.5 标识符 32 2.5.1 标识符的构成 32 2.5.2 匈牙利命名法 32 2.6 常用代词 33 2.7 控制语句 34 2.7.1 判断语句 34 2.7.2 循环语句 36 2.8 结构 38 2.8.1 创建结构 38 2.8.2 使用结构 40 2.9 函数 40 2.9.1 Open()和Close()函数 41 2.9.2 MessageBox()函数 41 2.9.3 类型转换函数 41 2.9.4 类型判断函数 42 2.9.5 其他函数 42 2.10 ODBC数据源与专用数据库接口 43 2.10.1 什么是ODBC数据源 43 2.10.2 专用数据库接口 43 2.10.3 连接数据库 44 2.10.4 配置ODBC 48 2.11 SQL语言 49 2.11.1 SQL语言的格式 49 2.11.2 在PowerBuilder 9中使用SQL语句 51 2.12 类和对象的概念 56 2.12.1 继承 57 2.12.2 重载和多态性 57 2.12.3 封装 57 2.12.4 属性、事件和函数 57 2.13 在PowerBuilder 9.0中实现面向对象编程 58 2.13.1 创建对象 58 2.13.2 设置对象属性 59 2.13.3 编写事件代码 59 2.13.4 实现继承对象 60 2.14 用户对象和用户事件 61 2.14.1 用户对象分类 61 2.14.2 定义用户对象 62 2.14.3 使用用户对象 64 2.14.4 用户事件 66 2.15 小结 67 2.16 习题 68 第3章 创建数据库 69 3.1 数
数据库开发课程设计报告 学生选课管理系统 系别:计算机工程系 班级:软件1408班 姓名:金 科 目的: 掌握PowerBuilder与SQL Server的连接方法 掌握设计窗口的方法 掌握设计菜单的方法 掌握PowerScript语言的程序设计方法 掌握控件的使用方法 掌握建立数据窗口对象的方法 掌握数据窗口控件的使用方法 掌握数据窗口控件函数的使用方法 掌握数据窗口控件事件 掌握数据报表的设计方法 掌握统计图表的设计方法 了解输出打印的设计方法 掌握用户权限的设置方法 工具: PowerBuilder SQL Server 目录: ( 数据库系统设计工具——PowerBuilder 3 一、 使用PowerBuilder 3 二、 创建应用程序 5 三、 连接数据库 6 ( 界面设计 8 一、 窗口设计 8 二、 菜单设计 10 三、菜单捆绑 12 ( 程序设计 13 一PowerScript语言 13 二、 控件 18 二、 控件脚本实例 20 ( 数据浏览 23 一 数据窗口简介 23 二 数据窗口对象 23 三 数据窗口控件 25 四 数据窗口实例 26 ( 数据编辑 29 一 数据窗口控件函数 29 二 数据窗口控件函数实例 30 三、数据窗口控件事件 35 四、 数据窗口控件事件实例 35 五、 数据窗口控件事件实例 43 一、 数据窗口控件事件实例 51 一、 数据报表设计基础 55 二、 数据报表实例 56 三、 统计图表设计基础 57 四、 统计图表实例 58 五、 输出打印设计 60 一:使用数据库: 创建用户表"<班级>_<学号>_u",。创建数据库用户"<班级>_<学号>",并设置相应权限 ,即对表"<班级>_<学号>_s"、"<班级>_<学号>_c"、"<班级>_<学号>_sc"、"<班级>_<学 号>_u"和"<班级>_<学号>_tj"select、insert、delete和update权限。 二.使用PowerBuilder 1.组件:开始 程序 Sybase 2.应用程序开发步骤: 启动PB 创建工作区 创建目标、应用库及应用对象:对象、脚本。 3.创建应用程序 (1)启动PB 开始 程序 Sybase (2)创建工作区 File New Workspace:工作区名。 (3)创建目标及应用对象 工作区 右键 New Target Application:应用对象名、目标名、应用库名。 Profile Name 右键 Connect:测试连接。 Profile Name 右键 Properties Preview:copy 应用对象名 右键 Edit open事件:Ctrl+V 然后使用嵌入式SQL语句CONNECT建立连接 三.窗口设计 (1)创建窗口 (File )New PB Object Window 保存:通常窗口命名为"w_login"。 (2)界面设计 (3)设计程序,运行显示"欢迎使用"窗口 四.菜单设计 (1)创建菜单 (File )New PB Object Menu:右击Untitled,Insert Submenu Item建菜单项,右击菜单,Insert Submenu Item建命令项,菜单命名为"m_main (2)设计菜单 用户管理、学生管理、课程管理、选课管理、数据分析、系统维护 在学生管理、课程管理中分别加入子菜单 增加、删除、修改、查询;在选课管理中加入子菜单 按学生、安课程;在数据分析中加入子菜单 学生统计、课程统计、成绩统计、输出打印;在系统维护了中加入子菜单 修改密码、帮助、退出。 (3)菜单的捆绑 a)新建一个捆绑菜单的窗口 b)打开窗口,在"MenuName"框中指定需要捆绑的菜单名"m_main",在"WindowType"框中 指定所需要的并可以带菜单的窗口类型,如"mdihelp!"。 五.系统维护中的子窗口设计 (1)新建窗口,命名为w_help。 (2)制作"帮助"文件的word文档,并截图。 (3)单击工具栏上的ole控件,打开"Insert Object"对话框。 (4)单击窗口的任意位置,放置OLE控件,并将控件大小调节。 (5)打开"m_main",双击"系统维护"菜单标题下的"帮助"菜单项,写脚码。 修改密码窗口 创建窗口,命名为"w_password" Cb_1的脚码(确定) Cb_2的脚码(关闭) (2)(5)打开"m_main",双击"系统维护"菜单标题下的"修改密码"菜单项,写脚码。 六.学生管理系统中的课程管理中的所有子窗口 创建数据对象 查询表"s" 选择"file"->"new"命令,选择"grid"风格,单击"ok"按钮 查询表"c" 创建查询窗口 Open的脚码 Cb_1的脚码(检索) Cb_2的脚码(关

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧