SQLServer下生成数据库框架    
经过反复学习和测试,最后发现自定义的视图才能简单地胜任所需要的工作,否则把事情会变得很复杂。
视图代码如下:

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=""& chr(10) &"

    " &chr(10)
       For i=0 to Ubound(KeysArray)-1
       '生成XHTML表单
       '同时生成XML文件供验证空间调用
        strForm=strForm & "
  • "& KeysArray(i,0) &"
"
    Select Case KeysArray(i,5)
     Case "textarea"
      strForm=strForm &""& objDict.Item(KeysArray(i,0)) &""""
     Case "text"
      strForm=strForm &""
     Case "hidden"
      strForm=strForm &""
     Case "date"
      strForm=strForm &""
     Case "password"
      strForm=strForm &""
     '遍历出选项,传入参数
     Case "radio"
      s=ReBuildRadio(KeysArray(i,0),objDict.Item(KeysArray(i,0)),KeysArray(i,6))
      strForm=strForm & s
     Case "select"
      s=ReBuildSelect(KeysArray(i,0),objDict.Item(KeysArray(i,0)),KeysArray(i,6))
      strForm=strForm & s
     Case "checkbox"
      s=ReBuildCheckBox(KeysArray(i,0),objDict.Item(KeysArray(i,0)),KeysArray(i,6))
      strForm=strForm & s
    End Select
    strForm=strForm &""&chr(10)
   next
  strForm=strForm &""& chr(10) &"" &chr(10)


'*********************************************************
' 目的:    重建Select表单
' 输入:    选定值(可能为空)、附属的缓存值
' 返回:    HTML表单
'*********************************************************
Function ReBuildSelect(Name,Selected,PointCache)
Dim OptionList,s
OptionList=LoadListCache(PointCache)
  s=""&chr(10)
  For i=0 To UBOUND(OptionList)
    s=s &"    If Selected = OptionList(i,0) Then s=s&"Selected"
    s=s &">"& OptionList(i,1) &""&chr(10)
  Next
  s=s&""&chr(10)
ReBuildSelect=s
End Function
'*********************************************************


'*********************************************************
' 目的:    重建Radio表单
' 输入:    选定值(可能为空)、附属的缓存值
' 返回:    HTML表单
'*********************************************************
Function ReBuildRadio(Name,Selected,PointCache)
Dim OptionList,s
OptionList=LoadListCache(PointCache)
  For i=0 To UBOUND(OptionList)
    s=s &"    If Selected = OptionList(i,0) Then s=s&"checked"
    s=s &">"& OptionList(i,1) &" "&chr(10)
  Next
ReBuildRadio=s
End Function
'*********************************************************


'*********************************************************
' 目的:    重建CheckBox表单
' 输入:    选定值(可能为空)、附属的缓存值
' 返回:    HTML表单
'*********************************************************
Function ReBuildCheckBox(Name,Selected,PointCache)
Dim OptionList,s
OptionList=LoadListCache(PointCache)
  For i=0 To UBOUND(OptionList)
    s=s &"    If Selected = OptionList(i,0) Then s=s&"checked"
    s=s &">"& OptionList(i,1) &""&chr(10)
  Next
  s=s&""&chr(10)
ReBuildCheckBox=s
End Function
'*********************************************************


'*********************************************************
' 目的:    载入预设的数组
' 输入:    指定的预设数组缓存
' 返回:    LoadListCahe(i,1) 值/显示值
'*********************************************************
Function LoadListCache(CacheName)
Dim s,s_0,s_1
  Select Case CacheName
    '经常变动以及树状分类数组
    Case "orgnization"
      
    '不设计树状分类的固定数组
    Case "sex"
      s_0="1,2"
      s_1="男,女"
    Case "marriage"
      s_0="0,1"
      s_1="未婚,已婚"
  End Select
  s_0=Split(s_0,",")
  s_1=Split(s_1,",")
  Redim s(UBOUND(s_0),1)
  For i=0 To UBOUND(s_0)
    s(i,0)=s_0(i)
    s(i,1)=s_1(i)
  Next
LoadListCache=s
End Function

关联文档