Access快速开发平台--修复因Office新补丁引起的链接表中显示“#已删除的”问题-红尘如烟
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access开发平台


Access快速开发平台--修复因Office新补丁引起的链接表中显示“#已删除的”问题

发表时间:2022/5/30 23:07:54 评论(0) 浏览(3192)  评论 | 加入收藏 | 复制
   
摘 要:修复Access快速开发平台中因Office新补丁引起的链接表中显示“#已删除的”问题。
正 文:
'功能用途:此段代码用于修复快速开发平台中因Office新补丁引起的链接表中显示“#已删除的”问题。
'解决方案:将表中主键字段类型是nvarchar的改为varchar类型。
'附加说明:1. 对于个别报错的表,请根据立即窗口输出的信息单独进行手工处理。
'          2. 执行完成后可在立即窗口执行RefreshLinkTables或通过数据库配置界面,
'             点击“设为当前”按钮,刷新链接表。
'创 建 者:Eleven Liu
'创建时间:2022-05-30



Sub FixError_ShowDeletedInLinkTables()
    Dim dbs As Object: Set dbs = CurrentDb
    Dim tdf As Object
    For Each tdf In dbs.TableDefs
        '只有ODBC链接表才做进一步处理
        If tdf.Connect Like "ODBC;*" Then
            Dim idx As Object
            '循环表中所有索引
            For Each idx In tdf.Indexes
                '如果该索引是主索引(主键)
                If idx.Primary Then
                    Dim strPkFields As String: strPkFields = ""
                    Dim strSQL As String: strSQL = ""
                    Dim fld As Object
                    '循环主键索引中的所有字段
                    For Each fld In idx.Fields
                        '如果主键包含文本类型的字段才做处理
                        If tdf.Fields(fld.Name).Type = dbText Then
                            strSQL = strSQL & vbCrLf & "ALTER TABLE [" & tdf.Name & "] ALTER COLUMN" _
                                   & " [" & fld.Name & "] varchar(" & tdf.Fields(fld.Name).Size & ") NOT NULL;"
                        End If
                        strPkFields = strPkFields & ",[" & fld.Name & "]"
                    Next
                    '如果主键没有文本类型字段,strSQL长度会为0
                    If Len(strSQL) > 0 Then
                        '注意这里必须采用删除主键,再修改字段类型,然后重新添加主键的方式。
                        '否则由于索引依赖问题直接修改字段字段类型无法修改成功。
                        '1.删除主键。
                        '2.将主键中所有文本字段的数据类型从nvarchar改为varchar
                        '3.重新添加主键。
                        strSQL = "ALTER TABLE [" & tdf.Name & "] DROP CONSTRAINT [" & idx.Name & "];" & strSQL
                        strSQL = strSQL & vbCrLf & "ALTER TABLE [" & tdf.Name & "] ADD CONSTRAINT" _
                               & " [" & idx.Name & "] PRIMARY KEY(" & Mid$(strPkFields, 2) & ");"
                        '使用平台ServerRunSQL函数执行SQL语句修改字段类型。
                        If ServerRunSQL(strSQL) Then
                            Debug.Print "更新成功 " & tdf.Name
                        Else
                            '如果失败了将执行的SQL语句输出到立即窗口,便于调试排查错误。
                            Debug.Print "更新失败 " & tdf.Name & ",SQL为:"
                            Debug.Print String(100, "-")
                            Debug.Print strSQL
                            Debug.Print String(100, "-")
                        End If
                    End If
                    Exit For
                End If
            Next
        End If
    Next
End Sub



Access软件网交流QQ群(群号:198465573)
 
 相关文章
突发!Access:查询''中断错误。的解决方法,你中招了吗?  【易勋  2019/11/14】
2021.12.17 Office打补丁引发Access多人共享联...  【麥田  2021/12/30】
【Access入门】异常显示“#已删除的”解决方法  【某.强人  2022/1/23】
Office更新导致:#已删除的、记录被删除,错误的原因和解决方案  【易勋  2022/5/28】
ODBC Driver 17 for SQL Server 下载  【欧志华  2022/5/30】
常见问答
技术分类
相关资源
文章搜索
关于作者

红尘如烟

文章分类

文章存档

友情链接