经过反复学习和测试,最后发现自定义的视图才能简单地胜任所需要的工作,否则把事情会变得很复杂。
视图代码如下:
CREATE VIEW dbo.Data_Frame
AS
SELECT dbo.syscolumns.name AS Name, dbo.systypes.name AS Type,
dbo.syscolumns.length AS Width, dbo.syscolumns.isnullable AS IsNull,
dbo.sysproperties.[value], dbo.sysobjects.name AS Table_Name
FROM dbo.sysobjects INNER JOIN
dbo.syscolumns ON dbo.sysobjects.id = dbo.syscolumns.id INNER JOIN
dbo.sysproperties ON dbo.syscolumns.colid = dbo.sysproperties.smallid AND
dbo.syscolumns.id = dbo.sysproperties.id INNER JOIN
dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xtype AND
dbo.syscolumns.xusertype = dbo.systypes.xusertype
最后输出的是:
列名
系统类型
限制长度
是否允许为空
备注
所在表
可以进一步根据需要增加/删除自己希望的部分。
调用:
Select * From [自定义的视图名称] Where Table_Name='[希望检索的表名]'
在数据驱动中启动数据框架缓存的程序如下,其中,该字段在还原为表单的状态及附属信息都定义在[备注]信息中:
strSQL="SELECT Table_name FROM INFORMATION_SCHEMA.TABLES WHERE (TABLE_TYPE<>'VIEW')"
Set objRS_table= objConn.Execute(strSQL)
do while not objRS_table.EOF
'系统表联合查询
strSQL="SELECT * FROM DATA_FRAME WHERE (TABLE_NAME = '"& objRS_table("Table_name") &"')"
set objRS_column=server.createobject("adodb.recordset")
objRS_column.open strSQL,objConn,1,1
Dim i,TableTemp
i=0
ReDim TableTemp(objRS_column.RecordCount,6)
do while not objRS_column.EOF
TableTemp(i,0)=objRS_column(0) '列名
TableTemp(i,1)=objRS_column(1) '系统类型
TableTemp(i,2)=objRS_column(3) '是否允许为空
TableTemp(i,3)=0 '''''''''留空待用
TableTemp(i,4)=objRS_column(2) '长度限制
'提取在字段描述中人为附加的表单属性
'文本text/数字text/下拉select/单选radio/多选checkbox/文字域textarea)
Dim SplitTemp
SplitTemp=Split(objRS_column(4),",")
TableTemp(i,5)=SplitTemp(0) '表单类型
If UBOUND(SplitTemp)>0 Then TableTemp(i,6)=SplitTemp(1) '传入参数变量
i=i+1
objRS_column.movenext
loop
Set objRS_column= nothing
application(objRS_table(0))=TableTemp
objRS_table.movenext
loop
application("arrTables")=True
还原对应表的相关代码如下(未完全完善):
Dim strForm,s
strForm="