数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
PB编程通俗快速入手(自己2002年教别人PB时随手写的,很多年了,放上来送给新手们)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

PB编程通俗快速入手

张金柱

第一章   一般使用

 

1、  程序的开始,applicationopen事件。

退出程序例程:halt为退出函数

int SureQuit

SureQuit = 2

SureQuit=Messagebox("退出系统","退出前请确认已保存好数据",Question!,OKCancel!, 2)

if SureQuit = 1 then halt

 

2、  变量定义有效范围:

     declareglobe 全局变量,整个程序均有效

     declareinstance 局部变量,可在一个对象中有效(如:窗体,APP等)

     模块中定义的变量,可在当前模块中有效

定义:PB中大小写不敏感)

constant string LS_HOMECITY = "Boston"  常量

int a                      整型

char c                   字符型

Boolean b              布尔型

String a                 字符串型

String a[1000]          1000的数组,01000

String a[3 to 30]       数组元素为330,最初一个为a[3],最后一个为a[30]

String a [100,3to 30]   二维数组,一维为0~100,二维为3 30

String a[]               变长数组,赋值时(如a[30]=333)自动分配内存。

得到上界UPPERBOUND,下界LOWERBOUND

操作:

a=”aaaa”+”vvvbb”+b+c

string(b)                B转换成字符串型

integer(“333333333333”)          “333333333333”字符串转换成数333333333333

a=a+b*c^d/e\f%g

◎注意:减号前后要空格,用于避免PB7.0之前版本的BUG

 

3、  函数定义:

第一行是返回类型和函数名,第二行是变量类型和变量名,tab键加形参。

Return 是函数的返回,同时如C语言一样,return则函数运行结束

4、  打开窗口

open(窗口名)

openwithparm(窗口名,参数,父窗口<仅对子窗体和弹出窗体有效>)

5、  MDI窗体中打开子窗体

层叠样式打开 opensheet(子窗体,父窗体名,1,layered!)

平铺样式打开     opensheet(子窗体,父窗体名,1, Original!)

如果在父窗体的窗体级函数下编写,可用 opensheet(子窗体,this,1, Original!)

第三个参数表示新开窗体在父窗体菜单中的位置。

 

6、  控件基本属性

控件名.x                x坐标

控件名.y                 Y坐标

控件名.width          

控件名.height  ……                   (其他可参见编辑器中的属性窗口)

 

7、  调整窗体模式

this.windowstate=maximized!       

窗体.windowstate=maximized!  窗体最大化(其他可参见编辑器中的属性窗口)

 

8、  INI文件读取及写入

【举例】有名为“MNR.INI”的ini文件,(路径在程序所在目录)有数据如下:

[ACTION]

PRELOAD=YES

 

可以用如下语句读取:

a=ProfileString("MNR.INI","ACTION","PRELOAD","aaa")

a为变量,”aaa”为无此数据项时默认数据

       可以用如下语句写入(写入值为yes):

       setprofilestring("MNR.INI","ACTION","PRELOAD","YES")

 

9、  对于整个程序中都要用到的变量

可以先定义一个结构,再在globe declare中定义该结构类型变量,管理起来方便些

 

10、              主要语法单元

条件判断

if 怎样    then

        怎样做

        else if 怎样 then

        怎样做

end if

choose case 变量

 case is <3

 case 4 to 7

 case else

    

end choose

 

 

 

 

 

       循环到A大于5

      

DO

              A=a+1

LOOP UNTIL A > 5

DO WHILE A <= 5

A = A + 1

LOOP

DO

       A=a+1

LOOP UNTIL A > 5

DO UNTIL A > 5

A = A + 1

LOOP

 

跳出循环EXIT,继续下一轮循环CONTINUE

 

11、              消息框

messagebox(标题,信息)        其他看帮助,查索引messagebox

 

12、取得当前时间now()

sle_begintime.text=string(now(),"yyyy-mm-dd 10:00:00")

如现在是 2002-7-14 17:22:21秒,则输出为 2002-7-14 10:00:00

 

13、列表框应用

DDLB_BSC.RESET()  清空列表框内容

I=1

DO WHILE I<=UpperBound(WINBSC)

       IF WINBSC[I]="" THEN EXIT;

       DDLB_BSC.ADDITEM(WINBSC[I])          增加内容项到列表框

       I=I+1

LOOP

第二章   应用数据库

 

1、  datawindow控件的使用

先创建一个datawindow对象dw_hwtj,再在窗体中添加一个datawindow控件dw_rep,最后将datawindowdataobject属性设置成dw_hwtj

a)我写的选行函数,datawindow控件的click事件上用

if row=0 then return

if nowrow<>row and nowrow>=0 then

       THIS.SELECTROW(nowROW,false)

end if

THIS.SELECTROW(ROW,TRUE)

nowrow=row

 

b)我写的排序函数,在datawindow控件的双击事件上用

IF dwo.Type = "column" THEN

        ls_columnname = dwo.Name

END IF

if nowstate='A' then

            THIS.SETSORT(ls_columnname+" D")

            NOWSTATE='D'

        ELSE

            THIS.SETSORT(ls_columnname+" A")

            NOWSTATE='A'

    END IF

THIS.SORT()

(效果,在某一列上双击一次,正向排序,再一次,反向排序)

 

c)规定排序

dw_rep.setsort("BSCMC A,XQH A,xqmc A")

dw_rep.sort()

(先按BSCMC,再按XQH,再按xqmc正向排序)

 

d)保存到xls文件

       dw_rep.saveas('',Excel5!,true)

 

e)读写:

w_netrep_cell.dw_rep.object.tchpzzs[I] =a

a=w_netrep_cell.dw_rep.object.tchpzzs[I]

 

2、  建立与数据库的连接

1)定义

transaction localdb

 

2)设置

MyTrans.DBMS=”as”

MyTrans.Database=”sda”

MyTrans.LogPass=”def”

MyTrans.ServerName=”dbo”

MyTrans.LogID=”abc”

MyTrans.DBParm=””

MyTrans.Lock=””

MyTrans.UserID=”abc”

MyTrans.AutoCommit       =true

 

3)连接

连接       connect using localdb;

断开       disconnect using localdb;

 

4)从库中查询多行数据:(查询语句被固化)

connect using localdb;                                            //连接

if localdb.SQLCODE<0 then

       Messagebox("连接本地数据库失败...",localdb.sqlerrtext)

       return 1

end if

DECLARE MY_CURSOR CURSOR FOR                                   //定义游标

SELECT BSC from BSC ORDER BY BSC USING LOCALDB;     //执行查询

I=1;

OPEN MY_CURSOR;                                                               //打开游标

DO WHILE NOT LOCALDB.SQLCODE = 100                 //直到结束

       IF I>UpperBound(WINBSC) THEN EXIT

       FETCH MY_CURSOR INTO :WINBSC[I];                //提取数据项

       I=I+1

LOOP

CLOSE MY_CURSOR;                                          //关闭游标

disconnect using localdb;                              //断开

 

5)从库中查询一行数据:(查询语句被固化)HELP中例程,“:“后加一个字符串是指标志为该字符串的变量

SELECT employee.Emp_LName, employee.Emp_FName

              INTO :Emp_lname, :Emp_fname

              FROM Employee

              WHERE Employee.Emp_nbr = :Emp_num

              USING Emp_tran ;

 

6)在数据更新,删除,增加,建表等操作中使用的:

注意查阅:Dynamic SQL Format 1 statement  ……Dynamic SQL Format 4 statement,其中讲得很清楚(看sample

直接执行一条语句:

EXECUTE IMMEDIATE SQLStatement        {USING TransactionObject} ;

HELP中讲得很清楚,这里就不多讲了。

 

7)非固化的查询语句:这个对提高软件灵活性很重要,但很简单,只贴上HELP中的SAMPLE一个:

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA

string sql1, sql2

sql1 = "SELECT emp_id FROM department WHERE salary > 90000"

sql2 = "SELECT emp_id FROM department &    <――这是分行连接符号,空格后一个&符号

WHERE salary > 20000"

IF deptId = 200 then

        PREPARE SQLSA FROM :sql1 USING SQLCA ;

ELSE

        PREPARE SQLSA FROM :sql2 USING SQLCA ;

END IF

OPEN DYNAMIC my_cursor ;

 

小结:

内容不多,但主要的东西都在这里了,其他的要在实践中领会,这些知识对上手和标准的MIS系统等开发,知识面及深度已经足够了。SQL语句帮助中的已够用,详细讲太多,恕不赘述。

2002-7-14




相关文章

相关软件