最近参与制作了一个论证系统,需要基于代码创建MDB文件,稍微研究了一下,呵呵。
ADO没有对数据库文件操纵的功能,微软提供了ADOX来对ADO扩充,可以看一下微软官方的说明:ADOX 是核心 ADO 对象的扩展库。它显露的其他对象可用于创建、修改和删除模式对象,如表格和过程。它还包括安全对象,可用于维护用户和组,以及授予和撤消对象的权限。Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Security (ADOX)
好,下面进入正文,来看看怎
样使用ADOX来创建数据库文件
首先看一下ADOX的对象模型,这里只是简要介绍怎样创建数据库,不会对下面的每个对象都作介绍,有需要的话,可以看看微软的官方资料。
下面是创建数据库的ASP代码
dim databasename ' 定义数据库名称 dim databasepath ' 定义数据库存放路径 Set cre_new_db = Server.CreateObject( " ADOX.Catalog " ) call cre_new_db.Create( " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & databasepath & databasename) set cre_new_db = nothing首先创建一个ADOX.Catalog的对象 cre_new_db。Catalog是ADOX的一个对象,包含描述数据源模式目录的集合。然后再使用Catalog的一个方法来来创建该MDB文件。
然后使用ADOX.Catalog.Tables.Append可以创建表,胆汁这样创建的表不是很直观,而且发现没办法做到跟ACCESS很兼容,并且使用这个方法我不知道怎样创建自动编号类型,哪位大侠会的话欢迎指教我,所以创建表的过程我是使用SQL语句直接创建的,代码如下:
Str_Curconn = " Driver={Microsoft Access Driver (*.mdb)};DBQ= " & databasepath & databasename Set cru_conn = Server.CreateObject( " ADODB.Connection " )cru_conn.Open Str_Curconncmd = " CREATE TABLE t1(id AUTOINCREMENT,name TEXT(50)) " cru_conn.Execute(cmd)这样子就可以创建逐个创建表了。具体的可以参考Access的帮助,其中AUTOINCREAMENT类型应该不是SQL的标准类型,并且似乎发现Access好像不是很完全支持SQL标准,如下面介绍的设置默认值的方法就没办法只用SQL语句。
但是有时候我们需要把一个表从另外一个数据库导入我们新建的数据库里,那应该怎么办呢?用insert into就可以了。
Set s_conn = Server.CreateObject( " ADODB.Connection " )s_conn.Open " Driver={Microsoft Access Driver (*.mdb)};DBQ=D:/abc.mdb " cmd = " insert into t1(id,name) in " & " ' " & databasepath & databasename & " ' " & " select id,name from t2 " s_conn.Execute(cmd)先需要创建一个ADO对象,然后使用
insert into t1(id,name) in d:/xyz.mdb select id,name from t2
这个SQL语句就可以了,t1是需要插入的数据库中的表名,t2就是s_conn榜定的那个数据库的表了,另外注意还有字段列表,呵呵。
这些都好了,但是有些字段还需要设默认值,我试了好几种方法,发现SQL语句无论是CREATE TABLE还是Alert都不行,似乎还是Access没办法执行,最后发现ADOX可以,来看看应该怎么弄
Set set_def_DB = Server.CreateObject( " ADOX.Catalog " ) Set set_def_Table = Server.CreateObject( " ADOX.Table " ) set_def_DB.ActiveConnection = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & databasepath & databasename set set_def_Table = set_def_DB.Tables( " t1 " )set_def_Table.Columns( " total " ).Properties( " Jet OLEDB:Allow Zero Length " ) = True set_def_Table.Columns( " total " ).Properties( " default " ) = 10其面的那部分连接的就不介绍了,后面的t1是需要设置默认值字段所在的表,total是需要设的默认值的字段,
另外倒数第二行那个是需要允许0长度,不然会提示出错.
PS:终于写完了,本篇博客的第一篇文章,呵呵,比叫匆忙,明天还有考试的~~~,很多代码都是直接从我写的程序里考出来的,比较乱。呵呵^_^