一、声明
本文意在探索技术,增强论坛功能,无侵害他人谋取利益之念,所讨论的软件均由动网免费提供。不得将本文所述之方法用于商业目的,如果使用不当,侵犯他人合法利益或者对他人造成其它损害,本人概不负责。
二、主旨
众所周知,access数据库有众多的缺陷,如:不支持多处理器,不能并行查询,查询效率低下,文件最大2GB,全文检索效率低下,自身无法实现自动备份,不能实时打开数据库,安全性差等等,而这些问题在sql server 2000中均不存在。 本人经过探索发现,dvbbs7.1.0 access版只要增加4个存储过程就能使用sql 2000数据库,轻松把dvbbs7.1.0 access版改造为dvbbs7.1.0 sql版,如此我们就能享受sql server 2000带来的优越特性了。
三、准备
dvbbs7.1.0_ac.exe,dvbbs7.1.0_ac_up.exe,请从动网下载。
四、转换
1、access到sql server 把数据从access转换到sql server中时,应使用access中的升迁向导来未完成,此时不能使用sql server的企业管理器,并要删除sql server 中对应的表。 升迁时,要建立到sql server的odbc数据源连接,不使用时间戳功能。 2、sql server到access 把数据从sql server转换到access中时,应使用sql server的企业管理器来完成,此时不要用access的获取外部数据。 转换时,access中要有对应版本的表结构,如:把sql server中的dvbbs7.0.0sp2数据转换到access时,可以把dvbbs7.0.0sp2 access版的数据库dvbbs7.mdb中所有表的数据清除,但保留表结构。
五、全新安装
1、使用(四、转换,1、access到sql server)的方法,把dvbbs7.1.0_ac.exe中的dvbbs7.mdb转换到sql server。 2、用(八、脚本)提供的脚本,使用查询分析器在sql server中创建所必须的4个存储过程。 3、在conn.asp中建立到sql server的连接。 4、使用dvbbs7.1.0_ac_up.exe中的cleancache.asp,清空缓存。
六、升级安装
1、使用(四、转换,2、sql server到access)的方法,把sql server中dvbbs7.0.0sp2的数据转换到dvbbs7.mdb中。 2、使用dvbbs7.1.0_ac_up.exe中的update.asp对dvbbs7.mdb升级。 3、使用(四、转换,1、access到sql server)的方法,把dvbbs7.mdb转换到sql server中。 4、用(八、脚本)提供的脚本,使用查询分析器在sql server中创建所必须的4个存储过程。 5、在conn.asp中建立到sql server的连接。 6、使用dvbbs7.1.0_ac_up.exe中的cleancache.asp,清空缓存。
七、说明
1、本文未详述的地方参见dvbbs7.1.0 access版的安装和升级说明。 2、odbc数据源的建立,查询分析器和企业管理器的使用,如果不会,请参见有关使用方法。
八、脚本 请使用明文版的脚本,加密版的有Bug。 复制到查询分析器中执行。 ----------4个存储过程的sql脚本,本虚线不包含在脚本中--------------- if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Dv_TSQL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[Dv_TSQL] GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Dv_loadSetup]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[Dv_loadSetup] GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dv_list]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[dv_list] GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dv_toplist]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[dv_toplist] GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
CREATE PROCEDURE [Dv_TSQL]
@tsql varchar(500)
AS exec(@tsql)
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
CREATE PROCEDURE [Dv_loadSetup] AS Select * from [Dv_setup]
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO
CREATE PROCEDURE [dv_list]
@boardid int=1, @pagenow int=1, @pagesize int=1, @tl int=0, @topicmode int=0, @totalrec int output
AS set nocount on declare @int_topnum int declare @int_timenum int declare @var_times varchar(5000)
if @pagenow>1 if @topicmode>0 begin select @int_timenum=(@pagenow-1)*@pagesize set rowcount @int_timenum select @var_times=lastposttime from Dv_Topic where boardID=@boardID and istop = 0 and mode=@topicmode ORDER BY lastposttime desc
set rowcount @pagesize select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic from dv_topic where boardID=@boardID and istop = 0 and mode=@topicmode and lastposttime < @var_times ORDER BY lastposttime desc
set nocount off return end else begin select @int_timenum=(@pagenow-1)*@pagesize set rowcount @int_timenum select @var_times=lastposttime from Dv_Topic where boardID=@boardID and istop = 0 ORDER BY lastposttime desc
set rowcount @pagesize select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic from dv_topic where boardID=@boardID and istop = 0 and lastposttime < @var_times ORDER BY lastposttime desc
set nocount off return end
else if @topicmode>0 begin set rowcount @pagesize select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic from Dv_topic where boardID=@boardid and istop = 0 and mode=@topicmode ORDER BY lastposttime desc end else begin set rowcount @pagesize select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic from Dv_topic where boardID=@boardid and istop = 0 ORDER BY lastposttime desc end
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS OFF GO
CREATE PROCEDURE [dv_toplist]
@pagenow int , @pagesize int , @reture_value int output, @intUserRecordCount int output
as
declare @intBeginID int declare @intEndID int declare @intPageCount int declare @intRowCount int
set nocount on
select @intUserRecordCount = count(*) from [dv_user] if (@intUserRecordCount = 0) set @reture_value =0
if (@pagenow - 1) * @pagesize > @intUserRecordCount set @reture_value =1
set @intRowCount = (@pagenow - 1) * @pagesize + 1
set rowcount @intRowCount select @intBeginID = userid from [dv_user] order by userid desc
set @intRowCount = @pagenow * @pagesize
set rowcount @intRowCount select @intEndID = userid from [dv_user] order by userid desc
set rowcount 0 set nocount off
select username,useremail,userclass,UserIM,UserPost,JoinDate,userwealth,userid from [dv_user] where userid between @intEndID and @intBeginID order by userid desc return(@@rowcount)
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO ----------4个存储过程的sql脚本,本虚线不包含在脚本中---------------
天狼晓月 by 2007-3-20 9:30:32 阅读全文 | 回复(0) | 引用通告 | 编辑
|