《嵌入式SQL语言》PPT课件.ppt

上传人:tia****nde 文档编号:11507295 上传时间:2020-04-26 格式:PPT 页数:30 大小:266.50KB
返回 下载 相关 举报
《嵌入式SQL语言》PPT课件.ppt_第1页
第1页 / 共30页
《嵌入式SQL语言》PPT课件.ppt_第2页
第2页 / 共30页
《嵌入式SQL语言》PPT课件.ppt_第3页
第3页 / 共30页
点击查看更多>>
资源描述
第14章嵌入式SQL语言,14-1嵌入式SQL语句14-2动态SQL语句,14-1嵌入式SQL语句,SQL语句:每个数据库管理系统(DMS)都有其自己的数据处理语言(DML),所有DML语言都是基于一种语言(SQL语言,又称为结构化的查询语言)。SQL语句有三种主要类型。最常见的语句(query),即信息请求,第二种是数据修改语句,即数据的添加、删除或更新。最后一种类型是系统和事务处理管理(例如,生成表、授权安全许可、提交、以及回调事务处理)。,以前介绍的SQL语言是作为独立语言在终端交互方式下使用的。这是面向集合的描述性语言,是非过程性的。即大多数语句都是独立执行,与上下文无关的。而许多事务处理应用都是过程性的,需要根据不同的条件来执行不问的任务,因此单纯用SQL语言是很难实现这类应用的。在PB中由于拥有功能强大的数据窗口,使得对数据库的操作一般都由数据窗口完成。然而数据窗口也不是万能的(比如程序中连接数据库就必须通过嵌入式SQL来完成),有时候,在程序中我们往往需要对数据库进行读取或修改一行数据,需要动态的查询一些数据,查询条件由在程序中动态设定,这时使用SQL语句就显得灵活方便。针对这类应用需求,PowerScript提供了一整套嵌入式SQL语句。利用嵌入式SQL语句,我们能够在程序中灵活地操纵数据库。,PowerScript支持在程序中使用嵌入式SQL语句。实际上,对这类语句,PowerBuilder在将其发送到DBMS之前,并不做任何处理,而由DBMS完成相应操作,最后PowerBuilder得到处理结果。在程序中书写SQL语句的格式为:SQL语句;整个SQL语句可以写在一行,也可以写成更易理解的多行格式,只要在语句结束处放上一个分号(;)即可。在SQL语句中可以使用常量或合法的变量,但使用变量时须在变量前加个冒号(:)(通常称做绑定变量或引用变量),多个变量或常量之间用逗号(,)分隔。,例如:INSERTINTOEmployee(Emp_nbr,Emp_name)VALUES(:EmpNbr,李明);其中,Employee是表名,Emp_nbr、Emp_name是列名,EmpNbr是程序说明的变量,整个语句的意思是在表Employee中插入一条记录,该记录Emp_nbr列的值为变量EmpNbr中存放的值,列Emp_name的值为“李明”。,一、嵌入式的SQL语句,什么是嵌入式的SQL语句?嵌入式包含以下的含义:嵌入式的SQL语句可以直接嵌入到用户的powerscript中嵌入式的SQL语句使用户能在命令的各个区域包含powerscript变量。利用嵌入式的SQL语句,我们能够在程序中灵活的操纵数据库,实际上对这类语句,PB在将其发送到DBMS之前,并不做任何处理,而由DBMS完成相应的操作,最后由powerbuilder得到处理结果。,嵌入式的SQL语句执行后可能失败也可能成功。良好的编程风格应对每条SQL语句的执行结果进行检查。执行结果存放在事务对象的SQLCODE当中,0表示成功,-1表示失败。二、建立和断开与数据库的连接使用CONNECT建立与数据库的连接CONNECT是每个访问数据库的PowerBuilder程序必须使用的语句,它的功能是通过事务对象将应用程序与数据库建立连接,连接成功后,其它SQL语句和数据窗口才能通过事务对象操作数据库。,CONNECT语句的语法格式为:CONNECTUSINGTransactionObject;其中,TransactionObject是事务对象,在执行该语句前,必须正确设置事务对象的数据库连接属性。大括号()表示该成分可以省略,省略时使用缺省的事务对象disconnectUSINGTransactionObject;,三、提交与回滚事务,事务是数据库管理系统完成一项完整工作的逻辑单位,数据库管理系统保证一个事务要么被完整地完成(称做提交),要么被彻底地取消(称做回滚)。应用程序可以通过COMMIT和ROLLBACK语句控制事务操作。应该注意的是,事务和事务对象是两个完全不同的概念。,1提交事务语句COMMIT语句提交事务,完成数据库的物理修改。执行该语句后,将关闭所先前打开的游标(CURSOR)和过程(PROCEDURE),并开始一个新的事务。COMMIT语句的语法格式为:COMMITUSINGTransactionObject;其中,TransactionObject更新数据库操作的事务对象名,缺省时使用事务对象SQLCA。,ROLLBACK语句(回滚)语句放弃自上一个COMMIT、ROLLBACK或CONNECT语句以来的所有数据库操作,关闭所有的游标和过程,并开始一个新的事务。其语法格式为:ROLLBACKUSINGTransactionObject;其中,TransactionObject是事务对象名,缺省时使用事务对象SQLCA。,四、单行检索语句select语句,格式:selectcol1,col2,colninto:var1,:var2,:varnfromtable_namewhere条件表达式using事物处理对象,例如:integerstud_idstringname,sexselectstud_id,name,sexinto:stud_id,:name,:sexfromstudentwherename=”john”;单行SELECT语句从数据库中检索一条记录,如果找到多条满足条件的记录,则产生错误。事务对象的sqlcode取值为100。,五、insert语句,insertinto表名列名1,列名2,列名3values(:v1,:v2,:vn)USING事务对象;insertstudent(id,name,sex,math)values(:s_id,:s_name,f,89);insertstudentvalues(9969,jim,m,null,null,96,null)usingsqlca;,六、update语句,该语句更新满足条件的记录的值。格式:update表名set列1=:v1,列2=:v2.Where条件表达式Using事务对象;Intm=0Updatestudentsetmath=:mwherenamelike王%;,七、delete语句,该语句从指定的表中删除满足条件的记录。Deletefrom表名Where条件表达式Using事务对象;Intm1=30,m2=20Deletefromstudentwheremath:m1andmath:m2;,八、检查SQL语句执行情况,嵌入式SQL语句的执行有可能成功、也有可能失败,良好的编程风格是对每条可执行的SQL语句都检查其执行情况。每当执行一条SQL语句后,与该语句相关的事务对象的SQLCode属性都给出一个值指示SQL语句的执行是否成功:SQLCode取值为:0最近一次SQL语句执行成功-1最近一次SQL语句执行失败100最近一次SQL语句没有返回数据,当SQLCode的值为-1时(即最近一次SQL语句执行失败时),事务对象的SQLDBCode属性中存放着数据库厂商提供的错误代码、事务对象的SQLErrText属性中存放着数据库厂商提供的错误信息,利用这两个属性,可以得到出错原因。下面是个检查SQL语句的执行是否成功的示例:,intEmp_num=Integer(sle_1.Text)SELECTemployee.Emp_Name,INTO:sle_Name.textFROMEmployeeWHEREEmployee.Emp_num=:Emp_num;ifEmp_tran.SQLCode=100then/未找到MessageBox(查询雇员,未找到指定雇员)elseifEmp_tran.SQLCode0then/SELECT语句执不成功MessageBox(数据库错误,sqlca.SQLErrText,Exclamation!)/显示出错信息EndIf,14-2动态SQL语句,前面介绍的SQL语句如表名、列名、条件等在编译时已经确定,但有时候,我们需要在运行的时候才能确定我们需要查询的表名、列名、条件,甚至动态的创建表,这时就需要使用动态SQL语句。动态SQL语句有四种类型。一、类型一executeimmediatesqlstatementusing事务对象;sqlstatement是一个内含SQL语句的字符串。,例如:Stringmysql,s_id,s_nameIntmM=93S_id=9969S_name=jimMysql=”insertintostudent(id,name,math)values(”Mysql=mysql+s_id+”,”+name+”,”+string(m)+”)”Executeimmediate:mysql;,在程序中动态的创建表StringmysqlMysql=”createtableteacher”,二、类型二格式:PreparedynamicstagingareafromSQL表达式Using事务对象;ExecutedynamicstagingAreaUsing变量列表;Dynamicstagingarea是powerscript提供的一种数据类型,用来存储动态SQL语句所用的信息,通常我们使用预定义的全局变量SQLSA,不用另外定义。利用这种动态的SQL语句用语执行数据操作语句(例如定义表、删除表等)以及插入、更新和删除记录。,IntmStrings_id,s_name,sqlstrSqlstr=“insertintostudent(id,name,math)values(?,?,?)”Preparesqlsafrom:sqlstrusingsqlca;M=97S_id=”9969”S_name=”jim”Executesqlsausing:s_id,:s_name,:math;当涉及的参数及类型较多时,用类型一需要较多的转换函数,字符串的构造相当复杂,用类型二方法比较简洁。,实验五:包含三个PB对象1.应用对象mypbex。主要完成打开主窗口,在退出应用程序时,断开与数据库的联接。2.登录窗口w_login(respond!,主要根据用户输入的密码和口令来连接数据库,根据连接数据库的结果,来确定是否显示主窗口。该窗口有两个按钮,“确定”来完成与数据库的连接,并根据连接的结果,来判断是否使主窗口可见,而“取消”按钮则关闭应用系统。该窗口有一个窗口函数wf_connect来完成与数据库的连接有两个单行编辑器来输入连接的口令和密码。,3.主窗口w_main(main!)在打开该窗口时首先显示登录窗口,待用户登录成功后才显示主窗口。(1)在w_login中声明一个对象函数wf_connect()sqlca.dbms=ODBCIFsle_password.text=thenreturn-1sqlca.dbparm=connectstring=DSN=STUDENT;UID=+userid+;PWD=+password+connectusingsqlca;returnsqlca.sqlcode,(2)w_login的确定按纽的clicked事件中ifwf_connect(sle_userid.text,sle_password.text)0thenmessagebox(连接数据库错误!,连接失败+sqlca.sqlerrtext)haltendifclose(parent)w_main.visible=true,(3)w_login的取消按纽的clicked事件中:halt(4)在应用对象的mypbex的open事件中open(w_login)open(w_main)(5)在应用对象的close事件中disconnectusingsqlca;(6)在窗口w_main的“退出”按纽的clicked事件中:close(parent),练习:,1、在窗口在w_main上有一个编辑框sle_1输入姓名,在w_person中有一个静态文本控件st_1来显示姓名,在w_main上单击一次左键,就打开窗一个口w_person,并将w_main上sle_1的姓名传递到w_person中,并在w_person的st_1上显示出来。,2、在w_main有一个静态文本控件st_1显示自开始计时后的秒数。并两个按钮“开始计时”cb_start,和“停止计时”cb_end。要求单击按纽“开始计时”计时器开始计时,“停止计时”计时器停止计时。在计时器正在计时时“开始计时”的按纽变灰。3、在2的基础上增加一个功能,在w_main上单击鼠标右键,若计时器没有计时,则开始计时,若计时器正在计时,则停止计时。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!