我正在尝试使用VBA脚本将我的数据库导出为.dbf,但dbf要求数据库具有特定的列大小值。
当我离开列中的列时,我收到错误说
field will not fit in record
如何单独设置每列的列大小?最好在生成表时,所以每次生成带有查询的新表时,我都不必手动执行。
我在哪里设置它们? (在Query或SQL中?)
提前致谢!
编辑:
我确保它的字段大小值给我错误。我通过在“设计视图”中打开表来手动更改了所有字段大小值。
所以现在我的问题的第二部分变得更加重要。无论是否可以在生成表格时设置字段大小。
EDIT2:
我目前在查询中使用SQL来创建表,如下所示:
SELECT * INTO DB_Total
FROM Tags_AI_DB;
在初始DB_Total
之后,我使用了几个Insert into
个查询来添加其他行:
INSERT INTO DB_TOTAL
SELECT a.*
FROM Tags_STS_ENA_DB AS a
LEFT JOIN DB_TOTAL AS b
ON a.NAME = b.NAME
WHERE b.NAME IS NULL;
如果我使用DB_Total
查询生成Select into
表中的列值,那么在使用Insert Into
查询插入更多行后,它们是否仍然具有这些值?< / p>
EDIT3:
我决定(在你的一些建议和同事的一些指示之后,最好先制作我的表,然后用查询更新这个表。
然而,似乎我已经遇到了Access的死胡同,这是我正在使用的代码:
CREATE TABLE DB_Total ("NAME" char(79),"TYPE" char(16), "UNIT" char(31),
"ADDR" char(254), "RAW_ZERO" char(11), "RAW_FULL" char(11), "ENG_ZERO" char(11),
"ENG_FULL" char(11), "ENG_UNIT" char(8), "FORMAT" char(11), "COMMENT" char(254),
"EDITCODE" char(8), "LINKED" char(1), "OID" char(10), "REF1" char(11), "REF2" char(11),
"DEADBAND" char(11), "CUSTOM" char(128), "TAGGENLINK" char(32), "CLUSTER" char(16),
"EQUIP" char(254), "ITEM" char(63), "HISTORIAN" char(6),
"CUSTOM1" char(254), "CUSTOM2" char(254), "CUSTOM3" char(254), "CUSTOM4" char(254),
"CUSTOM5" char(254), "CUSTOM6" char(254), "CUSTOM7" char(254), "CUSTOM8" char(254))
这些是我创建DBF文件所需的所有列,我们正在使用它的应用程序接受该文件。
当这产生以下错误时,你会理解我的悲伤:
Record is too large
我可以做些什么来使这个表工作吗?
答案 0 :(得分:1)
Access 2007的最大记录大小约为2kB(有人无疑会纠正该值) 当您创建CHAR(255)时,无论字段中的内容如何,它都将使用255个字节的空间 相比之下,VARCHAR不占用空间(仅足以定义它们),直到你在场中放置东西,它们会动态增长。
将CHAR(x)
更改为VARCHAR(x)
,您会将表格的长度缩小到允许的值范围内。请注意,如果您要插入的行大于2kB限制,则可能会遇到麻烦。
生成表时指定列长度的方法是使用CREATE TABLE
语句而不是SELECT * INTO
。
CREATE TABLE DB_Total
(
Column1Name NVARCHAR(255) --Use whatever datatype and length you need
,Column2Name NUMERIC(18,0) --Use whatever datatype and length you need
,...
) ;
INSERT INTO DB_Total
....
如果使用SELECT * INTO
语句,SQL将使用它在现有数据中找到的任何字段长度和类型。
最好在insert语句中列出列名,而不是
INSERT INTO DB_TOTAL
SELECT a.*
你应该把:
INSERT INTO DB_Total
(
Column1Name
,Column2Name
,...
)
SELECT a.Column1Name
,a.Column2Name
,...
FROM ...
WHERE ... ;
答案 1 :(得分:1)
在 Edit2 中,您表示您的流程以“生成表”(SELECT INTO
)查询开头,该查询会创建DB_Total
并使用Tags_AI_DB
中的数据加载它。然后运行一系列“追加”(INSERT
)查询以添加其他表中的数据。
现在您的问题是您需要DB_Total
的特定字段大小设置,但无法使用“生成表”查询定义这些大小。
我认为您应该创建一次DB_Total
并根据需要设置字段大小。如果您愿意,可以使用“设计视图”中的表格手动执行此操作,或执行CREATE TABLE
语句。
然后忘记“make table”查询并仅使用“append”查询来添加数据。
如果问题是这是一个重复操作,并且您想在导入新数据之前丢弃以前的数据,请执行DELETE FROM DB_Total
而不是DROP TABLE DB_Total
。这将允许您保留(现在为空)DB_Total
表的结构,因此您无需再次设置字段大小。
在我看来,如果源表的结构发生变化,那么唯一可能存在的潜在问题。如果发生这种情况,请修改DB_Total
的结构,使其再次兼容。