PowerBuilder编程俱乐部
一、怎样在PB中实现文件的拷贝与删除,要借助外部函数吗?
答:可用API函数实现:
1.拷贝文件
函数声明:
FUNCTION boolean CopyFileA(ref string cfrom, ref string cto, boolean flag) LIBRARY ″Kernel32.dll″
调用:
string ls_source, ls_des
boolean lb_flag, lb_rtn
lb_flag = false
ls_source = ″c:\book.xls″ //源文件
ls_des = ″C:\tmp\111.xls″ //目标文件
lb_rtn = CopyFileA(ls_source, ls_des, lb_flag)
MessageBox(″文件拷贝″, string(lb_rtn))
2.删除文件
函数声明:
FUNCTION boolean DeleteFileA(ref string filename) LIBRARY ″Kernel32.dll″
调用:
string ls_file
boolean lb_rtn
ls_file = ″C:\tmp\111.xls″
lb_rtn = DeleteFileA(ls_file)
MessageBox(″文件删除″, string(lb_rtn))
或者用PB本身的函数FileDelete()来删除文件。
二、我是用SQL ANYWHERE 5.0建库的,请问实现数据备份和恢复的具体步骤和实现方法是怎样的?
答:备份可以用SQL ANYWHERE 的dbbackup命令来完成。安装SQL ANYWHERE 5.0后,在sql anywhere5.0\win32\ 目录中可以找到dbbackup.exe。再在MS-DOS方式下用命令dbbackup/?或者在SQL ANYWHERE中的帮助下查看其命令开关。如想将C:\hello目录下的数据库文件hello.db备份到d:\backup目录下,其用法如下:
dbbackup -c ″uid=dba;pwd=sql; dbf=c:\hello\hello.db″ d:\backup
在PB脚本中用run函数运行:
run(″dbbackup -c ~″uid=dba;pwd=sql; dbf=c:\hello\hello.db~″ d:\backup″)。
恢复时将备份的文件拷回即可。
详细用法可以查帮助。
(此题由lysoftware、yiyi提供答案)
三、如何在PB中实现串口编程?
答:可以利用微软公司提供的通讯控件mscomm32.ocx来实现,使用方法如下:选择菜单Controls→OLE→Insert Control→Microsoft Communications Control,加入后我们点击其OLE Control Properties,可以设置它的基本属性如通讯端口(C)、设置参数 (S) 等,当然我们也可以在程序中设置。以下是一段脚本例子:
String ls_data
ole_1.object.CommPort = 1 //使用COM1端口
ole_1.object.Settings = ″9600,N,8,1″ //设置或返回串行端的波特率、奇偶校验位、 数据位数、停止位
ole_1.object.InputLen = 0 //初始化Input
ole_1.object.PortOpen = True //打开端口
ole_1.Object.Output = ″h″ //向COM口发送字符
Do
Yield() //等待数据
LOOP Until ole_1.Object.InBufferCount >=1
ls_Output = ole_1.Object.Input //取数据
ole_1.object.PortOpen = FALSE //关闭端口
(此题由3w提供答案)
四、请问如何在程序中运行控制面板中的“时间/日期”程序?
答:用以下语句即可:
run (″rundll32.exe shell32.dll , Control_RunDLL Timedate.cpl″)
运行其它的程序只需要修改参数Timedate.cpl即可,如启动ODBC数据源管理器可以用以下语句:
run (″rundll32.exe shell32.dll , Control_RunDLL Odbccp32.cpl″)
五、最近我在工作中遇到了以下问题:我的报表是动态生成的,现在希望随意修改各个带区的宽度、位置; 希望随意在报表中增加文本(标题),或对标题栏的文本进行修改;希望能够在报表中划线,改变报表的格式等。
答:PB动态报表其实就是动态数据窗口,我个人认为使用动态数据窗口的难处就在于参数的设定,特别是要做到各项都可随意设定。刚开始做时可以手工设置datawindow对象,再在程序中用dw_1.object.datawindow.syntax语句将其结构导出来分析,以便有个参考。对于数据窗口中各项的更改可以用Modify()函数来实现,举几个例子:
1.改变detail区的高度:dw_1.Modify(″DataWindow.detail.Height=200″)
2.对标题栏文本的更改(文本名为dept_name_t):dw_1.modify(″dept_name_t.text = '单位名称'″)
3.增加计算域:假设一grid型的数据窗口,其中有个字段为部门号dept_id,我们要增加一个统计部门数的计算域count(dept_id for all):
string ls_modrow
dw_1.Modify(″DataWindow.summary.Height=64″)
ls_modrow = 'Create compute(band=summary font.charset=″0″ font.face=″MS Sans Serif″ font.family=″2″ font.height=″-8″ font.pitch=″2″ font.weight=″400″ background.mode=″1″ background.color=″536870912″ color=″0″ x=″9″ y=″4″ height=″52″ width=″297″ format=″[general]″ expression=″count(dept_id for all)″ alignment=″1″ border=″0″ crosstab.repeat=no )~r~n'
dw_1.modify( ls_modrow )
4.以下程序段让grid数据窗口中网格线不见,并在detail区增加一条线
string ls_line
DW_1.Modify(″DataWindow.Grid.Lines='1' ″)
dw_1.Modify(″DataWindow.detail.Height=332″)
ls_line = 'Create line(band=detail background.mode=″2″ background.color=″16777215″ pen.style=″0″ pen.width=″5″ pen.color=″0″ x1=″37″ y1=″320″ x2=″1458″ y2=″316″ )~r~n'
dw_1.modify( ls_line )
像这种数据窗口动态增加控件的方法,也可以先在数据窗口画板中手工加上去,导出sytnax后,查看其语法,再反写回去即可。