PB经验总结4
- 格式:doc
- 大小:155.00 KB
- 文档页数:33
1、 在PB中如何实现打印完一个datawindow后不换页,实现多个数据窗口打印在同一页?
2、 在打印一个数据窗口时,如果在数据窗口中用函数PAGECOUNT()可以得取该数据窗口的打印页数,但该打印页数跟打印机实际的打印页数并不一样,如何能取得打印机实际的打印页数?
3、 在打印一个数据窗口时,如果在数据窗口中用函数PAGECOUNT()可以得取该数据窗口的打印页数,但该打印页数跟打印机实际的打印页数并不一样,如何能取得打印机实际的打印页数?
4、 PB + Sql Anywhere 应用程序,请问如何脱离开发环境运行?用户是否需要安装sql
anywhere?如何编写脚本配置ODBC数据源? 请举一例好吗?谢谢!
5、 复杂报表另存为的技巧一例
6、 在程序中管理和控制MS SQLServer
7、 数据窗口中怎样实现旧的数据不可修改
8、 建立和配置web datawidnow
9、 建立一个通用的报表处理系统
10、 转换日期和时间
11、 比较日期和时间
12、 鼠标移到数据窗口上时所在行字段改变颜色 13、 在PB中如何实现打印完一个datawindow后不换页,实现多个数据窗口打印在同一页?
首先将datawindow的print输出到一个打印文件中,把其他的print也输入这个prn,然后,打印这个打印文件就行了。
如:
datawindow_control1.object.datawindow.print.filename="c:\printfilepath\exam_1.prn"
datawindow_control2.object.datawindow.print.filename="c:\printfilepath\exam_1.prn"
dw_1.print()
dw_2.print()
run("print //d:\\printservename\sharename "c:\printfilepath\exam_1.prn")
//d:\\printservename\sharename打印机名
14、 在打印一个数据窗口时,如果在数据窗口中用函数PAGECOUNT()可以得取该数据窗口的打印页数,但该打印页数跟打印机实际的打印页数并不一样,如何能取得打印机实际的打印页数?
请先预览datawindow
dw_1.Modify("DataWindow.Print.preview = true")
再用pagecount()就是了。
15、 PB + Sql Anywhere 应用程序,请问如何脱离开发环境运行?用户是否需要安装sql
anywhere?如何编写脚本配置ODBC数据源? 请举一例好吗?谢谢!
不用装SQL Anywhere5.0,只要把相关文件(Dbeng50.exe,wl50ent.dll,wtr50t.dll,wod50t.dll)拷贝到当前目录(如
D:\temp)下就OK!
在ODBC.INI中加上:wod50t.dll所在路径
如:
Gzmis.db是数据库名,d:\temp是当前目录。
[Gzmis]
Driver32 = D:\temp\wod50t.dll
在注册表中加上:
HKEY_CURRENT_USER\SoftWare\ODBC\ODBC.INI\Gzmis中加下面几项:
AutoStop "Yes"
DatabaseFile "d:\temp\gzmis.db"
DataBaseName "Gzmis"
Driver "d:\temp\wod50t.dll"
PWD "sql"
Start "dbeng50"
UID "dba"
只要使用两个函数: setProfileString()//设置INI.
Registryset()//设置注册表.
再加上PB的DLL动态库就OK!
如 PWD改了的按改了的值
16、 复杂报表另存为的技巧一例
向上级部门上报报表是很常见的,其中不乏有复杂报表,最近,在客户需求中有这样一例,每月都需上报报表(国家统一格式),虽然本地已有了MIS,但每月上报不得不将报表打印出来,通过邮局邮寄给上级部门,现想将报表导出成单一的文件(常见文件格式,最好能用Office打开),通过邮件上报。起初,马上就想到了数据窗口的Saveas(),但是细分析,报表格式复杂,Saveas根本实现不了,于是想到了编程写入Excel中,同样,由于格式复杂,VBA的编程量也很大,如合并列、拆分列等,于是想到了先生成WMF文件,再贴到WORD中的办法,(上级部门不要求数据可编辑),实现效果很好。代码如下
if dw_1.rowcount() = 0 then return
int li_ret,value
oleObject lo_Word //ole对象
string docname,named
value = GetFileSaveName("另存为", &
docname, named, "DOC", &
"Word文档(*.DOC), *.DOC")
IF value <> 1 THEN
return
end if
if FileExists(docname) then
if messagebox('提示','文件已经存在要覆盖吗?',question!,yesno!,2) = 1 then
filedelete(docname)
else
return
end if
end if
//生成WMF临时文件,这种方法不完美,应该取Windows的临时目录和空的临时文件ID
if fileexists("C:\windows\temp\yyglgzyb.wmf") then filedelete("C:\windows\temp\yyglgzyb.wmf")
dw_1.SaveAs("C:\windows\temp\yyglgzyb.wmf", WMF!, true)
//打开Word文件
lo_Word = CREATE OLEObject
li_Ret = lo_Word.ConnectToObject("","word.application")
IF li_Ret <> 0 THEN
//没有打开则新建
li_Ret = lo_Word.ConnectToNewObject("word.application") if li_Ret <> 0 then
MessageBox('OLE错误','OLE无法连接,错误ID:' + string(li_Ret)+'可能是Word安装不正确!')
return
end if
END IF
/////////////////////VBA,设置纸张为A3横向/////////////////////////////
lo_word.Documents.Add()
lo_Word.ActiveDocument.PageSetup.LineNumbering.Active = False
lo_Word.ActiveDocument.PageSetup.Orientation = 1
//以下注释行为设置页边距,可以不用,使用缺省值。
//lo_Word.ActiveDocument.PageSetup.TopMargin = CentimetersToPoints(3.17)
//lo_Word.ActiveDocument.PageSetup.BottomMargin = CentimetersToPoints(3.17)
//lo_Word.ActiveDocument.PageSetup.LeftMargin = CentimetersToPoints(2.54)
//lo_Word.ActiveDocument.PageSetup.RightMargin = CentimetersToPoints(2.54)
//lo_Word.ActiveDocument.PageSetup.Gutter = CentimetersToPoints(0)
//lo_Word.ActiveDocument.PageSetup.HeaderDistance = CentimetersToPoints(1.5)
//lo_Word.ActiveDocument.PageSetup.FooterDistance = CentimetersToPoints(1.75)
lo_Word.ActiveDocument.PageSetup.PageWidth = 1190.55
lo_Word.ActiveDocument.PageSetup.PageHeight = 841.9
lo_Word.ActiveDocument.PageSetup.FirstPageTray = 0
lo_Word.ActiveDocument.PageSetup.OtherPagesTray = 0
lo_Word.ActiveDocument.PageSetup.SectionStart = 2
lo_Word.ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter = False
lo_Word.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = False
lo_Word.ActiveDocument.PageSetup.VerticalAlignment = 0
lo_Word.ActiveDocument.PageSetup.SuppressEndnotes = False
lo_Word.ActiveDocument.PageSetup.MirrorMargins = False
lo_Word.ActiveDocument.PageSetup.TwoPagesOnOne = False
lo_Word.ActiveDocument.PageSetup.GutterOnTop = False
lo_Word.ActiveDocument.PageSetup.CharsLine = 99
lo_Word.ActiveDocument.PageSetup.LinesPage = 42
///////////////////////////////////////////////////////////////////////
////////////////////////VBA,插入图片//////////////////////////////
lo_Word.ActiveDocument.Shapes.AddPicture("C:\windows\temp\yyglgzyb.wmf", False, True)
//保存
lo_Word.ActiveDocument.saveas(docname)
lo_Word.DisconnectObject()