Office中国论坛/Access中国论坛

标题: access如何实现建表? [打印本页]

作者: gumingbeijing    时间: 2013-2-17 09:00
标题: access如何实现建表?
比如:
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
作者: tmtony    时间: 2013-2-17 09:29
1.将Sql语句放到查询 分析器中执行,看看是否出错
2.CurrentProject.Connection.Execute 改为 currentdb.execute 试试
3.直接使用DAO的 tbldef field等对象创建表
作者: roych    时间: 2013-2-17 14:15
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%

当然,这只是个人管见,不足为训。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3