完全重新安装计算机后,突然出现以下错误:
Run-time error 3259 invalid field data type on alter table
运行此查询时:
MS Access数据库上的ALTER TABLE Invoices ALTER COLUMN ID COUNTER (1, 1)。
数据类型没有改变,实际上除了重新安装之外什么都没有改变。
字段ID是一个长整型字段,对于表中保存的每一张发票,该字段设置为自动递增。由于数据只是暂时驻留在此表中,因此我在每次批处理后重置了自动递增。我认为这可能与不同版本中缺少或更改的引用有关。但是我似乎不知道是哪一个或者为什么..
我需要在我的查询中更明确吗?有没有人有过这样的经历?
发布于 2014-03-29 00:04:55
我也有同样的问题。当我检查"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),并查看是否像我的那样修复了错误……
发布于 2015-10-18 00:15:46
ALTER COLUMN ID NUMBER对我也有效,但它可能只有在空表的情况下才能使用,否则将ID字段设置回Autonumber (ALTER COLUMN ID COUNTER(此处的next ID number,1))将不起作用。至少不能手动设置。
这是.mdb Access 10 (2002)文件,放在Windows XP下的任何用户目录之上的C://目录/中,由运行时2010打开。当它在用户目录中时,我从来没有注意到这样的行为,比如我的文档或桌面,但也许这是巧合,它会在某个时候发生。在使用该文件和该代码几年后,第一次发生了这种情况。
第二天编辑:
这似乎得到了部分解释。原因是排序顺序。该数据库是在以前使用此设置创建和使用的:
工具>选项>常规>新建数据库排序顺序>波兰语
但是在中间时间,程序中的这个设置被设置为> General
现在它显示了这个错误。它可以很容易地修复设置返回>波兰语
并运行压缩和修复数据库(ALTER COLUMN ID COUNTER再次开始工作)。到目前为止,我已经重复了几次,每次都有效。但是使用General Compact and repair数据库是没有用的。
此子例程:
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字段的排序顺序。对于返回sort order = General的3259错误的表,ID CollatingOrder = 1045。因此,Access似乎在导入过程中更改了ID字段的排序顺序。这将是解决这个问题的第二种方法。或者将整个数据库导入到新的文件中。第三种方法是复制这样的表--它显然也改变了ID的CollatingOrder。最好是通过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在重启后停止了工作。在压缩和修复之前,ID和整个数据库的MsgBox中的CollatingOrder属性值是不同的,在压缩和修复之后也是如此(在压缩和修复之前更改了新数据库的排序顺序)。
发布于 2014-06-16 11:15:04
我也有同样的问题,它已经解决了“压缩和修复”的MS Access数据库。
https://stackoverflow.com/questions/22659444
复制相似问题