仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 843|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之PowerBulider数据窗口转MicroSoft Exec...

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:26:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
也就是说在php本地调用pdoprepare中的mysql_real_escape_string来操作query,使用的是本地单字节字符集,即编码为xbfx5cx27,并带入到mysql中查询,由于使用setnames设置了连接字符集.word|程序|数据|源代码PowerBulider数据窗口转MicroSoftExecl、Word程序源代码
1、f_cncharnum函数f_cncharnum.srf
$PBExportHeader$f_cncharnum.srf
$PBExportComments$失掉字符串中汉字大概双字节的个数
globaltypef_cncharnumfromfunction_object
endtype

forwardprototypes
globalfunctionintegerf_cncharnum(stringaString)
endprototypes

globalfunctionintegerf_cncharnum(stringaString);
//函数名:f_cncharnum
//用处:前往一个字符串中汉字的个数
//输出:aString-string,给定的字符串
//前往值:li_num-Integer,给定的字符串中汉字的个数
//注重:1.此办法基于汉字的国标汉字库区位编码的无效性,不切合此编码的体系此函数有效!
//2.若汉字串含有非汉字字符,如图形标记或ASCII码,则这些非汉字字符将坚持稳定.
//比方:li_ret=f_cncharnum("摆渡人ferryman")li_ret=3

stringls_ch//一时单位
stringls_SecondSecTable//寄存一切国标二级汉字读音
integerli_num=0//前往值
integeri,j

Fori=1toLen(aString)
ls_ch=Mid(aString,i,1)
IfAsc(ls_ch)>=128then//是汉字
li_num++
i=i+1
Endif
Next

Returnli_num

endfunction


2、PBToExcel函数f_outputtoexcel_new.srf

$PBExportHeader$f_outputtoexcel_new.srf
globaltypef_outputtoexcel_newfromfunction_object
endtype

forwardprototypes
globalfunctionintegerf_outputtoexcel_new(datawindowadw)
endprototypes

globalfunctionintegerf_outputtoexcel_new(datawindowadw);
//函数名:f_outputtoexcel_new
//输出:adw-datawindow,指定的数据窗口
//前往值:Integer
constantintegerppLayoutBlank=12
OLEObjectole_object
ole_object=CREATEOLEObject

integerli_ret

li_ret=ole_object.ConnectToObject("","Excel.Application")
IFli_ret0THEN
//假如Excel还没有翻开,则新建。
li_ret=ole_object.ConnectToNewObject("Excel.Application")
ifli_ret0then
MessageBox(OLE毛病,OLE没法毗连!毛病号:+string(li_ret))
return0
endif
ole_object.Visible=True
ENDIF

pointeroldpointer

oldpointer=SetPointer(HourGlass!)

ole_object.Workbooks.Add

longll_colnum,ll_rownum
stringls_value

stringls_objects,ls_obj,ls_objs[],ls_objtag[]
longll_pos,ll_len,ll_num=0

ls_objects=trim(adw.Describe(datawindow.Objects))

dowhile(pos(ls_objects,"~t")>0)
ll_pos=pos(ls_objects,"~t")
ll_len=ll_pos-1
ls_obj=left(ls_objects,ll_len)
if(adw.Describe(ls_obj+.type)=columnor&
adw.Describe(ls_obj+.type)=compute)and&
(adw.Describe(ls_obj+.band)=detail)and(ls_obj"asd")then
ll_num+=1
ls_objs[ll_num]=ls_obj
ls_objtag[ll_num]=adw.Describe(ls_obj+.tag)
endif
ls_objects=right(ls_objects,len(ls_objects)-ll_pos)
loop

//失掉数据窗口数据的列数与行数(行数应当是数据行数+1)
ll_colnum=ll_num
ll_rownum=adw.rowcount()+1

stringls_colname
integeri,j,k
fori=1toll_colnum
//失掉题目头的名字
ls_value=ls_objtag[i]
ole_object.cells(1,i).value=ls_value
next

stringcolumn_name
fori=2toll_rownum
forj=1toll_colnum
column_name=ls_objs[j]
ifadw.Describe(column_name+.type)=columnthen
ls_value=adw.Describe("Evaluate(LookupDisplay("+column_name+"),"+string(i-1)+")")
endif
ifadw.Describe(column_name+.type)=computethen
ls_value=adw.Describe("Evaluate("+adw.Describe(column_name+.expression)+","+string(i-1)+")")
endif
ole_object.cells(i,j).value=ls_value
next
next

SetPointer(oldpointer)

ole_object.disconnectobject()
DESTROYole_object

return1
endfunction

3、PBToWord函数f_outputtoword_new.srf

$PBExportHeader$f_outputtoword_new.srf
globaltypef_outputtoword_newfromfunction_object
endtype

forwardprototypes
globalfunctionintegerf_outputtoword_new(datawindowadw)
endprototypes

globalfunctionintegerf_outputtoword_new(datawindowadw);
//函数名:f_outputtoword_new
//输出:adw-datawindow,指定的数据窗口
//前往值:Integer
constantintegerppLayoutBlank=12
OLEObjectole_object
ole_object=CREATEOLEObject

integerli_ret

li_ret=ole_object.ConnectToObject("","word.application")
IFli_ret0THEN
//假如Word还没有翻开,则新建。
li_ret=ole_object.ConnectToNewObject("word.application")
ifli_ret0then
MessageBox(OLE毛病,OLE没法毗连!毛病号:+string(li_ret))
return0
endif
ole_object.Visible=True
ENDIF

longll_colnum,ll_rownum
constantlongwdWord9TableBehavior=1
constantlongwdAutoFitFixed=0
constantlongwdCell=12
stringls_value
pointeroldpointer

oldpointer=SetPointer(HourGlass!)

stringls_objects,ls_obj,ls_objs[],ls_objtag[]
longll_pos,ll_len,ll_num=0

ls_objects=trim(adw.Describe(datawindow.Objects))

dowhile(pos(ls_objects,"~t")>0)
ll_pos=pos(ls_objects,"~t")
ll_len=ll_pos-1
ls_obj=left(ls_objects,ll_len)
if(adw.Describe(ls_obj+.type)=columnor&
adw.Describe(ls_obj+.type)=compute)and&
(adw.Describe(ls_obj+.band)=detail)and(ls_obj"asd")then
ll_num+=1
ls_objs[ll_num]=ls_obj
ls_objtag[ll_num]=adw.Describe(ls_obj+.tag)
endif
ls_objects=right(ls_objects,len(ls_objects)-ll_pos)
loop

//失掉数据窗口数据的列数与行数(行数应当是数据行数+1)
ll_colnum=ll_num
ll_rownum=adw.rowcount()+1

ole_object.Documents.Add()
ole_object.ActiveDocument.Tables.Add(ole_object.Selection.Range,ll_rownum,ll_colnum)

stringls_colname
integeri,j,k

fori=1toll_colnum
//失掉题目头的名字
ls_value=ls_objtag[i]
ole_object.Selection.TypeText(ls_value)
fork=1tof_cncharnum(ls_value)
ole_object.Selection.TypeBackspace()
next
ole_object.Selection.MoveRight(wdCell)
next

adw.setredraw(false)
ole_object.Selection.MoveLeft(wdCell)
stringcolumn_name
fori=2toll_rownum
forj=1toll_colnum
column_name=ls_objs[j]
ifadw.Describe(column_name+.type)=columnthen
ls_value=adw.Describe("Evaluate(LookupDisplay("+column_name+"),"+string(i-1)+")")
endif
ifadw.Describe(column_name+.type)=computethen
ls_value=adw.Describe("Evaluate("+adw.Describe(column_name+.expression)+","+string(i-1)+")")
endif
ole_object.Selection.MoveRight(wdCell)
ole_object.Selection.TypeText(ls_value)
fork=1tof_cncharnum(ls_value)
ole_object.Selection.TypeBackspace()
next
next
next
adw.setredraw(true)

constantlongwdFormatDocument=0

SetPointer(oldpointer)
//保留新建的文档
ifmessagebox("保留","文档已乐成完成,是不是保留?",Question!,YesNo!)=1then
stringdocname,named
integervalue

value=GetFileSaveName("选择文件",docname,named,"DOC","DocFiles(*.DOC),*.DOC")

IFvalue=1THEN
ole_object.ActiveDocument.SaveAs(docname,0,False,"",True,"",False,False,False,False,False)
endif

endif
//断开OLE毗连
Ole_Object.DisConnectObject()
DestroyOle_Object

return1
endfunction
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-19 12:27:52 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
小妖女 该用户已被删除
板凳
发表于 2015-1-19 12:27:52 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
柔情似水 该用户已被删除
地板
发表于 2015-1-27 05:16:24 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
简单生活 该用户已被删除
5#
发表于 2015-2-5 01:41:46 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
小魔女 该用户已被删除
6#
发表于 2015-2-11 01:35:26 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
海妖 该用户已被删除
7#
发表于 2015-3-10 22:49:49 | 只看该作者
总感觉自己还是不会SQL
精灵巫婆 该用户已被删除
8#
发表于 2015-3-17 15:47:13 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
因胸联盟 该用户已被删除
9#
 楼主| 发表于 2015-3-24 10:19:01 | 只看该作者
无法深入到数据库系统层面去了解和探究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 13:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表