设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2282|回复: 2
打印 上一主题 下一主题

[模块/函数] access如何实现建表?

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2013-2-17 09:00:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比如:
access中名为:Table的表中存放需要建表的参数,如下:
ID ,表名,字段ID,字段名,字段类型,长度,小数位数,主键标志
1,a表,1,客户号,Text,10, ,primary key,
2,a表,2,客户名,Text,20, , ,
3,a表,2,客户本期余额,Double,10,2 , ,
4,b表,1,供应商号,Text,10, ,primary key,
5,b表,2,供应商名,Text,20, , ,
6,b表,3,供应商详细描述,Memo, , , ,
7,c表,1,排队号,Text,10, ,primary key,
8,c表,2,排队人名,Text,20, , ,
9,c表,3,排队人缴款金额,Currency, , , ,
实际中,有上百张表,而且每张表的字段数量都在20个以上,有的达到100多个字段,表名和字段参数都存在Table表中;
下面的代码运行时错误'-2147217900 (80040e14)':CREATE TABLE 语句中的语法错误,求高人帮助,谢谢!
'窗体->命令按钮->事件生成器
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("select * from tta order by 表名,字段ID")
abm = rs(1)

aa1 = "create table [" & rs(1) & "]("
Do While Not rs.EOF
If rs(1) = abm Then
aa1 = aa1 & "[" & rs(3) & "]  " & rs(4) & " ( " & rs(5) & " ) )"
Else
aa1 = Left(aa1, Len(aa1) - 1) & ")"
CurrentProject.Connection.Execute aa1
abm = rs(1)
rs.MovePrevious
aa1 = "create table [" & abm & "]("
End If
rs.MoveNext
If rs.EOF() Then
aa1 = Left(aa1, Len(aa1) - 1) & ")"
CurrentProject.Connection.Execute aa1
End If
Loop
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2013-2-17 09:29:49 | 只看该作者
1.将Sql语句放到查询 分析器中执行,看看是否出错
2.CurrentProject.Connection.Execute 改为 currentdb.execute 试试
3.直接使用DAO的 tbldef field等对象创建表
3#
发表于 2013-2-17 14:15:16 | 只看该作者
1、主键应当在Create Index里创建的。
2、字段类型只会被当做文本常量来处理。而不是关键字常量。例如,rst("字段类型")的value是:dbText:
错误语句:
  1. With tbl
  2.       .Fields.Append .CreateField("字段1", rst("字段类型"))
  3. End With
复制代码
正确语句1:
  1. With tbl
  2.       .Fields.Append .CreateField("字段1", dbText)
  3. End With
复制代码
因此,需要建立起一个字段类型与描述的对照表或者声明变量(如果你记得住十几种字段类型,直接写代码也行)。如下所示:
描述     字段类型
dbText    10
……………………
正确语句2:
  1. With tbl
  2.       .Fields.Append .CreateField("字段1", 10)
  3. End With
复制代码
3、个人不提倡这样创建表。用程序创建表的缺点很明显:
a、描述和查阅列貌似无法创建。
b、其它属性可以创建,但得另外写代码。例如,创建主键或者索引。再如,是否允许空字符串、默认值属性等等。
c、扩展性不强。例如可以写一段代码批量建立多个表。但是,前提是,这些表必须是类似格式的。如需增删改字段,得另外再写代码。倒不如直接将表右击,”另存为“,再从设计视图中修改来得更方便些。
d、无法体现表关系,容易影响软件设计初期工作。由于前期的系统需求分析,对表的创建和字段的取舍有较为深刻的理解,因此手动设计时会考虑到这些细节,而不像程序那样直接运行,也不知道哪些字段取舍关系。
e、上百张表的软件,这么庞大的工程,暂时我还没接触过,我最多只用30多张表。——如果再多几张,我会拆成几个模块再分别链接处理。此外,100多个字段放在一张表的,恕我孤陋寡闻,这还是第一次听说。如果我碰上这种情况,一般会拆分成几个表。像下面这种事情,我是不会做的:

销售部门 第1周业绩  第2周业绩  第3周业绩 …… 第52周业绩
华南区     90%         92%         95%      ………  93%
华北区     90%         92%         95%      ………  93%

当然,这只是个人管见,不足为训。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-8 01:02 , Processed in 0.105184 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表