来源:www.cncfan.com | 2006-9-3 | (有3605人读过)
以下只针对ACCESS数据库,因为我暂时只会这个,呵呵。
我的体会:当数据库越来越大,服务器访问的负担也越来越大,总担心哪一天数据库坏掉;也担心数据库备份实在是不好解决的事。
如果能将数据库按天或按周或按月来记录就最好不过了。
第一步,数据库链接文件的设想:
数据库文件比如按时间来分为 200601.mdb 200602.mdb 200603.mdb,分别对应2006年一月,二月,三月的数据。
数据库链接文件,如conn.asp 里;当然,conn.asp直接要访问数据库,但要区分时,必需是conn.asp来分区使用,比如<!--#include file=conn.asp?m=200601-->,(m定义为月份变量)显然这是不可能的,因为include 语句不允许其file值为带有参数。
那么在conn.asp里,我们使用判断当前月份来选择数据库?
判断开始:
conn.asp:(假设数据库目录为data)
dim m m=year(now)&month(now) set conn=server.createobject("ADODB.CONNECTION") connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data/"&m&".asp") conn.open connstr
这样确实实现了使用判断当前月份来选择数据库地址的效果。但当服务器的时间不准确时,就会判断失败。我们暂时假设服务器时间正确。
第二步,程序的调用方法的设想:
假设当前为2006年3月,a.asp 要读取数据库: 假设要读的数据库表为news,项有:id,newsname,newshits,newsbody,newsdate
<!--#include file=conn.asp-->
这时问题就来了,
set rs=Server.createObject("adodb.recordset") rs.open ("select * from news order by id desc"),conn,1,1
当我们使用rs.open打开数据库后,系统通过第一步的判断,却仅仅读出了3月的数据。那第1月和2月的数据又如何读出呢?
回头再来解决:使用判断,按月份来分割数据库
独立建立数据库 allmonth 表假设为allmonth
当第一次使用系统时,先建立数据库200601.mdb
conn.asp中开始判断:
上一个月的数据库是否存在:
nowmonth = month(now) '使nowmonth 值为当前月 if nowmonth = 1 then '判断当前月是否为1月 upmdbname = (int(year(now))-1)&"12" '如果当前月为1月,那么上一个月就成了去年12月 else upmdbname = (int(year(now))-1)&"12" end if
根据判断结果,将数据库名字写入allmonth数据库里的allmonth表里
假设是2006年1月份开始的数据记录。又假设现在为3月份,这样conn.asp已经向allmonth数据库里输入了 ID 1 200601 ID 2 200602 ID 3 200603
这样,我们就可以记录所有每月的数据库名了。
upmdbname = year(now)&(int(month(now))-1) '当前月减去1,得到上一个月的数据库名upmdbname
else
upmonth = month(now) upmdbname = year(now)&month(now)
Set fs=Server.CreateObject("Scripting.FileSystemObject") fs.CopyFile Server.MapPath("data\"&JyDownMDBname&".asp"),Server.MapPath("data_backup\"&JyDownMDBnameNew&".asp") JyDownMsg="成功:已经成功备份数据库("&JyDownMDBnameNew&".asp)!" Set fs=nothing
好了,我们再回到第二步的问题当我们使用rs.open打开数据库后,系统通过第一步的判断,却仅仅读出了3月的数据。那第1月和2月的数据又如何读出呢?
我只能作到这里了,现在多数据库记录的列表,删除,添加,修改等功能又如何实现?
期盼高手能解答JASON疑问,非常感谢。如果你知道,请直接回复我的BLOG,JASON非常感谢!
那亲爱的读者,
|