思路:
原来的方案:
我们是首先根据数据库的字段和实际需求设计Web表单,然后从Web表单获取提交的数据集,然后在服务段将提交的数据集和数据库的字段一一对应,然后再一一作过滤和处理……
现在的方案:
直接从数据库生成框架缓存,将每一个表的字段及其相关属性(类型要求、必填、长度、默认值……)储存在全局数组中。当外部提交某张表单时,从对应的全局数组中生成相应的Dictionary对象,然后依据这个和数据表完全映射的Dictionary遍历获取对应的提交值,由此替代了一一对应和读取的繁琐过程。
实现部分被简化为:
for i=0 to Ubound(KeysArray)-1
Key=KeysArray(i,0)
Item=Request(md5(Key))
objDict.Add Key,Item
next
也就是说,这是和传统方案完全相反的思路,这个思路保证了所获取的数据一定是数据库所需要的数据,数据库要求的数据类型或者必须为空的数据如果出现异常则必然会出错,等等。
最后在实现表单处理的语句简化为,其他的一切操作都被封装在类中:
Call System_Initialize()
Dim objUser ''新建对象
Set objUser = new TUser
objUser.Table="Comm_User" ''指定数据表
If objUser.Creat Then ''建立表的Dictionary对象
objUser.ValidAndTransfer() ''获取数据、验证并转入最终的数据驱动层
objUser.Update() ''更新该表数据
End IF
Set objUser = nothing
Call System_Terminate()
与之配套的另外一个方面是从缓存的数据表框架中按照实际表单的需要自动生成Web表单,显示在客户端。
在SQL Server中遍历当前数据库的所有用户表
SELECT Table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_TYPE <> ''VIEW'')
Table_name:表名;
TABLE_TYPE:表的类型;
参见:SQL Server联机手册,T-SQL参考,信息架构视图。
又及:ACCESS下也可实现相关的功能[1]
在SQL Server中遍历指定表的字段及属性
SELECT Column_name,IS_NULLABLE,DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (TABLE_NAME = ''myTableName'')