pb中如何自定义数据窗口打印时纸张的大小,自定义纸张是哪一个值

pb中如何自定义数据窗口打印时纸张的大小,自定义纸张是哪一个值,第1张

MarginTop An integer indicating the width of the top margin on the printed page in the units specified for the DataWindowYou can set MarginTop when using SyntaxFromSQL to generate DataWindow syntaxPainter: Margins in PowerBuilder Units group, Top option

Orientation An integer indicating the print orientation Values are:0 — The default orientation for your printer1 — Landscape2 — PortraitPainter: Paper group, Orientation option

两联单如果是复写的那种,没有太好的办法,可以先打印2份相同的部分,然后套打不同的部分

如果2张单子分开打,就比较好处理,提示语的st_1 可以做2个按钮,一个打印存根,st_1 visible 设置false,一个客户联 st_1 visible设置true ,就可以了

另外两联单的纸,也可以定制,可以预先把一些提示信息,印好,单据比较多,这种方式可能会比较好,

 PowerBuilder(以下简称PB)是Powersoft公司(已被Sybase收购)推出的基于客户机/服务器体系结构的强有力的开发工具 自问世以来深受开发人员的好评 Datawindow是PB中获取专利技术的控件 它对数据的处理方法相当简洁 数据窗口能处理各种显示格式 进行报表打印 对复杂的嵌套报表同样处理自如

 数据窗口的处理机制首先是根据所需的显示方式将数据源表中的域设计好 在运行时将所要的数据从数据库服务器上下载到客户机上处理 然后将更改后的数据进行提交(Commit)或回滚(Rollback) 这种处理机制大大降低了数据的传输量 减轻了网络的负担 也提高了数据的处理速度 充分利用数据窗口的特点 可达到事半功倍的效果 但是如果有些问题不加注意就会出现意想不到的错误

 几个函数

  AcceptText()

 AcceptText()函数的功能是将数据窗口当前编辑的数据转移到数据窗口的缓冲区中 程序通常在关闭窗口及其他情况下判断是否改变了当前数据 如果已改变数据 应提示用户保存 这就杜绝了用户在偶然的情况下丢失更改数据的现象 一般用ModifiedCount和DeletedCount函数判断数据是否改变

 PB在处理数据窗口时 对应开辟了四个数据缓冲区 分别为Primary Buffer Deleted Buffer Filter Buffer SortBuffer 其中Deleted Buffer存放被删除的记录 Filter Buffer存放被过滤的记录 Sort Buffer存放排序的记录 Primary Buffer存放其他记录 函数ModifiedCount从Primary and Filter Buffers中取数据进行判断 DeletedCount则从Deleted Buffer中取数据进行判断

 PB在接受用户输入时设置了一个浮动编辑框 用户输入或更改的内容并不直接进入Primary Buffer 而是在用户输入完后进入下一个域时 PB首先对它进行有效性检测 通过后转入Primary Buffer 如果只改变一项数据就关闭窗口则相关数据并没有进入Primary Buffer 系统判断ModifiedCount()为 所以不会提示保存数据 用AcceptText()函数就可以将浮动编辑框中的数据转入缓冲区中 在相应的程序段前加上Accepttext() 问题就解决了

  FindRequired()

 在实际应用中经常需要限制表中一些域的属性 例如银行客户表中账号就不能为Null 在提交数据前检查是否将必须输入的数据都赋值是一个很好的编程习惯 FindRequired函数可以解决此问题 它通过对数据窗口中数据的检查 将数据窗口中域的属性为Required 而并未赋值的域(包括相应的行 列)找出来

 为了利用此函数 在构造数据窗口时就要注意将表中具有NOT NULL属性的数据列设为Required(方法为:在数据窗口相应域上按鼠标右键或双击左键 d出Column Object 框 选Edit页 将Required前的框选中 按Ok钮即可) 在相应事件中插入下列程序:

long ror= //行数赋

 integer colnbr= //列数赋

 string  colname //用来存储列名

 mle_required Text = //窗口中的多行编辑控件 用来存储找到域的行 列号

 DO WHILE row <>

 colnbr++ //继续找下一列

 IF dw_ FindRequired(Primary! row colnbr colname FALSE) < THEN EXIT

 //若程序出错则返回

 IF row <> THEN

 mle_required Text = mle_required Text + String(row) + ~t &+ colname + ~r~n //保存查出的行 列号

 END IF

 //当ROW返回为 则意味再没有查出 跳出循环

 LOOP

 程序执行完后 多行编辑框中显示的为出错的地方 用户根据提示可以轻易地更改

 FindRequired函数中的Row Colnbr参数能自动增加或重置 Colname用来存放列的字符名

 数据的突出显示及保护:程序运行中 用户希望显示的数据具有明显的区分 例如学生的成绩(不及格的分数要用红色显示) 有些数

 据必须只能显示 不能让用户修改;还有些数据在有些时候可以修改 有些时候不能修改等 以上情况可归结为两点:

  数据的突出显示

 数据窗口应该能使用户很快找到他们想要的信息 以颜 分既满足用户的习惯 又不占系统资源 实现起来也很简单 以学生管理为例 要求成绩低于 分的以红色显示 其他不变 方法是:在数据窗口中对应成绩的列(例如 /CJ )上双击鼠标左键或单击鼠标右键 d出Column Object对话框 选取Expressions页 在Color后的框中输入:

 if(cj< rgb( ) rgb( ))此句表示当成绩小于 则显红色 否则灰色显示

 IF语句只可能有两种选择 如果要更多的条件判断则必须用CASE语句 例如成绩大于等于 用蓝色 小于 用红色 其他用绿色则应该用以下语句:

 Case(cj WHEN IS >= THEN RGB( ) WHEN IS < THEN RGB( ) E

 LSE RGB( ))

 我们还可以输入更加复杂的公式

 图形是最好的说明语言 为了更好体现数据的直观性 可以采用条件位图的方法 之所以称为条件位图 是因为它随数据的性质而决定是否显示 用可以在上述的成绩管理数据窗口的前面加上一个 双击位图 d出Picture Object对话框 选Expressions页 在Visible右的编辑框写入if(xb= ) 此句的意义为当性别为 (女)时蝴蝶出现 否则蝴蝶消失 程序运行起来相当直观 读者可以触类旁通 充分利用列的属性使用户的界面更加友善 漂亮

  数据的保护

 有很多情况需要对数据进行保护(即只能显示而不允许修改) 学生查询成绩时就是这种情况 进行数据保护的方法有很多 第一种是双击要保护的列 d出Column Object 选取Edit页 将Display Only框选中;第二种将要保护的列的TabOrder置 则此列得不到焦点 当然就无从修改;第三种是从根本作起 选取Rows菜单 再选取Update Properties d出Specify Update Properties对话框 将Allow Updates设为空 这样即使用户更改了也无法更新数据库 使更改毫无意义

 以上情况都是事先已经确定需要保护的数据 如果有些数据要保护 有些不要保护则以上的方法就无法实现 例如合同台账管理:对于一个没有实施的合同可以更改 对于一个已经实施的合同则必须加以保护 这需要用列的保护属性来实现 方法如下:

 双击每一列 d出Column Object对话框 选取Expressions页 在Protect后的框中写入:if(sfss= ) 其中sfss为表示合同是否实施 如果实施(值为 )则进行数据保护 否则可以更改 此方法可以在程序运行中动态控制数据的保护方式

  数据窗口的多表更新

lishixinzhi/Article/program/SQL/201311/16236

这个要看你的具体要求,

你可以使用lable 格式的数据库窗口,那只要安装windows下的打印驱动,和普通的打印机一样使用就可以了,就是条打印格式,边距,标签交割之类的,稍微比较花时间

你也可以下载条码打印机厂商提供的接口程序(下载麻烦的话可,可以找打印机的供应商索取),有的需要提供txt文本数据、或者是提供数据库一下信息 ,接口程序来打印,这种方式设置会比较简单

在某些情况下,我们经常需要将数据窗口中的数据按固定的行数打印在每一页上,特别是在使用grid风格时,为了满足上述要求,修改数据窗口如下: (1)在数据出口中增加计算域(computer ),命名为www,定义表达式为int(GetRow()/Rows)其中Rows为每页打印的行数;设置为不可视(在expression标签visible属性定位0) (2)以www构建组(选择Create group菜单),选择New page on group break; (3)保存,并用打印预览中查看效果。

这样,

菜单设置成MAIN或MDIHELP类型

在窗口就引用你要的那个菜单

在MDI类型的主窗口里是可以嵌套子窗口的

类型为CHILD

数据窗口可以直接放在子窗口上

至于函数通常对用户来说是不可见的

如果需要,我可以给你个例子,联系我的MSN

joe_li60@hotmailcom

文字自己想办法

一:变量说明

1:application :

test

2:窗体

login:登陆窗口

w_main:考勤管理系统的主界面,选择 *** 作

w_chuli:个人考勤记录处理

w_shengding:缺勤类型设定

w_tongji:员工考勤统计

w_yuangong:员工基本信息

3:数据窗口

dw_chuli1:个人考勤记录处理

dw_shengding:缺勤类型设定

dw_chuli:员工考勤统计

w_yuangong:员工基本信息

二:函数说明

一:application test中的函数

1. 函数名:test::open( )

作用:将test这个数据库注册为当前机器的用户的数据源

代码:

String ls_odbc //数据库名

String currdir = Space(100), key//数据库“test”的完整路径

Environment env

string gs_currdir = GetCurrentDirectory()//得到运行程序的当前路径

GetEnvironment(env)

ls_odbc = "test"//数据库名为“test”

currdir=GetCurrentDirectory() + "\" + ls_odbc + "mdb"//当前运行程序路径加上数据库名就是数据库“test”的完整路径

RegistryGet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\ODBC Data Sources", ls_odbc, RegString!, key)

if key="" then

CHOOSE CASE envOSType//判断 *** 作系统的类型,注册响应的数据源的驱动

CASE Windows!//为Windows

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\ODBC Data Sources", ls_odbc, RegString!, "Microsoft Access Driver (mdb)")

CASE WindowsNT!//为WindowsNT

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\ODBC Data Sources", ls_odbc, RegString!, "Driver do Microsoft Access (mdb)")

CASE ELSE

END CHOOSE

// 将数据库test注册为用户的数据源

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\" + ls_odbc, "", RegString!, "")

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\" + ls_odbc, "DBQ", RegString!, "" + currdir )

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\" + ls_odbc, "Driver", RegString!, "odbcjt32dll")

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\" + ls_odbc, "DriverId" , ReguLong!, 25 )

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\" + ls_odbc, "FIL" , RegString!, "MS Access;" )

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\" + ls_odbc, "SafeTransactions", RegString!, "0" )

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINI\" + ls_odbc, "UID" , RegString!, "" )

end if

open(login)// 打开登陆窗口

二:登陆窗口中的函数

1:函数名:loginopen()

作用:连接到本机器数据源为test的数据库

代码:

SQLCADBMS = "ODBC"

SQLCAAutoCommit = False

SQLCADBParm = "ConnectString='DSN=test;UID=;PWD='"

connect;

if sqlcasqlcode<>0 then

Messagebox("错误!,无法连接数据库:",sqlcasqlerrtext)

halt close

end if

2:函数名:cb1。Clicked() 即点击登陆按钮的事件

作用:当用户输入帐号和密码后,判断是否在“ *** 作员表”中 ,存在就打开考勤管理系统主界面

代码:

//定义两个变量

string password,usename

// 数据库连接参数

//检索用户名和密码记录

SELECT *** 作员表用户名,

*** 作员表密码

INTO :usename,

:password

FROM *** 作员表

WHERE *** 作员表用户名 = :sle_1text ;

//判断用户输入的用户名是否正确

if sle_1text="" or sle_2text="" then

messagebox("错误!","用户名或密码不能为空!",exclamation!,ok!,2)

else

if usename=sle_1text and password=sle_2text then

messagebox("通过验证!","用户名和密码正确,欢迎您使用本系统!",Information!,ok!,2)

open(w_main)// 打开考勤管理系统主界面

close(parent)

else

messagebox("错误!","用户名或密码错误,请重新输入!",exclamation!,ok!,2)

end if

end if

3:函数名:cb2。Clicked() 即点击取消按钮的事件

作用:关闭窗口

代码:

close(parent)

二:主窗口中的函数

1:函数名:rb_1。Clicked()

作用:关闭当前窗口,打开员工基本信息窗口

代码:open(w_yuangong)

close(parent)

2:函数名:rb_2。Clicked()

作用:关闭当前窗口,打开考勤信息处理窗口

代码:open(w_chuli)

close(parent)

3:函数名:rb_3。Clicked()

作用:关闭当前窗口,打开缺勤类型设定窗口

代码:open(w_shengding)

close(parent)

4:函数名:rb_4。Clicked()

作用:关闭当前窗口,打开员工考勤统计窗口

代码:open(w_tongji)

close(parent)

5:函数名:pb_1。Clicked()

作用:关闭当前窗口

代码:close(parent)

三:考勤信息处理窗口中的函数

1:函数名:open( )

作用:将数据窗口和数据库连接,并且显示数据库存在的数据

代码:dw_1settransobject(sqlca)

dw_1retrieve()

2:函数名:pb_1。Clicked()

作用:插入一条新记录

代码:dw_1insertrow(0)

3:函数名:pb_2。Clicked()

作用:删除一条当前记录

代码:dw_1deleterow(0)

4:函数名:pb_3。Clicked()

作用:向数据库提交插入,删除和修改的 *** 作,如果成功就发到数据库

代码:

integer returncode

returncode=dw_1update()

if returncode>0 then

commit using sqlca;

else

rollback using sqlca;

end if

4:函数名:pb_4。Clicked()

作用:关闭当前窗口,回到主界面

代码:

open(w_main)

close(parent)

四:缺勤类型设定窗口中的函数

1:函数名:open( )

作用:将数据窗口和数据库连接,并且显示数据库存在的数据

代码:dw_1settransobject(sqlca)

dw_1retrieve()

2:函数名:pb_1。Clicked()

作用:插入一条新记录

代码:dw_1insertrow(0)

3:函数名:pb_2。Clicked()

作用:删除一条当前记录

代码:dw_1deleterow(0)

4:函数名:pb_3。Clicked()

作用:向数据库提交插入,删除和修改的 *** 作,如果成功就发到数据库

代码:

integer returncode

returncode=dw_1update()

if returncode>0 then

commit using sqlca;

else

rollback using sqlca;

end if

4:函数名:pb_4。Clicked()

作用:关闭当前窗口,回到主界面

代码:

open(w_main)

close(parent)

五:员工基本信息窗口中的函数

1:函数名:open( )

作用:将数据窗口和数据库连接,并且显示数据库存在的数据

代码:dw_1settransobject(sqlca)

dw_1retrieve()

2:函数名:pb_1。Clicked()

作用:插入一条新记录

代码:dw_1insertrow(0)

3:函数名:pb_2。Clicked()

作用:删除一条当前记录

代码:dw_1deleterow(0)

4:函数名:pb_3。Clicked()

作用:向数据库提交插入,删除和修改的 *** 作,如果成功就发到数据库

代码:

integer returncode

returncode=dw_1update()

if returncode>0 then

commit using sqlca;

else

rollback using sqlca;

end if

4:函数名:pb_4。Clicked()

作用:关闭当前窗口,回到主界面

代码:

open(w_main)

close(parent)

六:员工考勤统计窗口中的函数

1:函数名:open( )

作用:将数据窗口和数据库连接,并且显示数据库存在的数据

代码:dw_1settransobject(sqlca)

dw_1retrieve()

2:函数名:ddlb_1。Selectchange()

作用: 改变数据窗口中数据的大小

代码:dw_1modify('DataWindowZoom = '+ trim(ddlb_1text))

3:函数名:cb1。Clicked()

作用: 回到数据窗口中上一页

代码:dw_1scrollpriorpage()

4:函数名:cb2。Clicked()

作用: 回到数据窗口中下一页

代码:dw_1scrollnextpage()

5:函数名:cb3。Clicked()

作用: 打印数据窗口

代码:dw_1print()

6:函数名:cb4。Clicked()

作用: 打印设置

代码:printsetup()

7:函数名:cb5。Clicked()

作用: 打印预览

代码:

dw_1Modify("DataWindowPrintOrientation = '1'") //横向

dw_1Modify("DataWindowPrintOrientation = '2'") //纵向

dw_1Modify("DataWindowPrintPreview = yes")

dw_1Modify("DataWindowPrintPreviewRulers = yes")

dw_1modify('DataWindowPrintPreviewZoom = '+ trim(ddlb_1text))

8:函数名:cb5。Clicked()

作用: 打印预览

9:函数名:ddlb_2。Selectchange()

作用: 改变打印预览窗口的大小

代码:

dw_1modify('DataWindowPrintPreviewZoom = '+ trim(ddlb_2text))

10:函数名:cb6。Clicked()

作用: 将数据窗口中的数据保存为表格形式的文件

代码:string ls_path, ls_file

int li_rc

ls_path = sle_1Text

li_rc = GetFileSaveName ( "Select File", ls_path, ls_file, "xls", "xls,xls" )

//得到路径名

IF li_rc = 1 Then

OLEObject ole_object , ole_workbooks

ole_object = CREATE OLEObject

//创建Excel对象

IF ole_objectConnectToNewObject("ExcelApplication") <> 0 THEN

MessageBox('OLE错误','OLE无法连接!')

return

END IF

ole_objectworkbooksadd

ole_objectVisible = True

ole_workbooks = ole_objectWorksheets(1)

ole_workbookscells(1,1)value="员工号"

ole_workbookscells(1,2)value="时间"

ole_workbookscells(1,3)value="天数"

ole_workbookscells(1,4)value="类型"

ole_workbookscells(1,5)value="原因"

long l_row

for l_row = 2 to dw_1rowcount()+1

ole_workbookscells(l_row,1)value=dw_1getitemstring(l_row - 1,1)

ole_workbookscells(l_row,2)value=dw_1getitemstring(l_row - 1,2)

ole_workbookscells(l_row,3)value=dw_1getitemstring(l_row - 1,3)

ole_workbookscells(l_row,4)value=dw_1getitemstring(l_row - 1,4)

ole_workbookscells(l_row,5)value=dw_1getitemstring(l_row - 1,5)

next

ole_workbooksSaveAs ( ls_path)

ole_objectquit()

Ole_ObjectDisConnectObject()

Destroy Ole_Object

destroy ole_workbooks

messagebox("!","文件保存到"+ ls_path)

End If

11:函数名:sel。modify()

作用: 将数据窗口中的数据按输入的员工号显示

代码:

string emp_no

string condition

if sle_1text <> "" then

emp_no=trim(sle_1text)

condition="emp_no="+"'"+ emp_no+"'"

dw_1setfilter( condition)

filter(dw_1)

dw_1retrieve()

end if

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12157128.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存