Tips for ASP and ACCESS
在这个本应快乐的周末,送完S.H后回到办公室,无奈地投入到对上学期做的一个学院管理系统的修改工作中。今天用到了一些实用的技术片段,整理在此,希望对有需要的人有所帮助。
一、生成错误代码的ASP修改ACCESS数据表名字代码
Set oCat = Server.CreateObject("ADOX.Catalog")
oCat.ActiveConnection = connstr
if month(now()) < 9 then
termnum = 2
else
termnum = 1
end if
lastterm = year(now()) & "_" & termnum
Set oTbl = Server.CreateObject("ADOX.Table")
Set oTbl = oCat.Tables("Ecjtu_detail") '要重命名的表名
oTbl.Name = "Ecjtu_detail_" & lastterm '新表名
conn.execute("select * into Ecjtu_detail from Ecjtu_detail_" & lastterm & " where 1=2")
Set oCat = Nothing
Set oTbl = Nothing
if err then
Response.Write("错误代码" & err & "")
err.clear
Response.Write("<BR><li>出现问题 数据库可能已经被破坏 请联系管理员!")
end if
此段代码通过ADOX对象模型,根据当前月份确定学期编号,进而对ACCESS数据库中的表进行重命名操作,并在重命名后执行了一个数据复制操作。同时,代码中加入了错误处理,当出现错误时,会输出错误代码,并提示用户数据库可能已被破坏,需联系管理员。
二、用ASP将数据库中某一个表的结构复制到另外一个表
复制表结构为新的表
select * into NewTable from OldTable where 1 = 2
这条SQL语句通过查询
OldTable
,并利用where 1 = 2
这个永远为假的条件,仅将表结构复制到NewTable
,而不复制数据。复制表结构及内容到新的表
select * into newtable from oldtable
此语句直接将
oldtable
的结构和内容全部复制到newtable
。复制表结构内的某些字段为新的表
select title,type,price,notes ok into NewTable2 from titles where 1 = 2
该语句从
titles
表中选择title
、type
、price
、notes
字段,并将这些字段的结构复制到NewTable2
,同时将notes
字段在新表中重命名为ok
。复制表结构及内容到新的表,可以选择字段
select title,type,price,pub_id - price ok into NewTable2 from titles
这条语句从
titles
表中选择指定字段,并将字段结构和数据复制到NewTable2
,并且对pub_id - price
进行计算后,以ok
作为新字段名存储在新表中。复制表结构内的某些字段为新的表(另一种示例)
select title y1,type y2,price y3 into yongfa365 from titles where 1 = 2
此语句从
titles
表中选择title
、type
、price
字段,并将它们分别重命名为y1
、y2
、y3
后,复制表结构到yongfa365
表。向新的表里添加数据
insert into yongfa365 (y1,y2,y3) select title,type,price from titles
这条语句将
titles
表中的title
、type
、price
字段的数据插入到yongfa365
表对应的y1
、y2
、y3
字段中。
三、ALTER TABLE语句修改字段数据类型
ALTER TABLE tb ALTER COLUMN aa Byte 数字[字节]。
ALTER TABLE tb ALTER COLUMN aa Long 数字[长整型]。
ALTER TABLE tb ALTER COLUMN aa Short 数字[整型]。
ALTER TABLE tb ALTER COLUMN aa Single 数字[单精度]。
ALTER TABLE tb ALTER COLUMN aa Double 数字[双精度]。
ALTER TABLE tb ALTER COLUMN aa Currency 货币。
ALTER TABLE tb ALTER COLUMN aa Char 文本。
ALTER TABLE tb ALTER COLUMN aa Text(n) 文本,其中n表示字段大小。
ALTER TABLE tb ALTER COLUMN aa Binary 二进制。
ALTER TABLE tb ALTER COLUMN aa Counter 自动编号。
ALTER TABLE tb ALTER COLUMN aa Memo 备注。
ALTER TABLE tb ALTER COLUMN aa Time 日期/时间。
这些语句用于修改tb
表中aa
字段的数据类型,可根据实际需求选择合适的数据类型进行修改。
四、日期相关操作
在一个日期上再加减某个天数
DateAdd("yyyy", -38, #2009-03-08#)
这条语句使用
DateAdd
函数,将日期2009-03-08
减去38年。第一个参数"yyyy"
表示以年为单位进行加减。截取一个时间中的年份/月份/日期
year(now()) month(now()) day(now())
year(now())
获取当前年份,month(now())
获取当前月份,day(now())
获取当前日期。ASP中判断两个日期之间的相差
Dim d1 Dim d2 d1 = Date d2 = #2006-10-10# month_diff = DateDiff("m", d2, d1) day_diff = DateDiff("d", d2, d1) week_diff = DateDiff("ww", d2, d1) response.write "月数之差:" & month_diff & "<br>" response.write "天数之差:" & day_diff & "<br>" response.write "周数之差:" & week_diff & "<br>"
这段代码使用
DateDiff
函数分别计算了当前日期d1
与指定日期d2
之间相差的月数、天数和周数,并将结果输出。
五、使用ASP列举ACCESS数据库中所有的数据表名
Access系统表MsysObjects
包含了数据库对象列表,通过查询它可以获取各类对象的名称。但需注意,不要随意修改任何ACCESS系统表,否则可能导致不可预料的情况。
查询所有数据表名
SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)=1 ORDER BY MSysObjects.Name;
此语句查询
MsysObjects
表,筛选出不以~
开头且类型为1(表示表)的记录,从而获取所有数据表的名称,并按名称排序。查询所有窗体名
SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)= -32768 ORDER BY MSysObjects.Name;
通过该语句查询出所有窗体的名称。
查询所有报表名
SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)= -32764 ORDER BY MSysObjects.Name;
用于获取所有报表的名称。
查询所有模块名
SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)= -32761 ORDER BY MSysObjects.Name;
此语句查询出所有模块的名称。
查询所有宏名
SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)= -32766 ORDER BY MSysObjects.Name;
用于获取所有宏的名称。