您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Pb技巧与oracle基础培训
Pb技巧和oracle基础培训华东电子陈海燕2006年6月前言从2005年3月份进入华东公司。在从事船代维护这一年时间里,总结了一点pb技巧。同时也学习了oracle一些基础的知识。今天与大家分享一下。Pb技巧当Retrieve时不清除原有Datawindow数据当你调用Retrieve函数,PowerBuilder自动清除原有DataWindow然后Retrieve数据。在DatawindowRetrieveStart事件中,使用Return2,这样PowerBuilder不会清除原有数据而是追加新数据如何在分组形式的DataWindow中分别显示各组的行号当我们为datawindow的每一行显示行号时,可以简单的方一个表达式为GetRow()计算列,但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为GetRow()-first(GetRow()forgroup1)+1的计算列如何能够作到在打印一个DataWindows后不自动换页,而继续打印下一个DataWindows?在PrintPage事件中返回0数据窗口中浮点数的问题DW输入浮点数9.112,光标离开输入框后,数字就变成9.1120005,在UPDATE保存后也是9.1120005。这种现象,可以采用设置EDITMASK来解决将mask设为###.##而不是000.00API函数GetModuleFileNameA该函数在PB开发环境中运行时返回的是PB60.exe所在的目录,在编译后的可执行文件运行时才返回应用程序所在目录。那么如何得知程序是在开发环境中运行还是编译后的可执行文件呢?可以根据Handle(getapplication())的返回值来判断,等于0时程序运行在开发环境中,非0则是编译后的可执行文件。FunctionuintGetModuleFileNameA(ulonghModule,refstringlpFilename,ulongnSize)Librarykernel32.dllstringls_Buffer=Space(255)IFHandle(GetApplication())0THEN////已编译GetModuleFileNameA(Handle(GetApplication()),ls_Buffer,255)ENDIFSetFilter(ls_filter)中的ls_filter格式如果过滤的字段为1、日期时间型,则用下列格式Ls_filter=‘changer_dte=datetime(“’+string(ldt_1)+’”)andchanger_dte=datetime(“’+string(ldt_2)+’”)’2、字符型Ls_filter=‘bill_nbr=“’+ls_nbr+’”’3、数值型Ls_filter=‘ship_no=’+string(shipno)对于find(express,start,end)函数,上述格式同样适用外部联接(+)外部联接‘+’按其在‘=’的左边或右边分为左联接和右联接,若不带“+”运算符的表中的一个行不直接匹配于带“+”运算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.若二者均不带‘+’,则二者中无法匹配的均被返回.利用外部联接“+”,可以替代效率十分低下的notin运算,大大提高运行速度.外联接的例子:Student:st_id,name,age(学生表)Student_kill:st_id,skill(技能表)Selecta.st_id,name,age,skillfromstudenta,student_killbWherea.st_id=b.st_id(+)orderbya.name若在技能表中无值与学生表匹配纪录。则插入一条空与之匹配,记录其技能为空Pb数据窗口的两点应用技巧一、在开发应用系统的时候,数据窗口中用户焦点要从一个字段转移到另外一个字段的时候,只能用Tab键来实现,而用户通常是用回车键来改变焦点,为了保持用户的习惯,在系统中实现良好的用户操作界面,我们就必须实现在数据窗口中用Enter代替Tab在字段间移动。实现方法:1)您需要创建一个可视的用户对象(UserObject),在标准(Standard)对象中选择DataWindow。2)选择Declare菜单项中的UserEvents子菜单,定义一个用户事件,取用户事件名为pb_enter(事件名可任意指定),事件号(EventID)选择pbm_dwnprocessenter(此事件号不能任意指定)。点OK按纽退回。3)在创建的用户对象上单击鼠标右键,选择弹出菜单上的Scripts项来编写程序,在selectevent上选择你刚才定义的pb_enter事件,在编辑窗中输入以下两条语句后退出:Send(Handle(this),256,9,Long(0,0))return1Pb数据窗口的两点应用技巧(续)4)给你的用户对象取一个名字后保存即可。在你新建窗口需要用到数据窗口对象时,你就可以把你所定义的用户对象放入你的窗口中来代替PB提供的数据窗口对象,它就可以实现用Enter代替Tab在字段间移动。二、我们在PowerBuilder应用程序的开发过程中,使用数据窗口时,经常会遇到某列的数据太长,不能同时全部显示的情况.若采用自动水平滚动,操作起来又不够简便.下面介绍一种方法,实现列数据多行显示,即实现列数据的自动折行.具体步骤如下:1)打开一个数据窗口。2)在需设定自动折行的列上双击鼠标,弹开此列的属性窗口。3)选择Position标签,选中AutosizeHeight复选框。4)选择Edit标签,不选中AutoHorzScroll复选框。Pb数据窗口的两点应用技巧(续)6)点中Detail带(写有Detail的灰色长带),单击鼠标右键,选择Properties菜单项。7)选中AutosizeHeight复选框。8)单击OK按钮,保存所做的修改。9)保存此数据窗口。注意:连在一起的汉字(中间没有标点或空格分隔),系统将认为是一个单词,不会自动进行折行。Oracle8i基础Oracle8i数据类型先看一下oracle8i的数据类型数据类型说明Char定长字符,≤2000个字符Varchar(同Varchar2)可变字符,≤4000个字符Varchar2变长字符,≤4000个字符Date固定长度(7字节)的日期型Number数字型,可存放实型和整型Long可变字符,≤2GB个字符Raw可变二进制数据,≤4000字节Longraw可变二进制数据,≤2GBMLSLABEL仅TrustedOracle用长度在2~5字节间Blob大二进制对象,≤4GBClob大字符串对象,≤4GBNclob多字节字符集的Clob,≤4GBBfile外部二进制文件,大小由OS决定Char(size),varchar(size),varchar(2)(size)数据类型1、char(size):定长字符型(在Oracle5、Oracle6是变长),字符长度不够自动在右边加空格符号。当字符长度超出2000个则错误。不指定大小缺省为1。2、varchar(size):可变字符型,当前与VARCHAR2(size)相同。3、varchar2(size):可变字符型,当前与VARCHAR(size)相同。VARCHAR2类型的字段(列)可存放4000个字符;但是VARCHAR2变量可以存放32,767个字符。大小必须指定Nchar(size)和Nvarchar2(size)NCHAR和NVARCHAR2分别与CHAR和VARCHAR2有相同的大小。并用于于存放NationalLanguageSupport(NLS)数据,Oracle允许以本地语言存放数据和查询数据。如果将列名声明成NCHAR、NVARCHAR2这样的类型,则insert和select等语句中的具体值前加N,不能直接按照普通字符类型进行操作。看下面例子:SQLcreatetablenchar_tst(namenchar(6),addrnvarchar2(16),salnumber(9,2));表已创建。SQLinsertintonchar_tstvalues(N'赵元杰',N'北京市海淀区',9999.99);已创建1行。SQLselect*fromnchar_tstwherenamelikeN'赵%';NAMEADDRSAL--------------------------------赵元杰北京市海淀区9999.99SQLselect*fromnchar_tstwherenamelike'赵%';select*fromnchar_tstwherenamelike'赵%'*ERROR位于第1行:ORA-12704:字符集不匹配.提示:虽然Oracle可以使用nchar,nvarchar2类型来存放字符数据,但建议设计者不要使用NCHAR和NVARCHAR2。因为CHAR和VARCHAR2就能存放汉字。Number(p,s)p是数据的整数部分,s是数据的精度(即小数)部分,注意,s部分可以表示负的精度。用s可以表示从小数点往右或往左保留多少位。如下表:实际值数据类型存储值1234567.89Number1234567.891234567.89Number(8)12345681234567.89Number(6)出错1234567.89Number(9,1)1234567.91234567.89Number(9,3)出错1234567.89Number(5,-2)12346001234511.89Number(5,-2)12345001234567.89Number(5,-4)12300001234567.89Number(*,1)1234567.9number(7,2),--表示5位整数,2位小数DATEOracle的日期型用7个字节表示,每个日期型包含如下内容:lCentury(世纪)Year(年)Month(月)Day(天)lHour(小时)Minute(分)Second(秒)日期型字段有下面特点:l(1)日期型字段的插入和更新可以数据型或字符并带to_date函数说明即可例子:SQLcreatetablesave_info(per_idvarchar2(20),namevarchar2(20),tran_datedate,2tran_valnumber(12,2));表已创建。SQLinsertintosave_infovalues('110105540609811','赵元杰',2to_date('2001.06.18','yyyy.mm.dd'),12345.66);已创建1行。SQLselect*fromsave_info;PER_IDNAMETRAN_DATETRAN_VAL------------------------------------------------------------110105540609811赵元杰18-6月-011234.66DATE(续)SQLselectper_id,name,to_char(tran_date,'yyyy/mm/dd'),tran_valfromsave_info;PER_IDNAMETO_CHAR(TRTRAN_VAL------------------------------------------------------------110105540609811赵元杰2001/06/1812345.66l(2)缺省的日期格式有NLS_DATE_FORMAT参数控制,它的缺省格式为DD-MON-YY。l缺省的时间是夜里00:00:00(即0点0分0秒)。(3)sysdate返回的是服务器的时间。SQLselectto_char(sysdate,'ccyyyy.mm.dd')fromdual
本文标题:Pb技巧与oracle基础培训
链接地址:https://www.777doc.com/doc-13254 .html