??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
在OApȝ中利用VBAQ用Word外部插g(Addin)的技术,能够大大增强公文的表现力。但因ؓWord插g必须Word下蝲x圎ͼ然后才能q行~辑。而且Word是一个开攄pȝQ有很多U方法修改其~辑的内容,因此会显著地减弱它的安全性。在一个正式的办公环境中,如何记录公文的修改痕q,防止恶意改Q是一w帔R要的工作。因为Word本n不提供限制功能的技术,所以用户将公文的正文下载至本地后,无法防止客户做其惌的修攏V如果提高其安全性,只能是在用户提交的数据作验证Q只有作出合法修改的文才能正确提交。未能正提交的数据是非法数据,不能放到系l中?BR>
在Word应用中,记录一个h的修改痕qw常是按照用户名来区分的。要修改某个人的修改痕迹Q只要通过修改用户名就可以了。因此当一文提交时Q只有保证存在着的用Pq且q些用户是不可伪造的Q这些修改痕qҎ真正有意义。如果只用一个用户名Q显然是不行的,因ؓ用户可以单地通过修改名称Q就可以伪造他人的修改痕迹Q而且Q对q样的文,pȝ不好作最后的校验。因此这里必d入数字签名信息,通过数字{Q不是合法用户q是非法用户都无法伪造数据。也是所有的信息都有要通过最后数字签名信息的验证才能提交到服务,通不q,则视为非法数据?BR>
实际使用中,在服务器端生产实际用的数字{信息Qƈ这些签名信息加入Word文的保留字D中。因此用户在下蝲q编辑这些文时Q就已经包含q些信息。用户在修改q些文档时可以时而不时地q行校验Q当用户试图伪造非法信息时Q将l予严重的警告ƈ退出?img src ="http://www.tkk7.com/fhawk/aggbug/11000.html" width = "1" height = "1" />
]]>
1、在功能斚wQWAP的OA正在兴vQ这得益于手机的功能来强大,色彩来丰富。如果在q上头能研发出有一U全C验的话,那么在接下来的几q内Q这会是OA市场一个新的增加点?BR>2、OApȝ与其它业务系l的集成。对于一个企业的OAQ在目前q种状况下,q不是重炏V也是_除非是一安常大的企业,否则QERP才是目前国内l大部分企业考虑的重点,q才是这些企业的生命Uѝ而OA只不q是一U锦上添q东东而已。因此OA只有在能很多CERPpȝq行集成与整合,q提高整个企业的效率Q减运营成本的前提下,才能为OA带来更ؓqK的发展空间?BR>3、功能强大的搜烦引擎是OA的未来一w帔R要的功能Q而且也是必不可少的功能。OA产品的用已l相当长的一D|间了Q因此生了大量的信息。如何根据不同h的不同权限,通过功能强大的搜索引擎,使之能在大量的信息中快速准地得到惌的信息,是一w命性的功能?/P>
]]>
3、对于字W串操作的相兛_数处理,如strcpy用wcscpy的代替等{?BR>4、所有的字符串|必须加上宏_T()
5、如果在E序中用了STLQ必M用必M用其w版的函数及类型,比如string得用wstring来代替,在我的程序中Q用了如下预编译指令:
#ifdef _UNICODE
#define tstring wstring
#else
#define tstring string
#endif
q样在程序中用tstring来声明字W串。所有与string相关的函数都必须作这q样的处理。比如stringstream、ostream{等?BR>关于~码的问题请参考下面文章:
http://dev.csdn.net/develop/article/72/72002.shtm
]]>
select a.* from table1 a left join table2 b on a.id=b.id where b.id is null
同理Q这个方法也适用于in的情c?img src ="http://www.tkk7.com/fhawk/aggbug/4392.html" width = "1" height = "1" />
]]>
1、CSDNC邹徏写的一个通用存储q程
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_show]
GO
/*--实现分页的通用存储q程
昄指定表、视图、查询结果的WX?BR> 对于表中主键或标识列的情?直接从原表取数查询,其它情况使用临时表的Ҏ
如果视图或查询结果中有主?不推荐此Ҏ
如果使用查询语句,而且查询语句使用了order by,则查询语句必d含top 语句
--邹徏 2003.09--*/
/*--调用CZ
exec p_show '地区资料'
exec p_show 'select top 100 percent * from 地区资料 order by 地区名称',5,3,'地区~号,地区名称,助记?
--*/
CREATE Proc p_show
@QueryStr nvarchar(4000), --表名、视囑、查询语?BR>@PageSize int=10, --每页的大?行数)
@PageCurrent int=1, --要显C的?BR>@FdShow nvarchar (4000)='', --要显C的字段列表,如果查询l果不需要标识字D?需要指定此?且不包含标识字段
@FdOrder nvarchar (1000)='' --排序字段列表
as
set nocount on
declare @FdName nvarchar(250) --表中的主键或表、时表中的标识列名
,@Id1 varchar(20),@Id2 varchar(20) --开始和l束的记录号
,@Obj_ID int --对象ID
--表中有复合主键的处理
declare @strfd nvarchar(2000) --复合主键列表
,@strjoin nvarchar(4000) --q接字段
,@strwhere nvarchar(2000) --查询条g
select @Obj_ID=object_id(@QueryStr)
,@FdShow=case isnull(@FdShow,'') when '' then ' *' else ' '+@FdShow end
,@FdOrder=case isnull(@FdOrder,'') when '' then '' else ' order by '+@FdOrder end
,@QueryStr=case when @Obj_ID is not null then ' '+@QueryStr else ' ('+@QueryStr+') a' end
--如果昄W一,可以直接用top来完?BR>if @PageCurrent=1
begin
select @Id1=cast(@PageSize as varchar(20))
exec('select top '+@Id1+@FdShow+' from '+@QueryStr+@FdOrder)
return
end
--如果是表,则检查表中是否有标识更或主键
if @Obj_ID is not null and objectproperty(@Obj_ID,'IsTable')=1
begin
select @Id1=cast(@PageSize as varchar(20))
,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))
select @FdName=name from syscolumns where id=@Obj_ID and status=0x80
if @@rowcount=0 --如果表中无标识列,则检查表中是否有主键
begin
if not exists(select 1 from sysobjects where parent_obj=@Obj_ID and xtype='PK')
goto lbusetemp --如果表中无主?则用临时表处?/P>
select @FdName=name from syscolumns where id=@Obj_ID and colid in(
select colid from sysindexkeys where @Obj_ID=id and indid in(
select indid from sysindexes where @Obj_ID=id and name in(
select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
)))
if @@rowcount>1 --查表中的主键是否为复合主?BR> begin
select @strfd='',@strjoin='',@strwhere=''
select @strfd=@strfd+',['+name+']'
,@strjoin=@strjoin+' and a.['+name+']=b.['+name+']'
,@strwhere=@strwhere+' and b.['+name+'] is null'
from syscolumns where id=@Obj_ID and colid in(
select colid from sysindexkeys where @Obj_ID=id and indid in(
select indid from sysindexes where @Obj_ID=id and name in(
select name from sysobjects where xtype='PK' and parent_obj=@Obj_ID
)))
select @strfd=substring(@strfd,2,2000)
,@strjoin=substring(@strjoin,5,4000)
,@strwhere=substring(@strwhere,5,4000)
goto lbusepk
end
end
end
else
goto lbusetemp
/*--使用标识列或主键为单一字段的处理方?-*/
lbuseidentity:
exec('select top '+@Id1+@FdShow+' from '+@QueryStr
+' where '+@FdName+' not in(select top '
+@Id2+' '+@FdName+' from '+@QueryStr+@FdOrder
+')'+@FdOrder
)
return
/*--表中有复合主键的处理Ҏ--*/
lbusepk:
exec('select '+@FdShow+' from(select top '+@Id1+' a.* from
(select top 100 percent * from '+@QueryStr+@FdOrder+') a
left join (select top '+@Id2+' '+@strfd+'
from '+@QueryStr+@FdOrder+') b on '+@strjoin+'
where '+@strwhere+') a'
)
return
/*--用时表处理的方?-*/
lbusetemp:
select @FdName='[ID_'+cast(newid() as varchar(40))+']'
,@Id1=cast(@PageSize*(@PageCurrent-1) as varchar(20))
,@Id2=cast(@PageSize*@PageCurrent-1 as varchar(20))
exec('select '+@FdName+'=identity(int,0,1),'+@FdShow+'
into #tb from'+@QueryStr+@FdOrder+'
select '+@FdShow+' from #tb where '+@FdName+' between '
+@Id1+' and '+@Id2
)
GO
2、当有排序IDQ唯一Q时Q可以用如下存储q程Q?BR>CREATE PROCEDURE SPPagediv
@tblName varchar(3000), -- 表名
@strGetFields varchar(3000) = '*', -- 需要返回的?BR>@fldName varchar(255)='', -- 排序的字D名
@PageSize int = 10, -- 尺?BR>@PageIndex int = 1, -- 늠
@doCount bit = 0, -- q回记录L, ?0 值则q回
@OrderType bit = 0, -- 讄排序cd, ?0 值则降序
@strWhere varchar(1500) = '' -- 查询条g (注意: 不要?where)
AS
declare @strSQL varchar(5000) -- 主语?/P>
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序cd
begin
replace(@strGetFields,'''','''''')
end
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
else
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
--以上代码的意思是如果@doCount传递过来的不是0Q就执行Ll计。以下的所有代码都是@doCount?的情?/P>
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
--如果@OrderType不是0Q就执行降序Q这句很重要Q?/P>
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder
--如果是第一就执行以上代码Q这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from ' + @tblName + ' ' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec (@strSQL)
GO
q个存储q程如下文章中获得:
http://soft.zol.com.cn/2005/0117/144785.shtml