MS Access运行时错误3259 alter table上的无效字段数据类型

问题描述 投票:1回答:5

完全重新安装我的电脑后,我突然收到此错误: Run-time error 3259 invalid field data type on alter table 运行此查询时: MS Access数据库上的ALTER TABLE Invoices ALTER COLUMN ID COUNTER (1, 1)

数据类型没有改变,实际上没有任何改变,除了重新安装..

字段ID是一个Long Integer字段,对于表所包含的每个Invoice,该字段设置为自动递增。由于数据仅暂时存在于此表中,因此我会在每批次之后重置自动增量。我认为它可能与缺少或在不同版本中更改的引用有关。但我似乎无法弄清楚哪一个或为什么..

我的查询中是否需要更明确?以前有人经历过这个吗?

sql ms-access ms-access-2010
5个回答
4
投票

我遇到了同样的问题。我正在检查"Hoew to alter the data definition of a linked table",当我发现我可以尝试将字段数据类型更改为NUMBER并查看该代码是否有效。

所以我将代码更改为:

ALTER TABLE XXXXX ALTER COLUMN ID NUMBER

运行代码没有问题!检查表设计,字段数据类型已从Autonumber更改为Number。

所以,我决定再次尝试原始代码:

ALTER TABLE XXXX ALTER COLUMN ID COUNTER (1,1)

并且...它工作!!! O.O

我不明白为什么......但它有效......

尝试通过代码将数据类型更改为NUMBER,运行它,然后将其更改回COUNTER(1,1),并查看是否修复了错误,就像我的...


2
投票

ALTER COLUMN ID NUMBER也适用于我,但它可能仅在空表的情况下使用,否则将ID字段设置为自动编号(ALTER COLUMN ID COUNTER(此处的下一个ID号,1))将不起作用。至少手动无法设置。 这是.mdb Access 10(2002)文件放在C://目录/上面的任何用户目录上,在Windows XP下,由Runtime 2010打开。我在用户目录中没有注意到这种行为,比如我的文档或桌面,但也许这是巧合,它会在某个时候发生。它是在使用该代码几年后第一次发生的。 第二天编辑: 似乎有部分解释。原因是整理订单。之前使用此设置创建并使用了数据库: 工具>选项>常规>新数据库排序顺序>波兰语 但在中间时,程序中的此设置被设置为>常规 现在它显示错误。它可以很容易地修复回来>波兰语 并运行压缩和修复数据库(ALTER COLUMN ID COUNTER再次开始工作)。到目前为止,我已经重复了几次,每次都有效。但是使用General Compact和修复数据库并没有任何帮助。 这个子程序:

Private Sub IDProperties()

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim TableName As String
Dim i As Integer
Dim str As String

TableName = "the name of table"

Set db = CurrentDb()
Set tdf = db.TableDefs(TableName)

For i = 0 To tdf.Fields("ID").Properties.Count - 1
    On Error Resume Next
    str = str & vbNewLine & tdf.Fields("ID").Properties(i).name
    If Err > 0 Then
        str = str & vbNewLine & Err.Number & " " & Err.Description
        Err.Clear
    End If
    str = str & " = " & tdf.Fields("ID").Properties(i).Value
    If Err > 0 Then str = str & "; " & Err.Number & " " & Err.Description
    On Error GoTo 0
Next
Set tdf = Nothing

db.Close
Set db = Nothing

Debug.Print str

End Sub

返回,即ID字段的整理顺序。对于返回3259错误且排序顺序=常规的表,ID Collat​​ingOrder = 1045.如果删除此表并导入新表,则不会发生ID Collat​​ingOrder = 1033和3259错误。看来,Access在导入期间会更改ID字段的整理顺序。这将是解决这个问题的第二种方法。或者将整个数据库导入新文件。第三种方法是复制这样的表 - 它显然也改变了ID的Collat​​ingOrder。最好的方法是通过VBA更改整理顺序,但它是只读属性。

Private Sub GetCollatingOrder()

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim TableName As String

Set db = CurrentDb()
Set tdf = db.TableDefs("table name")

MsgBox "Collating order" & _
   vbNewLine & "- database: " & db.CollatingOrder & _
   vbNewLine & "- table: " & tdf.Fields("ID").Properties("CollatingOrder").Value
   'or tdf.Fields("ID").CollatingOrder

Set tdf = Nothing
db.Close
Set db = Nothing

End Sub

只能更改数据库排序顺序:

Application.SetOption "New Database Sort Order", 1033 ' or 1045 for example

但它改变了某人数据库的属性......并且可能仍然紧凑并且需要修复。 稍后编辑: 现在MsgBox显示1045:General和Polish(以及:db和ID)并停止显示错误......非常奇怪。也许是因为几个紧凑和修复。 稍后编辑: 如果新数据库排序顺序未更改+紧凑和修复,第二天再次出现相同的错误。所以General重启后停止工作。在Compact和Repair之前,MsgBox中的Collat​​ingOrder属性值对于ID和整个数据库是不同的,在Compact和Repair之后(新数据库排序顺序更改之前)也是如此。


0
投票

我遇到了同样的问题,它已通过“Compact&Repair”MS Access数据库解决了。


0
投票

迟到的回复,但其他人也可能发现这个问题。

通过改变

DoCmd.RunSQL "DELETE * FROM YourTable"
CurrentDb.Execute "ALTER TABLE YourTable ALTER COLUMN ID COUNTER(1,1)"

DoCmd.RunSQL "DELETE * FROM YourTable"
CurrentDb.Execute "ALTER TABLE YourTable ALTER COLUMN ID COUNTER(1,2)"

我没有再给出错误,它确实“重置”了自动编号。


0
投票

我遇到了同样的问题。显然,这是因为我通过复制已有自动编号字段的现有结构创建了一个新表。无论出于何种原因,它在副本上给我这个错误。它删除表并从头开始重新创建后工作。

© www.soinside.com 2019 - 2024. All rights reserved.