PB中如何用SQLConfigDataSource函数创建ODBC
- 格式:pdf
- 大小:683.43 KB
- 文档页数:2
创建SQL server数据库ODBC数据源1进入ODBC数据源管理器,选择“用户DSN ”页面,按“添加”按钮。
Mi crosoft iKcel^Tr eiber (*.xlsJ filicrQScft JflxPrfl VTi Driver (*. db£)Mi eras o£tODBC for Ora.deFili crosoft Tara-dox Hr i ver C*_ db )Mi Crips <?ft J =irad^x-Tr e;i b(*. dLb ) Mi cros o£t Text Br i ver 险txt; csv JMicrosoft Text~7reib@r (*. txt; *. CEV J Mi crD5oft Yi snal JoatPr o DriverMi croE o£t V1 siial F oacPr o—Tr eiber职消3、设置数据源“名称”,选择SQL Server服务器。
2、选择数据源驱动程序“ SQLServer ”。
选择您想为亘安装数据源的驱动程序电)0创建新数据源SQL Sarver创建列SQL Server 的新数据源此向导将帮助逹立一亍能用于连接S3L S^rv^r的OJBC数据源* 您想用卄么名称来命名数据源?名称逊):[siaffKSB您帑對口何描述哉数据?描述⑪:|鰹想倒朗1个SQL Server?服务器但):|HDHE-M644J409I 匸斋成下一步血)>4、选择验证登录方式,设置SQL Server数据库的登录ID和密码(要跟DBMS设置一致)创建列SQL Server的新数据源£QL S erwer 应该如何验证畫录ID的冥伪0广使用网络登录ID的gZ HT验证叫°&懂用用戶辎入豊录ID和蠱码的SQL S er ver 豔征收).要更改用于与网L 5牡芮話通讯的阿络库,请单击“客尸覇配胃'畧尸端配置CT)...V逹接SQL S.rv*r以茯得瓦它配置选项的默认设置©)•登录m iy: |sa|密码②:I<上一步©)下一步血)>腿消幫助5、选中“更改默认数据库”,选择要创建数据源的数据库。
在PowerBuilder中动态注册ODBC数据源(深圳:独孤求败 2003-05-16)PowerBuilder(以下简称PB)作为客户端的数据库应用开发工具,一般要与数据库服务器结合起来开发客户机/服务器体系的应用。
而通过ODBC连接到数据库是PB存取数据的重要方式。
为了简化程序的安装,方便用户的使用,分发到用户手中的PB应用程序必须能够完成对ODBC数据源的动态注册。
在PB中,可以使用其自身的注册(Registry)函数、安装程序制作软件“InstallShield”、Window s的API函数等,完成对ODBC数据源的动态注册。
其中,PB自身的注册(Registry)函数具有简单、易于修改和控制的特点,同时也便于开发者理解和掌握。
本文就以此方法为例,说明在PB中如何动态注册ODBC数据源。
一、ODBC数据源在Windows注册表中注册的项目为了完成对ODBC数据源的注册,要在注册表中进行以下注册:1 将数据源名称注册到“HKEY_CURRENT_USER\software\odbc\odbc.ini\odbc data sources”下。
2 “HKEY_CURRENT_USER\software\odbc\odbc.ini”下新增以该数据源名称为键名的子键,并在此键下添加连接数据源所需要的参数。
这些参数包括所连接数据库的位置、文件名称(databasefile)、启动数据库的命令文件(start)、pwd、uid等。
需要注意的是,不同数据库系统所需的参数并不相同,我们可以通过以下方法得到某一具体数据源的参数:首先在PB中通过手工设置,连接到数据源,然后运行注册表编辑程序(Regedit.exe),查看“HKEY_CURRENT_USER\software\odbc\odbc.ini”下,以该数据源名称为键名的子键中的值,这里的内容就是我们所需要的数据源的连接参数。
二、使用PB的注册函数PB中使用“RegistrySet()”函数在注册表中设置或创建指定的键,以下是该函数语法及参数。
实验步骤:一、建立数据库1.创建数据库exam_pb2.建立表students3.为表students指定主键为“学号”4.向表中输入数据二、建立应用程序1.建立工作空间“练习一”2.建立应用程序“test”3.建数据窗口dw_15.建应用程序窗口w_main6在应用程序窗口中添加控件7.为数据窗口指定目标对象“student”为主窗口定义标题!为控件定义标题!8.为应用程序和控件编写脚本一定要保存窗口!!①应用程序test脚本:open(w_main) ——打开主窗口②应用程序窗口w_main的各个脚本:w_main open事件的脚本:SQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "Connectstring='DSN=exam_pb;uid=dba;pwd=sql'"connect using sqlca;dw_1.settransobject(sqlca)“增加”命令按钮click事件的脚本:dw_1.insertrow(0)dw_1.setfocus()“删除”命令按钮click的脚本:dw_1.deleterow(0)“检索”命令按钮click的脚本:dw_1.retrieve()“过滤”命令按钮click的脚本:w_main.dw_1.setfilter("系别='计算机系'")w_main.dw_1.filter()“保存”命令按钮click的脚本:dw_1.update()“退出”命令按钮click的脚本:close(parent)三、连接数据库1.建立ODBC数据源“exam_pb”用户名:dba 密码:sql 考试时也是这个2.建立数据库描述文件“exam_pb”预览和测试!!3.连接数据源四、运行程序------------------------------实验步骤:一、建立工作空间“练习二”二、建立应用程序“test”三、建立主窗口“w_main”为主窗口定义标题!!保存!!为应用程序test编写脚本“open(w_main)”四、建立菜单“m_main”为菜单添加子菜单项!!为子菜单项定义标题!!五、将菜单挂在主窗口上保存!!!!!时刻不要忘记六、建立计算器窗口“calculator”为计算器窗口定义标题!!1.为计算器窗口添加控件此窗口包含三个静态文本框控件三个单行编辑框控件五个命令按钮!清空单行编辑框中的“none”字符2.为各个控件编写脚本①为“加”命令按钮编写脚本:real m,nm=real(sle_1.text)n=real(sle_2.text)sle_3.text=string(m+n)②为“减”命令按钮编写脚本:real m,nm=real(sle_1.text)n=real(sle_2.text)sle_3.text=string(m - n) 一定要注意m的后面和n的前面要有空格。
程序发布的过程中,要完成对ODBC数据源的动态注册,不外乎以下几种方法:1:在安装程序制作软件如“InstallShield”中设置;2:利用软件工具其自身的注册(Registry)函数来实现;3:利用Windows的API函数来实现等。
今天我首先介绍的就是如何利用PB自身的注册函数来说明在PB中如何动态注册ODBC数据源。
为了完成对ODBC数据源的注册,首先需要了解在注册表中进行注册的相关信息,这里以Adaptive SQL Anywhere 8.0自身带的两个数据库在注册表中的信息来作一个简单说明:一、熟悉需要注册的信息1:了解对于系统默认已经配置好的若干个数据源,其信息在注册表中是如何存在的。
通过以下图示看到两个数据源名称被注册到“HKEY_CURRENT_USER\software\odbc\odbc.ini\odbc data sources”下。
2:然后,对于其中的某个数据源,其具体信息被注册到了“HKEY_CURRENT_USER\software\odbc\odbc.ini”。
在该目录下新增以该数据源名称为键名的子键,并在此键下添加连接数据源所需要的参数。
这些参数包括所连接数据库的位置、文件名称(databasefile)、启动数据库的命令文件(start)、pwd、uid等。
需要注意的是,不同数据库系统所需的参数并不相同,我们可以通过以下方法得到某一具体数据源的参数:首先在PB中通过手工设置,连接到数据源,然后运行注册表编辑程序(Regedit.exe),查看“HKEY_CURRENT_USER\software\odbc\odbc.ini”下,以该数据源名称为键名的子键中的值,这里的内容就是我们所需要的数据源的连接参数。
二、了解注册函数的语法了解了以上需要注册的信息之后,我们就可以通过PB的注册表写入函数来实现数据源的配置了.PB的注册函数为RegistrySet(),其语法格式如下所示:语法:RegistrySet ( key, valuename, valuetype, value )参数:key:string类型,指定键名;valuename:string类型,指定要访问值的名称。
pb中odbc建立方法下面以Powerbuilder内置的Sybase SQL Anywhere5.0数据库为例介绍ODBC的代码配置方法。
1、找出数据库驱动程序及相关文件首先找到相应的数据库驱动程序,这些文件可以在注册表的HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI下相应键中找到。
如Sybase SQL Anywhere5.0为dbeng50.EXE,WOD50T.DLL,以及一些其他相关的动态链接库,此例中为Dbl50t.dll,Wl50ent.dll,Wtr50t.dll,Wodbc.gid,Wtr50t.dll。
这些文件必须与最终的可执行程序一起安装到用户的计算机上,可以与应用程序放在一起,也可以放在一个特定的目录下(本例为Windows 的system目录下)。
在调试时可先将这些文件复制到指定的目录下。
2、在程序中用代码配置ODBC在应用的open事件中对ODBC配置的代码如下:Ulong ul_numIntanswer,answer1,answer2,answer3,answer4,answer5,ansapp String ls_driver,ls_start,ls_location,apppath,db_path,odbcstr //获取操作系统的system目录,并保存到ls_location变量answer=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Mi crosoft\Windows\CurrentVersion\Setup”,”SysDir”,RegString!l s_location)IF answer=-1 THENMessagebox(‘错误’,’应用程序无法获取Windows的系统目录,系统统将终止运行!’,Stopsign!)RETURNEND IF//判断Sybase SQL Anywhere5.0的驱动程序是否正确安装ls_driver=ls_location+’\WOD50T.DLL’ls_start=ls_location+’\dbeng50.EXE’IF NOT (FileExists(ls_driver) AND FileExists(ls_start)) THENMessagebox(‘错误’,’系统中没有安装SQL Anywhere的驱动程序,系统将终止运行!’,StopSign!)RETURNEND IF//设置ODBC\ODBCINST.INI\ODBC DRIVERSanswer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\O DBC\ODBCINST.INI\ODBCDRIVER’,’Sybase SQL Anywhere 5.0’,RegString!,’Installed’)IF answer=-1 THENMessagebox(‘错误’,’应用程序无法设置ODBC DRIVERS,系统将终止运行!’,StopSign!)RETURNEND IF//设置ODBC\ODBCINST.INIanswer1=RegistrySet(‘ HKEY_LOCAL_MAC HINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’CPTimeout’,RegString!,’not pooled’)answer2=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Driver’,RegString!,ls_driver)answer3=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Setup’,RegString!,ls_driver)IF answer1=-1 OR answer2=-1 OR answer3=-1 THENMessagebox(‘错误’,’应用程序无法设置ODBCINST.INI,系统将终止运行!’,StopSign!)RETURNEND IF//设置ODBC DATA SOURCE名称(anysql为数据源名)answer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\O DBC\ODBCINST.INI\ODBC Data Sources’,’anysql’,RegString!,’Sybase SQL Anywhere 5.0’)IF answer=-1 THENMessagebox(‘错误’,’应用程序无法设置ODBC DATA SOURCE名称,系统将终止运行!’,StopSign!)RETURNEND IF//获取应用程序的安装路径(ybinput为应用程序安装到用户计算机上后在注册表中注册的应用程序名,yibiao.db为应用程序的数据库名,与应用程序在同一目录下,anysql为数据源名)ansapp=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Mi crosoft\Windows\CurrentVersion\AppPaths\ybinput”,”Path”,RegString!app_path)IF ansapp=-1 THENMessagebox(‘错误’,’应用程序无法获取安装路径名,系统将终止运行!’,StopSign!)RETURNELSEdb_path=app_path+’yibiao.db’END IF//设置ODBC.INI的细节answer1=RegistrySet(‘HKEY_current_user\software\odbc\o dbc.ini\anysql’,’driver’,RegString!,ls_driver)answer2=RegistrySet(‘HKEY_current_user\software\odbc\o dbc.ini\anysql’,’start’,RegString!,ls_start)answer3=RegistrySet(‘HKEY_current_user\software\odbc\o dbc.ini\anysql’,’autostop’,RegString!,’yes’)answer4=RegistrySet(‘HKEY_current_user\software\odbc\o dbc.ini\anysql’,’DataBaseFile’,RegString!,db_path) answer5=RegistrySet(‘HKEY_current_user\software\odbc\o dbc.ini\anysql’,’DataBaseName’,RegString!,’yibiao’) IF answer1=-1 OR answer2=-1 OR answer3=-1 OR answer4=-1 OR answer5=-1 THENMessagebox(‘错误’,’应用程序无法设置ODBC.INI细节,系统将终止运行!’,StopSign!)RETURNEND IFodbcstr=’dsn=anysql;databasename=yibiao;database file=’+db_pathsqlca.dbms=’odbc’sqlca.databse=’yibiao’sqlca.dbparm=”connectstring=’”+odbcstr+”;uid=dba; pwd=sql’”connect using sqlca;open(w_main)。
sqlserver opendatasource 调用函数摘要:1.SQL Server 简介2.开放数据源的定义和作用3.opendatasource 函数的使用方法4.函数调用示例5.函数的返回值和错误处理正文:1.SQL Server 简介SQL Server 是由Microsoft 开发和推广的关系数据库管理系统。
它可以在多种平台上运行,支持数据存储、查询和更新等操作,被广泛应用于企业级数据管理。
2.开放数据源的定义和作用开放数据源是一种数据库连接方式,允许外部应用程序或服务访问数据库中的数据。
这种方式可以提高数据交互性和可操作性,方便不同系统之间的数据共享和交换。
3.opendatasource 函数的使用方法在SQL Server 中,opendatasource 函数用于建立与开放数据源的连接。
其使用方法如下:```OPENDATASOURCE ( "datasource_name", "username", "password" ) ```其中,"datasource_name"为数据源的名称,"username"和"password"分别为访问数据源的用户名和密码。
4.函数调用示例假设我们有一个名为“my_datasource”的数据源,用户名为“admin”,密码为“123456”,则可以使用以下代码调用opendatasource 函数:```DECLARE @datasource_name VARCHAR(50) = "my_datasource"DECLARE @username VARCHAR(50) = "admin"DECLARE @password VARCHAR(50) = "123456"OPENDATASOURCE(@datasource_name, @username, @password) ```5.函数的返回值和错误处理opendatasource 函数的返回值为一个逻辑值,表示连接是否成功建立。
在PowerBuilder中连接SQL Server数据库的方法和技巧的研究报告PowerBuilder是一种易于使用的集成开发环境(IDE),它具有编写Windows应用程序所需的一切东西。
在PowerBuilder 中,连接SQL Server数据库是一种非常常见的任务,本文将介绍PowerBuilder中连接SQL Server数据库的方法和技巧。
SQL Server中连接数据库的方法首先,我们需要准备好一些必要的信息,如服务器名称、数据库名称、ID和密码等。
接下来,我们可以通过以下步骤连接数据库:1. 打开PowerBuilder IDE,并选择“打开一个项目”或“新建一个项目”。
2. 在打开的项目中,选择“打开一个对象”或“新建一个对象”。
3. 选择“数据库连接”或“数据窗口连接”选项。
4. 输入服务器名称和数据库名称,并选择正确的身份验证模式(本地或远程)。
5. 输入正确的ID和密码,并点击“测试连接”按钮。
6. 成功测试连接后,可以单击“确认”按钮,保存连接参数。
7. 在需要使用数据库的页面中,选择创建新的数据对象或使用现有的数据对象,并进行数据绑定。
PowerBuilder中连接SQL Server数据库的技巧在连接SQL Server数据库时,以下技巧可能会帮助我们更轻松地完成工作:1. 使用ODBC驱动程序:在连接SQL Server数据库时,使用ODBC驱动程序可以提供更高的灵活性和性能。
我们可以通过ODBC数据源管理员配置和测试ODBC连接属性。
2. 将连接参数保存在INI文件中:我们可以将连接参数保存在INI文件中,以便以后重新连接时不必输入相同的信息。
3. 使用事务:在PowerBuilder应用程序中,事务可以确保数据库操作的稳定性。
我们可以使用BEGIN TRANSACTION和ROLLBACK TRANSACTION语句来实现事务。
4. 使用DataWindow对象:PowerBuilder的DataWindow对象可以方便地展示数据库中的信息,并提供了小计、总计、分页和排序功能。
在PowerBuilder程序中实现ODBC数据源的添加(深圳:独孤求败 2003-05-16)思路:主要是利用PB对注册表操作函数RegistryGet()和RegistrySet(),这两个函数以及其他注册表函数在PB的帮助里都有详细说明。
再就是利用PB的ProfileString()函数读取INI文件中预先定义好的参数。
写注册表的源程序:string ls_sys[],ls_driver[],st_driver,st_pathinteger li_rtnls_me="新星科技股份有限公司(New Star, Inc.)"ls_version="2.0"ls_sys[1]="HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0"ls_sys[2]="HKEY_CURRENT_USER\Software\"+ls_me+"\仓储管理系统\"+ls_versionls_sys[3]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources"ls_sys[4]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI"li_rtn = RegistryGet(ls_sys[1], "Driver", RegString!, st_driver)IF li_rtn = -1 THENmessagebox("错误","未安装Sybase SQL Anywhere 5.0 !",information!,ok!)RETURNEND IFli_rtn = RegistryGet(ls_sys[2], "InstPath", RegString!, st_path)IF li_rtn = -1 THENmessagebox("错误","读取安装路径出错!",information!,ok!)RETURNEND IFstring envfile,ls_source[],ls_drivepath,ls_tempinteger ienvfile="regedit.ini"ls_source[1]="cl"ls_source[2] =ProfileString(envfile,"INI","AutoStop"," ")ls_source[3] =ProfileString(envfile,"INI","DatabaseFile"," ")ls_source[4] =ProfileString(envfile,"INI","DatabaseName"," ")ls_source[5] =ProfileString(envfile,"INI","Description"," ")ls_source[6] =ProfileString(envfile,"INI","Driver"," ")ls_source[7] =ProfileString(envfile,"INI","PWD"," ")ls_source[8] =ProfileString(envfile,"INI","Start"," ")ls_source[9] =ProfileString(envfile,"INI","UID"," ")li_rtn=RegistrySet(ls_sys[3], ls_source[1] , RegString!, "Sybase SQL Anywhere 5.0") IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!)RETURNEND IFls_sys[4]=ls_sys[4] + "\" + ls_source[1]li_rtn=RegistrySet(ls_sys[4], "AutoStop" , RegString!, ls_source[2])IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!)RETURNEND IFli_rtn=RegistrySet(ls_sys[4], "DatabaseFile" , RegString!, st_path+"\"+ls_source[3]) IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!) RETURNEND IFli_rtn=RegistrySet(ls_sys[4], "DatabaseName" , RegString!, ls_source[4]) IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!) RETURNEND IFli_rtn=RegistrySet(ls_sys[4], "Description" , RegString!, ls_source[5]) IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错?!",information!,ok!) RETURNEND IFli_rtn=RegistrySet(ls_sys[4], "Driver" , RegString!, st_driver)IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!) RETURNEND IFli_rtn=RegistrySet(ls_sys[4], "PWD" , RegString!, ls_source[7])IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!) RETURNEND IFls_temp=st_driveri=pos(ls_temp,"\")do while i>0ls_drivepath=ls_drivepath+left(ls_temp,i)ls_temp=right(ls_temp,len(ls_temp)-i)i=pos(ls_temp,"\")loopli_rtn=RegistrySet(ls_sys[4], "Start" , RegString!, ls_drivepath+ls_source[8]) IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!)RETURNEND IFli_rtn=RegistrySet(ls_sys[4], "UID" , RegString!, ls_source[9])IF li_rtn = -1 THENmessagebox("错误","读取系统文件或写注册表出错!",information!,ok!)RETURNEND IFregedit.ini文件格式如下:[INI]AutoStop=yesDatabaseFile=Psdemodb.dbDatabaseName=仓储管理系统Description=clDriver=PWD=sqlStart=dbeng50.exeUID=dba备注:程序中ls_sys[2]变量代表的注册表键值是我通过安装程序制作工具自动生成的,每个人使用的制作安装程序的工具不同,这个键值也许不尽相同。
PB如何连接Oracle数据库在PB中,你只要通过DATABASE选项设置一下你的服务名,用户名,密码就可以连接上的当然,你的服务名,用户名,密码你先要在NET ASSISANT中配置好,保证你的连接是正常的,你就可以连接上你的ORACLE了,在开发的时候,你就要直接设置SQLCA的连接属性了:if sqlca.of_logon("dbserver.ini", "Database", '') = -1 thenMessageBox('提示信息','数据库连接失败,请检查数据库连接配置!!')Close(THIS)return// 1连接成功,-1连接失败END IFSQLCA是一个用户定义对象(USER OBJECT),它的OF_LOGON 函数如下:string ls_src,ls_destif Len(as_inifile) > 0 then // get information from fileis_idheader = ProfileString(as_inifile, "Server", "id_head", "TCH")This.DBMS = ProfileString(as_inifile, as_section, "DBMS", "ODBC")This.ServerName = ProfileString(as_inifile, as_section, "Server", "")This.Database = ProfileString(as_inifile, as_section, "Database", "") This.LogID = ProfileString(as_inifile, as_section, "LogID", "sa")This.LogPass = ProfileString(as_inifile, as_section, "LogPass", "811811")This.DBParm = ProfileString(as_inifile, as_section, "DBParm", "")if This.LogPass <> "811811" thenf_decrypt(This.LogPass, This.LogPass)end ifif Len(as_other) > 0 thenif Not Match(Upper(This.DBParm), " +HOST *=") tThis.DBParm = This.DBParm + " host='" + as_ot her + "'"end ifend ifelse // get information from parameteruo_token luo_tokenluo_token.of_setseparator("~t")This.DBMS = luo_token.of_getfirsttoken(as_other)This.Database = luo_token.of_getnexttoken()This.ServerName = luo_token.of_getnexttoken()This.LogID = luo_token.of_getnexttoken()This.LogPass = luo_token.of_getnexttoken()This.Lock = luo_token.of_getnexttoken()This.DBParm = luo_token.of_getnexttoken()luo_token.of_setseparator("")end ifif Match(Upper(This.DBParm), " +PWENCRYPT *=") tLong ll_posll_pos = Pos(Upper(This.DBParm), "PWENCRYPT") This.DBParm = Replace(This.DBParm, ll_pos, 9, "Encr ypt")end ifSetPointer (HourGlass!)Connect Using This;SetPointer (Arrow!)This.LogPass = ""if This.SQLCode <> 0 thenThis.of_error(f_select_message("不能连接数据库;Can't connect database"))return -1elsechoose case Upper(Left(This.DBMS, 3))case "ODB"il_dbtype = DB_ODBCcase "MSS"il_dbtype = DB_SQLSERVERcase "O73", "O84"il_dbtype = DB_ORACLEexecute immediate "alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'" using this;case "SYC"il_dbtype = DB_SYBASEcase elseil_dbtype = DB_UNKNOWNend chooseend ifil_spid = of_getspid()il_id = 0This.Autocommit = Falsereturn 1PB如何连接Oracle数据库(ODBC)作为一个优秀的客户端开发工具,PowerBuilder必然需要与大型的数据库相连接,尽管许多资料上都介绍了如何通过ODBC或者PowerBuilder自带的DB Profile或者专用接口连接上数据库,但仍然有许多使用者按此方法却无法连接上数据库,这方面的原因可能是PowerBuilder本身的原因,比如在安装PowerBuilder时的选项、ODBC的版本之类;也可能是在安装客户端的Oracle、Sybase、Informix、SQL Server等软件上的问题,下面就从最根本的ODBC配置开始,教你一步步如何连接上数据库。
pb6.5下自动注册odbc数据源 ——————————————————————————————―――――――——――――――――――功能: 1 、pb6.5下自动注册odbc数据源;2 、自动获取程序或数据库目录;3 、不安装Sql anywhere 7.0 直连//获取程序所在目录String ls_curdirls_curdir=Space(256)//为字符缓冲区开辟内存空间GetCurrentDirectoryA(256,ls_curdir)ulong ul_numInt Answer,Answer1,Answer2,Answer3,Answer4,Answer5,Answer6,Answer7,ansApp stringls_driver,ls_start,ls_location,apppath,db_path,db_name,ODBCStr,ds_name,ls_ dbpath//设置Adaptive Server Anywhere 7.0的驱动程序路径ls_Location =ls_curdirls_dbpath=ls_curdir+"\data\yingxiao.db"//判断Adaptive Server Anywhere 7.0的驱动程序是否正确安装ls_Driver=ls_Location+"\dbodbc7.dll"ls_Start=ls_Location+"\dbeng7.exe"//IF Not (FileExists(ls_Driver) AND FileExists(ls_Start)) Then//MessageBox("错误!","系统中没有安装Adaptive Server Anywhere 7.0"+&//"的驱动程序,系统将终止运行!",StopSign!)//Return//End IF//设置ODBC\ODBCINST.INI\ODBC DRIVERSAnswer=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI"+& "\ODBC Drivers","Adaptive Server Anywhere 7.0", RegString!, "Installed") IF Answer = -1 ThenMessageBox("错误!","应用程序无法设置ODBC\ODBCINST.INI\"+&"ODBC DRIVERS,系统将终止运行",Information!)ReturnEnd if//设置ODBC\ODBCINST.INI\Answer1=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST."+& "Adaptive Server Anywhere 7.0", "CPTimeout", RegString!, "not pooled") Answer2=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST."+&"INI\Adaptive Server Anywhere 7.0", "Driver", RegString!,ls_Driver) Answer3=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST."+&"INI\Adaptive Server Anywhere 7.0", "Setup", RegString!,ls_Driver)IF Answer1 = -1 OR Answer2 = -1 OR Answer3 = -1 ThenMessageBox("错误!","应用程序无法设置ODBC\ODBCINST.INI,"+&"系统将终止运行!",Information!)//程序中不折行ReturnEnd ifdb_path = ""+ls_dbpath+""//设置数据库路径及文件名db_name = "yingxiao" //设置数据库名称ds_name = "yingxiao" //设置ODBC数据源名//设置ODBC DATA SOURCE名称Answer=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+& "ODBC Data Sources", ds_name, RegString!, "Adaptive Server Anywhere 7.0") Answer1=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+&ds_name,"driver", Regstring!, ls_Driver)Answer2=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+&ds_name,"start", Regstring!, ls_Start)Answer3=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+&ds_name,"autostop", Regstring!, "yes")Answer4=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+& ds_name,"DataBaseFile", Regstring!, db_path)Answer5=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+& ds_name,"DataBaseName", Regstring!, db_name)Answer6=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+& ds_name,"PWD", Regstring!, "sql")Answer7=RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+& ds_name,"UID", Regstring!, "dba")IF Answer = -1 ThenMessageBox("错误!","应用程序无法设置ODBC DATA SOURCE名称,"+& "系统将终止运行!",Information!) //程序中不折行ReturnEnd if//设置ODBC.ini细节Answer1=RegistrySet("HKEY_current_user\software\odbc\odbc.ini\"+& ds_name,"driver", Regstring!, ls_Driver)Answer2=RegistrySet("HKEY_current_user\software\odbc\odbc.ini\"+& ds_name,"start", Regstring!, ls_Start)Answer3=RegistrySet("HKEY_current_user\software\odbc\odbc.ini\"+& ds_name,"autostop", Regstring!, "yes")Answer4=RegistrySet("HKEY_current_user\software\odbc\odbc.ini\"+ds_name,& "DataBaseFile", Regstring!, db_path)Answer5=RegistrySet("HKEY_current_user\software\odbc\odbc.ini\"+ds_name,& "DataBaseName", Regstring!, db_name)Answer6=RegistrySet("HKEY_current_user\software\odbc\odbc.ini\"+ds_name,& "PWD", Regstring!, "sql")Answer7=RegistrySet("HKEY_current_user\software\odbc\odbc.ini\"+ds_name,& "UID", Regstring!, "dba")IF Answer1 = -1 OR Answer2 = -1 OR Answer3 = -1 OR &Answer4 = -1 OR Answer5 = -1 OR Answer6 = -1 OR Answer7 = -1 Then MessageBox("错误!","应用程序无法设置ODBC.INI细节,"+&"系统将终止运行!",Information!)ReturnEnd ifodbcstr='dsn=' + ds_name +';databasename=' + db_name + ';databasefile=' + db_pathSQLCA.DBMS="ODBC"SQLCA.Database=db_nameSQLCA.DbParm="connectstring='" + odbcstr+";uid=dba;pwd=sql'"open(w_splash)//sleep(2)connect using sqlca;IF SQLCA.SQLCode = -1 THENMessageBox("数据库连接失败", "不能连接到数据库上,请检查。
在PB 中用代码配置ODBC(深圳:独孤求败2003-05-16)在编写PB(PowerBuild)的Windows应用程序中,常常涉及到数据库的配置,特别是网络数据库的配置,通常基于网络的应用程序发行需要手工设置ODBC。
本文介绍一种代码配置的方法可以免去在进行单机或网络数据库应用程序时进行手工配置ODBC的烦琐。
PowerBuilder是功能强大的客户端开发工具,它的优势在于数据库应用程序的开发,所以绝大部分应用必须与数据库管理系统配合起来才能运行。
OBDC是一种编程接口,它能使应用程序访问以结构化查询语言(SQL)作为数据访问标准的数据库管理系统。
PB与数据库的连接可以通过ODBC接口实现,在ODBC中配置好数据源后,便可在程序代码中连接数据库并对数据库进行各种操作了。
配置ODBC的方法主要有三种:手工配置、代码自动配置和通过安装程序(如InstallShield等专业安装程序)自动配置。
大部分PB资料对手工配置ODBC均作了介绍,在这里主要介绍在代码中进1行ODBC的配置的方法。
第三种方法可以参考InstallShield等软件的使用说明。
原理Windows中所有的ODBC数据源在系统注册表中都有记载,因此只要编写相应的代码对注册表中的项目进行相应的修改即可。
Windows中与ODBC相关的键,主要有下面几项:HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER 记录所有已安装的ODBC驱动程序;HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI 记录各种ODBC驱动程序的相关信息;HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources 记录各种数据源的类型;HKEY_CURRENT_USER\Software\ODBC\ODBC.INI 记录各种数据源的详细信息。
收稿日期:2002-12-03作者简介:李守功(19562),男,陕西合阳人,宝鸡自来水公司高级工程师,大学本科,主要从事供水企业自动化系统和数据库系统的设计与开发工作。
控制工程Control Engineering of China May .2003Vol .10,S 02003年5月第10卷增刊文章编号:167127848(2003)S 020056203PB 应用中自动配置本地数据库的设计方法李守功1,王 蕾2(11宝鸡市自来水公司,陕西宝鸡 721000;21沈阳市自来水公司,辽宁沈阳 110001)摘 要:论述了用PowerBuilder 开发的本地数据库应用程序,在没有PowerBuilder 环境的用户计算机安装时,自动进行ODBC 配置的程序设计方法,实现了用户应用程序与数据的方便连接,其设计思想是将手工进行ODBC 配置的原理用程序来实现,同时给出了具体的应用程序代码。
该程序代码在“数据采集系统”中得到了检验。
文中的程序代码只要稍加修改就能为从事PowerBuilder 本地数据库应用开发的人员所使用和借鉴。
关 键 词:应用程序;PowerBuilder ;数据库中图分类号:TP 393 文献标识码:A1 引 言一个采用PowerBuilder 开发的本地数据库(如Sybase SQL Anywhere )应用程序,经编译成可执行文件,在脱离PowerBuilder 环境的用户计算机上运行时,除了需要可执行程序文件、动态库文件、资源文件、本地数据库文件、ODBC 数据库驱动程序和支持文件外,还需要进行ODBC 的适当配置后,这些程序才能正常运行。
为了让提交给用户的软件可以轻松地安装使用,而不必进行繁琐的手工设置,可以模拟人工进行ODBC 的配置方法,在应用程序中设计相应的程序,使程序安装时自动进行ODBC 的配置。
2 程序设计思想一般通过ODBC 可以和本地的各种小型数据库以及大型数据库进行连接,前提条件是:①数据库驱动程序在系统中已经安装和注册;②要创建用户的数据源和数据库描述文件。
创建数据库ODBC数据源
一、点击“开始”,进入控制面板,点击里面的“管理工具”,出现“数据源(ODBC)”的
图标,如图:
二、双击“数据源(ODBC)”,弹出一个新的窗口,点击“系统DSN”,点击“添加”
三、弹出新的窗口,将滚动条拉到最下面会出现“SQL Server”,选中,点击“完成”
四、出现新的窗口,输入名称“监控”,输入服务器地址“10.4.0.6”,点击“下一步”如果与南充中心的链路是通的将会出现新的窗口。
5、选择“使用用户输入登陆ID和密码的SQL Server验证,登陆ID:sa”,密码“command”,
点击“客户端配置“,将会出现新的窗口。
六、新窗口中选择“TCP/IP”, 输入服务器别名”10.4.0.6”,输入服务器名称“10.4.0.6”,端口号”1433“,点击确定。
七、点击后会退回第5步的窗口,点击“下一步“,出现新的窗口,选择更换默认数据库
“viewfoucs”,点击“下一步”
八,出现新的窗口,点击下一步
九、点击完成,出现新的窗口,点击测试数据源,出现测试成功。
点击确定,推出所有的窗口。
至此,配置数据源完成。
《PowerBuilder 9.0 数据库应用程序开发》㈠新建工作空间①【开始】→【程序】→ <Sybase> →启动【PowerBuilder9.0】②【文件】→ <new> →[Workspace]选项卡→【Workspace】图标→【OK】③设置路径[C:\temp] →输入文件名:student →【保存】㈡创建目标和应用对象①【new】按钮→[Target]选项卡→【Application】图标→【OK】②输入应用程序名:Student →设置“Library”路径[C:\temp] →【保存】→【Finish】㈢建立数据库 newdb,并自动连接数据库①启动【PowerBuilder9.0】②【Database】按钮→展开<ODB ODBC> →展开<Utilities> →双击<Create ASA Database>④User ID:DBA → Password: sql → Database Name:C:\temp\newdb.db→【OK】㈣在数据库中建立数据表(S、C、SC)和视图①建立数据表(S、C、SC)【Database】按钮→右击【Tables】文件夹→选择<New Table> →→定义表的字段(...) →单击【Exit】→【是】存盘→→输入表名(S、C、SC) →【OK】②为数据表(S、C、SC)指定主键展开【Tables】→右击表名(S) →左击<Add to Layout> →→右击表的标题栏→ <New> →<Primary Key> →选择“Column”:中主键字段(sno) →【Exit】→【是】③为数据表指定外键(sno 和 cno)●右击表SC的标题栏→ <New> →<Foreign Key> →<General>选项卡→→输入Foreign Key:aaaa →选择“Columns:”右边<sno>字段作外键●单击<Primary Key>选项卡→选择<Table:>(下拉表)中的<S>作参照表→【Exit】→【是】(保存)●同样,为表 SC指定另一个外键 cno (参照表为 C)④在表中输入数据●右击表S →选择<Edit Data> →选择 <Grid>●右击输入窗口→选择<Insert Row> →输入记录数据●为表SC输入数据●为表C输入数据⑤创建视图●右击数据库newdb下<Views>文件夹→选择<New View>●同时选择表 <S>和<SC> →【Open】●选择<Group>选项卡→在表S中选择 sno 和 sname →→将字段<s.sno>和<s.snane>拖至右边窗口●选择<Compute>选项卡→输入聚合操作: avg(score)→起别名:avg_score●选择<Syntax>选项卡→核对语句:CREATE VIEW …GROUP BY …●单击菜单行【Exit】→【是】(保存) →输入视图名:S_SC →【Create】㈤创建数据窗口(d_s, d_sc, d_c, d_s_sc, d_s_sc_c )① (PowerBar)【New】→[DataWindow]选项卡→【Grid】图标→【OK】②选择【Quick Select】数据源→【Next】③选择表<S> →【Add All】→【OK】④选择默认字体和颜色→【Next】→【Finish】⑤【Exit】→【是】→命名:d_s →【OK】⑥为d_sc, d_c, d_s_sc, d_s_sc_c创建数据窗口⑦创建d_s_sc_c数据窗口:... 选择【Quick Select】数据源→【Next】→选择S、C、SC三个表→【Open】→选择sno、sname、cno、cname、tname字段→【Exit】→(字体)【Next】→【Finish】→【Exit】→→【是】→命名:d_s_sc_c㈥创建应用程序用户界面窗口(w_main,w_manipulation,w_course_query,. . .)⑴创建主窗口 w_main① (PowerBar)【New】→[PB Object]选项卡→【Window】图标→【OK】②右击工具栏→分别打开<PainterBar1>、<PainterBar2>、<PainterBar3>画板工具栏③单击<PainterBar1>中下拉按钮→(展开控件窗口)④选择静态文本框控件【A】→单击主窗口→调整文本框位置和大小→→在文本框属性窗口输入Text:<学生选课系统> →设置字体和颜色⑤选择命令按钮控件【OK】→单击主窗口→调整命令按钮位置和大小→→在命令按钮属性窗口输入Text:<数据操作> →设置字体大小→分别创建其它控件. . .⑥单击主菜单行退出按钮【Exit】→选【是】→输入窗口对象名:w_main→【OK】⑵创建“数据操作”窗口 w_manipulation①创建一个静态文本框控件:<请输入数据:>②创建一个单行编辑框控件: (输入数据)③创建三个数据窗口控件: <学生表>、 <选课表>、 <课程表>④创建 8个命令按钮控件: [BROWSE] 、 [INSERT_SC] 、 [DELETE_SC] [UPDATE_SC] 、 [RESET] 、[QUERY_SNO] 、 [OK] 、 [EXIT]⑤为窗口命名:w_ manipulation⑥→【OK】⑶创建“课程查询”窗口 w_course_query①创建2个静态文本框控件:<请输入数据:>、<查询字段:>②创建1个单行编辑框控件: (输入数据)③创建1个下拉式列表框控件: (选择查询字段)④创建1个数据窗口控件: <课程表>⑤创建 2个命令按钮控件: [查询] 、 [返回主窗口]⑥创建含2个单选按钮的分组框: <查询方式>⑦为窗口命名:w_ course_query →【OK】⑷创建“学生选课”窗口 w_select_course⑸创建“课程更新”窗口 w_course_update⑹创建“查询学生平均成绩”窗口 w_query_s_avg㈦编写脚本(事件驱动程序)⒈启动应用程序(student.pbl)的open事件脚本【操作步骤】① (PowerBar)【Open】按钮 (打开<Open>对话框)②选择“Objects of Type :” 为 [Application]③选择“Objects Name :” 为 [Student]④单击【OK】 (打开应用程序“Open”事件编辑窗口)⑤在编辑窗口输入如下“脚本” :SQLCA.DBMS = “ODBC“ // 数据库厂商名称SQLCA.AutoCommit = False // 定义程序为手工提交事务SQLCA.DBParm = "Connectstring='DSN=newdb_01'"connect; // 连接数据源newdb_01open(w_main) // 打开主窗口⒉在主窗口为各个控件编写驱动程序(1) 命令按钮【数据操作】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【w_main】 (打开主窗口)②单击【数据操作】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:open(w_manipulation) // 打开“数据操作窗口”close(parent) // 关闭主窗口⑤单击【保存】按钮(2) 命令按钮【课程查询】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【w_main】 (打开主窗口)②单击【课程查询】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:open(w_course_query) // 打开“课程查询”窗口close(parent) // 关闭主窗口⑤单击【保存】按钮(3) 命令按钮【学生选课】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【w_main】 (打开主窗口)②单击【学生选课】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:open(w_select_course) // 打开“学生选课”窗口close(parent) // 关闭主窗口⑤单击【保存】按钮(4) 命令按钮【课程更新】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【w_main】 (打开主窗口)②单击【课程更新】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:open(w_course_update) // 打开“课程更新”窗口close(parent) // 关闭主窗口⑤单击【保存】按钮(5) 命令按钮【查询学生平均成绩】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【w_main】 (打开主窗口)②单击【平均成绩】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:open(w_query_s_avg) // 打开“查询学生平均成绩”窗口close(parent) // 关闭主窗口⑤单击【保存】按钮(6) 命令按钮【退出】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【w_main】 (打开主窗口)②单击【退出】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:close(parent) // 关闭主窗口⑤单击【保存】按钮⒊在“数据操作”窗口为各个控件编写驱动程序(脚本)(1) 在窗口的Open事件中编写脚本【操作步骤】①展开【student.pbl】②双击【 w_manipulation 】窗口图标 (打开“数据操作” 窗口)③单击 [Open] 选项卡④在“script for open”(打开脚本)编辑窗口输入如下语句:dw_1.settransobject(sqlca) // 为控件dw_1设置通讯区域 sqlcadw_2.settransobject(sqlca) // 为控件dw_2设置通讯区域 sqlcadw_3.settransobject(sqlca) // 为控件dw_3设置通讯区域 sqlcashl_1.setfocus() // 将焦点设置到控件 sle_1⑤单击【保存】按钮(2) 命令按钮【BROWSE】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【BROWSE】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:dw_1.retrieve() // 从数据库的S表中检索全部数据dw_2.retrieve() // 从数据库的SC表中检索全部数据dw_3.retrieve() // 从数据库的C表中检索全部数据⑤单击【保存】按钮(3) 命令按钮【RESET】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【RESET】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:string query , sqldw_1.reset()dw_2.reset()dw_3.reset()query = ""dw_1.setfilter(query)dw_1.filter()dw_2.setfilter(query)dw_2.filter()sql = "select * from c"dw_3.setsqlselect(sql)dw_3.setfilter(query)dw_3.filter()shl_1.text=""shl_1.setfocus()⑤单击【保存】按钮(4) 命令按钮【INSERT_SC】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【 INSERT_SC 】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:dw_2.insertrow(0)dw_2.scrolltorow(dw_2.rowcount())dw_2.setfocus()⑤单击【保存】按钮(5) 命令按钮【DELETE_SC】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【 DELETE_SC 】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:dw_2.deleterow(0) // 从SC表中删除当前行:deleterow()⑤单击【保存】按钮(6) 命令按钮【UPDATE_SC】的 clicked 事件 p.243【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【 UPDATE_SC 】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:int g1, g2g1 = integer(shl_1.text)g2 = dw_2.GetItemNumber(dw_2.GetRow(), 3)dw_2.SetItem(dw_2.GetRow(), 3, g2+g1)⑤单击【保存】按钮(7) 命令按钮【OK】的 clicked 事件 p.243【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【 OK 】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:if dw_2.update() = 1 thencommit;elserollback;end if⑤单击【保存】按钮(8) 命令按钮【QUERY_SNO】的 clicked 事件 p.243【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【 QUERY_SNO 】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:string query, sqlquery = "sno='"+shl_1.text+"'"dw_1.setfilter(query)dw_1.filter()dw_1.retrieve()dw_2.setfilter(query)dw_2.filter()dw_2.retrieve()sql = "select c.* from sc, c where o=o andsc.sno='"+shl_1.text+"'"dw_3.setsqlselect(sql)dw_3.retrieve()shl_1.setfocus()⑤单击【保存】按钮(9) 命令按钮【EXIT】的 clicked 事件 p.243【操作步骤】①展开【student.pbl】→双击【 w_manipulation】②单击【 EXIT 】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:open(w_main)close(parent)⑤单击【保存】按钮⒋在“课程查询”窗口为各个控件编写驱动程序(脚本)(1) 在窗口的Open事件中编写脚本【操作步骤】①展开【student.pbl】②双击【 w_course_query 】窗口图标 (打开“课程查询” 窗口)③单击 [Open] 选项卡④在“script for open”(打开脚本)编辑窗口输入如下语句:dw_1.settransobject(sqlca)dw_1.retrieve()⑤单击【保存】按钮(2) 命令按钮【查询】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_course_query】②单击【查询】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:dw_1.setfilter("")if rb_1.checked = true thenchoose case ddlb_1.textcase "课程号"dw_1.setfilter("cno='"+shl_1.text+"'")case "课程名"dw_1.setfilter("cname='"+shl_1.text+"'")case "教师名"dw_1.setfilter("tname='"+shl_1.text+"'")end chooseelsechoose case ddlb_1.textcase "课程号"dw_1.setfilter("cno like" + "'%" +shl_1.text+"%'") case "课程名"dw_1.setfilter("cname like" + "'%" +shl_1.text+"%'") case "教师名"dw_1.setfilter("tname like" + "'%" +shl_1.text+"%'") end chooseend ifdw_1.retrieve()shl_1.setfocus()⑤单击【保存】按钮(3) 命令按钮【返回主窗口】的 clicked 事件p.243【操作步骤】①展开【student.pbl】→双击【 w_ w_course_query】②单击【返回主窗口】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:open(w_main)close(parent)⑤单击【保存】按钮⒌在“学生选课”窗口为各个控件编写驱动程序(脚本)(1) 在窗口的Open事件中编写脚本p.245【操作步骤】①展开【student.pbl】②双击【 w_select_course 】窗口图标 (打开“学生选课” 窗口)③单击 [Open] 选项卡④在“script for open”(打开脚本)编辑窗口输入如下语句:dw_1.settransobject(sqlca)dw_1.setfilter("")dw_1.retrieve()int numnum = dw_1.rowcount()st_4.text = string(num)shl_1.setfocus()⑤单击【保存】按钮(2) 命令按钮【按学号查询】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_select_course】②单击【按学号查询】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:if shl_1.text = "" thendw_1.setfilter("")elsedw_1.setfilter("s_sno='"+shl_1.text+"'")end ifdw_1.retrieve()int numnum = dw_1.rowcount()st_4.text = string(num)shl_1.setfocus()⑤单击【保存】按钮(3) 命令按钮【选课】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_select_course】②单击【选课】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:if shl_1.text="" or shl_2.text="" thenmessagebox("提示!","输入框不能为空!",exclamation!, ok!, 2) elsestring cnoselect cno into:cno from sc where sno=:shl_1.text and cno=:shl_2.text;if cno=shl_2.text thenmessagebox("提示!","你已经选过该课程!",exclamation!, ok!, 2) elseint numberselect count(*) into: number from c where cno=:shl_2.text;if number=0 thenmessagebox("提示!","该课程不存在!",exclamation!, ok!, 2)elseinsert into sc(sno,cno,score)value(:shl_1.text, : shl_2.text, null);end ifend ifend ifshl_2.setfocus()⑤单击【保存】按钮(4) 命令按钮【退课】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_select_course】②单击【退课】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:if shl_1.text="" or shl_2.text="" thenmessagebox("提示!","输入框不能为空!",exclamation!, ok!, 2) elseint numberselect count(*) into: number from sc where sno=:shl_1.textand cno=:shl_2.text;if number=0 thenmessagebox("提示!","你未选修过该课程!",exclamation!, ok!, 2)elsedelete from sc where sno=:shl_1.text and cno=:shl_2.text;end ifend ifshl_2.setfocus()⑤单击【保存】按钮(5) 命令按钮【更新选课表】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_select_course】②单击【更新选课表】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:dw_1.setfilter("s_sno='"+shl_1.text+"'")dw_1.retrieve()int numnum = dw_1.rowcount()st_4.text = string(num)shl_2.setfocus()⑤单击【保存】按钮(6) 命令按钮【返回主窗口】的 clicked 事件 p.243【操作步骤】①展开【student.pbl】→双击【 w_select_course】②单击【返回主窗口】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:open(w_main)close(parent)⑤单击【保存】按钮⒍在“课程更新”窗口为各个控件编写驱动程序(脚本) ppt.94(1) 在窗口的Open事件中编写脚本p.245【操作步骤】①展开【student.pbl】②双击【 w_course_update 】窗口图标 (打开“课程更新” 窗口)③单击 [Open] 选项卡④在“script for open”(打开脚本)编辑窗口输入如下语句:int numberdw_1.settransobject(sqlca)dw_1.retrieve()number = dw_1.retrieve()st_1.text = string(number)⑤单击【保存】按钮(2) 命令按钮【新增课程】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_course_update】②单击【新增课程】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:dw_1.insertrow(0)dw_1.scrolltorow(dw_1.rowcount())dw_1.setfocus()cb_1.enabled = false⑤单击【保存】按钮(3) 命令按钮【保存课程】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_course_update】②单击【保存课程】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:int numberstring cno, strnumber = dw_1.getrow()cno = dw_1.getitemstring(number,"cno")select cno into:str from c where cno=:cno;if cno=str and cb_1.enabled = false thenmessagebox("提示!","不能增加,此课程已存在!") elsedw_1.update()number = dw_1.retrieve()st_1.text = string(number)cb_1.enabled = trueend if⑤单击【保存】按钮(4) 命令按钮【删除课程】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_course_update】②单击【删除课程】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:int numberstring cno, strnumber = dw_1.getrow()cno = dw_1.getitemstring(number,"cno")select distinct cno into:str from sc where cno=:cno;if cno=str thenmessagebox("提示!","不能删除,此课程已有学生选修!") elsedw_1.deleterow(number)dw_1.update()number = dw_1.retrieve()st_1.text = string(number)end if⑤单击【保存】按钮(5) 命令按钮【返回主窗口】的 clicked 事件 p.248【操作步骤】①展开【student.pbl】→双击【 w_course_update】②单击【返回主窗口】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:open(w_main)close(parent)⑤单击【保存】按钮⒎在“查询学生平均成绩”窗口为各个控件编写驱动程序(脚本) ppt.101(1) 在窗口的Open事件中编写脚本p.248【操作步骤】①展开【student.pbl】②双击【 w_query_s_avg】窗口图标 (打开窗口)③单击 [Open] 选项卡④在“script for open”(打开脚本)编辑窗口输入如下语句:dw_1.settransobject(sqlca)dw_1.retrieve()⑤单击【保存】按钮(2) 命令按钮【查询】的 clicked 事件【操作步骤】①展开【student.pbl】→双击【 w_query_s_avg】②单击【查询】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked”(单击脚本)编辑窗口输入如下语句:dw_1.setfilter("")if rb_1.checked = true thenchoose case ddlb_1.textcase "学号"dw_1.setfilter("sno='"+shl_1.text+"'")case "姓名"dw_1.setfilter("sname='"+shl_1.text+"'")end chooseelsechoose case ddlb_1.textcase "学号"dw_1.setfilter("sno like"+ "'%" + shl_1.text+"%'") case "姓名"dw_1.setfilter("sname like"+ "'%" + shl_1.text+"%'") end chooseend ifdw_1.retrieve()shl_1.setfocus()⑤单击【保存】按钮(3) 命令按钮【返回主窗口】的 clicked 事件 p.249【操作步骤】①展开【student.pbl】→双击【 w_query_s_avg】②单击【返回主窗口】按钮③单击 [Event List] 选项卡→双击 <clicked( )>④在“script for clicked” (单击脚本) 编辑窗口输入如下语句:open(w_main)close(parent)⑤单击【保存】按钮㈧运行应用程序单击PowerBar【Run】按钮→(显示应用程序主界面)→选择功能按钮********* Finished *********。