首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MS Access运行时错误3259 alter table上的字段数据类型无效

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

Stack Overflow用户
提问于 2014-03-26 19:22:49
回答 6查看 4.7K关注 0票数 1

完全重新安装计算机后,突然出现以下错误:

Run-time error 3259 invalid field data type on alter table

运行此查询时:

MS Access数据库上的ALTER TABLE Invoices ALTER COLUMN ID COUNTER (1, 1)

数据类型没有改变,实际上除了重新安装之外什么都没有改变。

字段ID是一个长整型字段,对于表中保存的每一张发票,该字段设置为自动递增。由于数据只是暂时驻留在此表中,因此我在每次批处理后重置了自动递增。我认为这可能与不同版本中缺少或更改的引用有关。但是我似乎不知道是哪一个或者为什么..

我需要在我的查询中更明确吗?有没有人有过这样的经历?

EN

回答 6

Stack Overflow用户

发布于 2014-03-29 00:04:55

我也有同样的问题。当我检查"Hoew to alter the data definition of a linked table"时,我突然想到可以尝试将字段数据类型更改为NUMBER,看看该代码是否可以工作。

因此,我将代码更改为:

代码语言:javascript
复制
ALTER TABLE XXXXX ALTER COLUMN ID NUMBER

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

因此,我决定再次尝试原始代码:

代码语言:javascript
复制
ALTER TABLE XXXX ALTER COLUMN ID COUNTER (1,1)

还有..。成功了!O.O

我不明白为什么..。但它成功了..。

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

票数 7
EN

Stack Overflow用户

发布于 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数据库是没有用的。

此子例程:

代码语言:javascript
复制
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更改排序顺序,但它是只读属性。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
Application.SetOption "New Database Sort Order", 1033 ' or 1045 for example

但它会改变某人数据库的属性。也许仍然需要紧凑和维修。

稍后编辑:

现在MsgBox显示1045 : General和Polish (以及: db和ID),并停止显示错误...非常奇怪。也许是因为几次紧凑和维修。

稍后编辑:

第二天,同样的错误,如果新的数据库排序顺序没有改变+压缩和修复。所以General在重启后停止了工作。在压缩和修复之前,ID和整个数据库的MsgBox中的CollatingOrder属性值是不同的,在压缩和修复之后也是如此(在压缩和修复之前更改了新数据库的排序顺序)。

票数 2
EN

Stack Overflow用户

发布于 2014-06-16 11:15:04

我也有同样的问题,它已经解决了“压缩和修复”的MS Access数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22659444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档