PB内置OEACLE数据库接口的使用方法
PowerBuilder7.0实用教程

WEB服务器
服务 器
中间件
(使用中间件间接访问的Web数据库模式)
数据库服务器
客户端应用 Java Applet ActiveX
Internet/Intranet 客户端 浏览器
服务 器
数据库
(直接访问的Web数据库模式)
4.2 如何开发数据库应用系统
用PowerBuilder开发应用系统时,一般都要 经过系统分析、系统设计、系统开发、代码调试、 系统测试、生成EXE、交付应用等各个阶段。
事件驱动过程的程序设计原理 事件驱动:程序启动时,只做了一些初始化 的工作,然后等待用户或外界的环境的触发。所 有的代码都是编写在不同的事件中。
1.2 PowerBuilder 7.0的新特性
全新的用户接口和开发界面
1.2 PowerBuilder 7.0的新特性
非模态的开发视窗 PB7.0的画板一般是拥有多个视窗的窗口,每个视
启动应用程序
Open 事件
初始化,打开初始化窗口
与用户交互
系统错误
打开其它窗口
系统错误
启动应用程序
应用程序终止
关闭并清除所有对象
应用程序对象
应用程序属性
应用程序事件
对象库搜索表
创建应用程序
创建应用程序
第三章 窗口设计
窗口创建 窗口控件的基本操作 窗口控件属性、事件和函数 常用对话框
创建窗口(1)
系统开发
在PowerBuilder 7.0中,建立应用程序需做的大 量工作是创建对象、描述对象、设置属性,而不是编
写大量的代码。系统开发过程可分为:建立应用对象; 生成用户对象、函数和结构;建立窗口和菜单;创建
数据窗口对象;将数据窗口对象连接到窗口上;编写 各对象的事件处理程序。除了建立应用对象需要在应 用开发的一开始就要完成外,其它步骤可按任意次序 进行。PowerBuilder是个快速应用开发工具。建立应 用时,可以首先在很短时间内建立应用原型,待系统 运行无误后,再进一步锦上添花。
PB教程

POWERBUILDER教程第一章概述1.1特点1.事件驱动在事件驱动方式中,程序的运行没有固定的流程,程序的代码也是为各种可能发生的事件编写,当程序开始运行后,它可以接受来自系统、用户或其他应用程序触发的事件,然后执行事件代码。
建立窗口、控件和其他应用部件时都含有一组预定义的事件。
例如:clicked(单击),用户也可以定义自己的事件。
2.面向对象Windows应用程序中常见的窗口、菜单、控件在powerbuilder中都是一个个对象。
同时,也可以创建自己的用户对象。
每个对象都有自身的特征和行为(属性、事件和函数)。
Powerbuilder提供了基础类库PFC,它为应用程序开发提供了许多可重用的预定义类和对象,利用基本类库PFC可以快速开发高质量、重用好的应用程序。
3.Powerscript语言Powerbuilder中,所有的处理逻辑都是用powerscript语言编写,powerscript是PowerBuilder是专用语言。
4.强大的数据库窗口对象数据窗口对象是PowerBuilder中的一种对象类型,是专门为访问后台的数据库服务的,在数据窗口对象中可以定义数据的来源和数据的显示风格,这样在应用程序就可以把精力完全放在程序的流程控制上,而不用关心具体数据的来源。
如果需要使用数据库中不同的数据,也只要对数据窗口对象进行修改就可以。
5.其他特点支持internet、支持分布式应用、支持多平台、支持大多数关系型数据库(Sybase、MS SQLSERVER、ORACLE等等以及ODBC等其他数据源)等等1.2安装略注:升级至7.0111.3开发环境IDE1 菜单栏图标第一章库文件工具栏图标第二章对象编辑工具栏图标第三章库文件编辑区第四章对象编辑区第五章Datawindow编辑器1.4 预备知识一个PowerBuilder应用程序一般由若干个窗口组成,每个窗口有若干个控件(如按钮、菜单、文本等),每个对象或控件都有若干个事件(如按钮的单击或双击等),每个事件将对应一段程序。
64位系统用32位powerbuilder9.0链接64位oracle12c

64位系统用32位powerbuilder9.0链接64位oracle12c64位系统下用32位powerbuilder9.0链接64位oracle12c1.在32位的powerbuilder9.0里链接64位oracle12c时,会显示错误:oraclelibraryoci.dllcouldnotbeloaded。
这是因为pb9.0是32位的,而oracle12c数据库是64位的,pb9.0无法使用64位的oracle12c。
2.解决这个问题,需要oracle12c的32位客户端,下载instantclientformicrosoftwindows(32-bit)(注:这个是关键,一定要下32位的,千万别下成了下64位的)将其读写在d:\\oracle\\product\\instantclient_12_1(读写在哪里都就是可以的只要你晓得它在哪,打听获得就可以了)3.配置instantclient_12_1在oracle加装目录下,找出network文件夹,将其导入到读写的instantclient_12_1文件夹里(其实只要里面的tnsnames.ora文件就可以了)接下来配置环境变量:a.path里重新加入instantclient_12_1的完备地址,建议从属性黏过来。
握个例子:path=d:\\oracle\\app\\zy\\product\\instantclient_11_2;b.新建环境变量tns_admin,tns_admin=instantclient_12_1的完整地址c.新建oracle_home,oracle_home=instantclient_12_1的完备地址d.新建nls_lang,nls_lang=simplifiedchinese_china.zhs16gbk.(如果没乱改过什么东西的话,写这个就没问题)读完以后,就顺利完成了一大步。
4.在pb9.0的安装目录下,建立一个txt文件,把地址补进去,写入txt文件@echooffsetpath=instantclient_12_1的完备地址;%path%setoracle_home=instantclient_12_1的完备地址settns_admin=instantclient_12_1的完备地址setnls_lang=simplifiedchinese_china.zhs16gbkstartpb90.exe重命名为run,后缀改成bat以管理员身份打开,链接oracle将成功。
问:如何能够在PB运行中得到任意表的结构

减肥药哪种好:www.hogoo8.com1、问:如何能够在PB运行中得到任意表的结构?如域名,属性等。
谢谢!答:直接访问DBMS的系统表或系统视图。
以ORACLE为例.SYS.ALL_TAB_COLUMNS等视图中包含你要的信息。
2、PB + Sybase SQL Anywhere C/S配置问:本人用PB的SQL Anywhere 5,在局域网选一台pc用Network server安装,选另一pc用Network client安装。
在服务器上创建数据库及一表后,在客户端配置ODBC 时,在database file 选Network方式,系统不认!在服务器端启动数据库后,在客户端点击DB Profile-ODBC- 选Database server-connect 后,系统显示:SQLSTATE=08001[sybase][ODBC]unable to connect to database server:unable to start database engine.请问高手,我该如何解决?非常感谢!答:请教高手?Sorry,其实我只是PB菜鸟。
记得大概半个多月前我在这儿发过一个贴子,里面谈及我的C/S配置,可适没人回应。
我的做法如下:(1)环境:NT4.0+sql anywhere5.5+PB6.5(2)服务器以server方式安装sql anywhere,用dbsrv50启动数据库服务(3)客户机以client方式安装sql anywhere,新建odbc数据源(名称与下面ini 文件内的配置一致,数据库为服务器上的数据库,选择network方式)(4)客户机安装PB开发之应用软件,包括:exe文件,pbd动态链接库,dll支持库,一个ini用户配置文件(内有[database]配置)(5)在客户机桌面上建立程序之快捷方式,点击图标,数十秒后程序成功启动。
其实我也不清楚这是否算是一个合理的C/S应用,Kokuc在电脑报上发表的文章相信你也看过,相当有用,可作参考。
pb常用操作技巧

这是刚毕业时在某一“大”公司使用PB6.5开发联通营帐系统时的笔记虽然好久没有也许以后也不会再使用pb开发程序了但这算是我使用过的唯一一个前端专业开发工具把笔记记录下来权当作纪念吧_ //PB中标准调用sql语句ls_sql quotselectroad_name from bb_data_wide_bus_temp_t where register_number quotls_register_number quotquot declare cur_get dynamic cursor for sqlsa prepare sqlsa from :ls_sql open dynamic cur_get fetch cur_get into :ls_value if sqlca.sqlcode ltgt 0 then messagebox操作信息提取失败exclamation end if close cur_get //PB中标准循环调用sql语句DECLARE cur_sql DYNAMIC CURSOR FOR SQLSA PREPARE SQLSA FROM :ls_sql OPEN DYNAMIC cur_sql do while sqlca.sqlcode 0 FETCH cur_sql INTO :ls_register_number:ls_complete_note ll_sqlcode sqlca.sqlcode if ll_sqlcode lt 0 then CLOSE cur_sql af_disconnect messagebox错误提示检索受理编号错误StopSign return elseif ll_sqlcode 100 then exit end ifddlb_register_number.additemtrimls_register_number ls_complete_note loop CLOSE cur_sql //窗口open事件通用脚本//置窗口居中af_center_windowthis //连接数据库af_connect //定义变量dataWindowChild dwc //获取城市代码下拉列表并取值dw_city_code.getChildcity_codedwc dwc.setTransObjectsqlcadwc.Retrievegs_citycodegi_citylevel dw_city_code.setTransObjectsqlcadw_city_code.Retrieve dw_city_code.setItem1city_codedwc.getItemString1city_codeis_city_code dw_city_code.getItemStringdw_city_code.getRowcity_code //获取业务类型下拉列表并取值dw_service_kind.getChildservice_kinddwcdwc.setTransObjectsqlca dwc.Retrieve dw_service_kind.setTransObjectsqlcadw_service_kind.Retrieve dw_service_kind.setItem1service_kind10 ii_service_kinddw_service_kind.getItemNumberdw_service_kind.getRowservice_kind //获取申请事项下拉列表并取值dw_apply_event.getChildapply_eventdwc dwc.setTransObjectsqlca dwc.Retrieveii_service_kind dw_apply_event.setTransObjectsqlcadw_apply_event.Retrievedw_apply_event.setItem1apply_eventdwc.getItemNumber1apply_event ii_apply_event dw_apply_event.getItemNumberdw_apply_event.getRowapply_event //激发查询事件cb_query.TriggerEventclicked //断开数据库af_disconnect //查询按钮通用脚本//连接数据库af_connect //定义变量dataWindowChild dwc //dw_1检索数据dw_1.setTransObjectsqlca dw_1.Retrieveii_service_kind //dw_2检索数据intli_rowli_row_temp dw_2.getChildactiondwc dwc.setTransObjectsqlcadwc.Retrieveii_service_kind dw_2.setRowFocusIndicatorhand dw_2.setTransObjectsqlca li_row_temp dw_2.Retrieveii_apply_eventii_service_kindis_city_codedw_2.scrollToRowli_row_temp //如果未检索到数据插入一空行有数据就过滤string ls_filter int li_action if li_row_temp 0 then dw_2.insertRow0 else for li_row 1 todw_2.rowCount li_action dw_2.getItemNumberli_rowaction ls_filter action ltgt stringli_action dw_1.setFilterls_filter dw_1.filter next end if //断开数据库af_disconnect //增加按钮通用脚本//变量定义int li_stepli_actionli_auto_statusli_row //确认选择要增加的记录if dw_1.getSelectedRow0 0 then MessageBox提示信息请选择要添加的记录exclamation return end if //取出要增加的信息li_stepdw_2.getItemNumberdw_2.getRowstep li_actiondw_1.getItemNumberdw_1.getSelectedRow0action li_auto_statusdw_1.getItemNumberdw_1.getSelectedRow0auto_status //添加信息li_rowdw_2.insertRow0 dw_2.setItemli_rowstepli_step dw_2.setItemli_rowactionli_actiondw_2.setItemli_rowauto_statusli_auto_status dw_2.scrollToRowli_row //删除按钮通用脚本//删除前先确认IF dw_2.GetRow 0 THEN MessageBox提示信息请选择要删除的记录exclamation Return ELSE IF MessageBoxquot提示信息quotquot确实要删除指定的记录quotQuestionYesNo2 2 THEN Return dw_2.DeleteRowdw_2.getRow END IF //保存按钮通用脚本//连接数据库af_connect //定义变量stringls_city_codels_error int li_service_kindli_apply_eventli_rowli_step dataWindowChild dwc //检测数据是否发生变化dw_2.AcceptText IF dw_2.ModifiedCountdw_2.DeletedCount 0 THEN MessageBoxquot操作提示quotquot数据未发生变化无需保存quotexclamation return END IF //检测是否为空或零dw_2.setSortstep adw_2.sort FOR li_row 1 TO dw_2.RowCount li_stepdw_2.GetItemNumberli_rowstep IF IsNullli_step OR li_step 0 THEN MessageBox操作提示步骤不能为空或零请重新输入exclamation dw_2.setRowli_row Return END IF NEXT //保存dw_2.SetTransObjectsqlca if dw_2.update 1 then commit messageboxquot提示信息quotquot保存成功quot dw_2.ScrollToRowdw_2.RowCount else ls_error sqlca.sqlErrText rollback messageboxquot提示信息quotquot保存失败quot char13 ls_errorstopSign return end if //断开数据库af_disconnect //打印按钮通用脚本if dw_1.rowCount gt 0 then if PrintSetup -1 then messagebox提示信息打印机设置出错Exclamation return else if dw_1.printtrue 1 then //显示可以取消打印的对话框Messagebox提示信息quot打印成功quot else Messagebox提示信息quot打印失败quotstopSign end if end if else Messagebox提示信息quot没有数据可以打印请先查询数据quotexclamation return end if //导出按钮通用脚本if dw_1.rowcount lt 0 then messageBox提示信息没有数据可以导出请先查询exclamation return end if ifdw_1.SaveAStexttrue 1 then messageBox提示信息导出成功end if //导入按钮通用脚本//变量定义string ls_pathfilels_filels_titlels_extls_filter int li_posli_fileid longll_buffer //变量赋值ls_title quot请选择数据文件quot ls_ext quottxtquot ls_filter quot文本文件.txt.txt全部文件..quot li_fileidGetFileOpenNamels_titlels_pathfilels_filels_extls_filter ifli_fileid 0 or ls_file quotquot then return end if sle_file_name.text ls_pathfile cb_ok.enabled true //退出按钮通用脚本closeparent 或closeWithReturnparentreturnvalue //调用过程通用脚本if dw_wp.rowcount lt 0 then return //变量定义string ls_sqlls_err_info stringls_register_numberls_accept_cityls_departmentls_oper_person integerli_err_codeli_apply_event //变量赋值ls_register_numberdw_wp.getitemstring1register_number ls_accept_city gs_citycode li_apply_eventdw_wp.getitemnumber1apply_event ls_department gl_dealerid ls_oper_persongs_workerid //连接数据库af_connect //调用配号撤单过程ls_sql quotexecutebb_pstn_assign_no_repeal_pquot declare proc_assign_no_repeal dynamic cursor for sqlsa prepare sqlsa from :ls_sql open dynamic proc_assign_no_repealusing :ls_register_number:ls_accept_city:li_apply_event:ls_department:ls_oper_person if sqlca.sqlcode -1 then ls_err_info sqlca.sqlErrText close proc_assign_no_repeal Rollback Messageboxquot错误信息1quotquot执行异常quot ls_err_infostopSignaf_disconnect return End if fetch proc_assign_no_repeal into :li_err_code:ls_err_info if li_err_code lt 0 then close proc_assign_no_repeal Rollback Messageboxquot错误信息2quotquot执行异常quot ls_err_infostopSign af_disconnect return end if closeproc_assign_no_repeal commit //断开数据库af_disconnect //撤单成功后打印工单dw_wp.print //PB某些控件的中文显示问题假如PB 的ListView 不能正常显示中文则应该将ListView 的FontCharSet 属性设置成其他类型。
oracleparallel用法

Oracle Parallel用法介绍Oracle Parallel是Oracle数据库提供的一种功能,可以使数据库的查询和操作在多个处理单元上并行执行,从而提高性能和吞吐量。
本文将详细探讨Oracle Parallel的用法,包括如何配置和使用。
配置1.首先,确保数据库的版本满足Oracle Parallel的要求。
从OracleDatabase 11g开始,Oracle Parallel就内置在数据库中。
2.确认数据库是否已启用并行功能。
可以通过执行以下查询语句来检查:SELECT * FROM v$option WHERE parameter = 'Parallel Server'3.如果Parallel Server参数的值为TRUE,则表示数据库已启用并行功能。
如果为FALSE,则需要在数据库初始化参数文件中启用并行功能。
可以使用文本编辑器打开参数文件,找到以下行并编辑之:parallel_max_servers=164.在上述示例中,16是并行服务器的数量,可以根据实际需求进行调整。
修改完成后,保存参数文件并重启数据库。
使用并行查询并行查询是使用Oracle Parallel最常见的用法之一。
通过并行查询,可以将一个大型查询任务分割成多个子任务,并在多个处理单元上并行执行,从而加快查询速度。
以下是使用并行查询的步骤:1.创建并行查询的表。
在创建表时,可以使用PARALLEL关键字指定并行属性:CREATE TABLE employees (id NUMBER,name VARCHAR2(50),age NUMBER) PARALLEL;2.设置并行度。
并行度决定了同时执行查询的并行进程数量。
可以通过ALTERTABLE语句来设置并行度:ALTER TABLE employees PARALLEL(DEGREE 4);3.编写并行查询语句。
在查询语句中使用PARALLEL关键字指定并行执行:SELECT * FROM employees PARALLEL;并行DML操作除了并行查询,Oracle Parallel还支持并行DML(数据操纵语言)操作,如INSERT、UPDATE和DELETE。
PB数据窗口教程

PB数据窗口教程PowerBuilder是一种流行的集成开发环境,用于快速构建企业级应用程序。
在PowerBuilder中,数据窗口是其中最重要的部分之一、数据窗口提供了一个可视化的界面,用于显示和操作数据库中的数据。
本教程将详细介绍PowerBuilder数据窗口的使用方法。
一、什么是数据窗口数据窗口是PowerBuilder的核心组件之一、它提供了一种直观的方式来显示数据库中的数据,并允许用户进行增删改查等操作。
数据窗口可以与各种类型的数据库进行交互,包括关系型数据库(如Oracle、SQL Server等)和非关系型数据库(如NoSQL数据库等)。
数据窗口具有以下特点:1.可以显示单行或多行数据2.可以进行数据排序和过滤4.可以处理数据库事务5.可以显示图表、嵌入其他控件等二、数据窗口的基本操作要创建一个数据窗口,首先需要打开PowerBuilder开发环境并创建一个新的PowerBuilder项目。
然后,右键单击项目资源树中的“数据窗口”节点,并选择“新建数据窗口”。
在数据窗口设计器中,可以通过添加列、设置数据源、定义布局等来定义数据窗口的外观和功能。
可以使用“数据窗口”菜单上的各种选项来完成这些操作。
接下来,可以将数据窗口添加到应用程序的窗口中。
在窗口设计器中,可以从工具箱中拖动数据窗口控件到窗口中,并调整位置和大小。
三、使用数据窗口实现增删改查操作PowerBuilder的数据窗口提供了一套强大的功能来实现数据的增删改查操作。
下面是一些常用的操作方法:1.查询数据:在数据窗口设计器中,可以设置数据窗口的数据源,包括选择数据库表、指定查询条件等。
在运行时,数据窗口将自动执行查询操作,并将结果显示在界面上。
2.添加数据:可以使用数据窗口的插入按钮或右键菜单来添加新的数据行。
在添加数据时,可以直接在数据窗口中输入数据,或者通过调用数据窗口的弹出窗口来输入数据。
4.删除数据:可以使用数据窗口的删除按钮或右键菜单来删除选中的数据行。
Powerbuilder(pb)简介

Powerbuilder(pb)简介对于一些传统的数据开发人员来说,Foxpro系列也许让他们感到更加熟悉。
但是对于初学者来说,PowerBuilder也许是最好的数据库开发工具。
各种各样的控件,功能强大的PowerBuilder语言都会帮助你开发出自己的数据库应用程序。
PowerBuilder开发环境由一系列集成的图形画板(Painter)组成,应用开发人员通过简单的鼠标操作即可设计、建立、交互检验和测试客户/服务器应用程序。
PowerBuilder特点:它支持应用系统同时访问多种数据库,其中既包括Oracle,Sybase之类的大型数据库,又包括FOXPRO之类支持ODBC接口的小型数据库,PowerBuilder是完全可视化的数据库开发工具,它提供了大量的控件,大大加快了项目的开发速度,也使开发者更容易掌握数据库的开发。
它使用的编程语言叫做工PowerScripr,它也是一种高级的,结构化的编程语言。
PowerScript提供了一套完整的嵌入式SQL语句,开发人员可以像使用其它语句一样自由地使用SQL语言,这样就大大增强了程序操纵和访问数据库的能力。
可以说PowerBuilder 既适合初学者快速学习数据库的开发,又可以让有经验的开发人员开发出功能强大的数据库,是一种适用面非常广的开发工具。
PowerBuilder是一个用来进行客户/服务器开发的完全的可视化开发环境。
使用PowerBuilder,你可以用一种可视的直观的方式来创建应用程序的用户界面和数据库接口。
这是一个总的概念,实际上是开发人员使用PowerBuilder去开发应用程序,由于所开发的各种应用程序充分利用了图形用户接口(GUI)的优点,所以PowerBuilder被认为是一个图形工具。
在客户/服务器结构的应用中,PowerBuilder具有描述多个数据库连接与检索的能力。
特别是PowerBuilder能从大多数流行的RDBMS中存取数据,且不管数据存放在什么地方;另外,各种应用程序又可以独立于RDBMS,因为PowerBuilder可以使用数据库的标准操作语言SQL(结构化查询语言)进行。