ms-access - 在将刷新数据类型的Access中,如何以编程方式更新链接表?

  显示原文与译文双语对照的内容
0 0

我正在使用一个旧的Microsoft Access 数据库,我们最近更新了它来使用链接表/SQL Server 后端。

我正在对数据的结构进行一些更改,并希望以编程方式更新链接表引用。

但是,在使用的代码之后,完成所需的链接表后,不会获得特定表的更新数据类型。 现在数据类型是文本,但是如果我使用外部数据> 链接表管理器并通过该进程,它们会更新到日期/时间。

( 我想要在dev和生产之间转换一个函数,所以我不认为上面的路线是一种选择。)

access/vb不再是我最强大的技能了,但从 MSDN ( 这是这本书,这本书是。) 看来是需要 tb.Fields.Refresh,但是它不像我预期的那样工作。

我做错什么了?

Function RefreshLinkedTables() As Boolean
 Dim db As DAO.Database
 Dim tb As DAO.TableDef
 Dim fld As DAO.Field
 Set db = CurrentDb
 For Each tb In db.TableDefs
 ' Skip system files.
 If (Mid(tb.Name, 1, 4) <>"MSys" And Mid(tb.Name, 1, 4) <>"~TMP") Then
 Debug.Print tb.Name
 Debug.Print tb.Connect
 If (Mid(tb.Connect, 1, 5) ="ODBC;") Then
 tb.RefreshLink
 If (tb.Name ="Jobs") Then
 Debug.Print"Refreshing fields data"
 tb.Fields.Refresh
 End If
 End If
 Debug.Print"=== === ==="
 End If
 db.TableDefs.Refresh
 Next
 Set db = Nothing
 RefreshLinkedTables = True
 Exit Function
End Function
时间:原作者:6个回答

0 0

有一些东西导致了奇怪的行为。

首先,链接表最初使用的是 SQL Server 驱动程序,而不是 SQL Server Native Client 10.0 一。所以,当我刷新表时,我选择了不正确的一个( 我知道不是 11.0 但我认为是 10.0 ) 。

第二个问题是当访问表转换到 SQL Server 时,日期时间字段被设置为 datetime2(0) ( 使用了 Access 2010迁移工具) 。 不幸的是,SQL Server 驱动程序不支持这些。

我们希望用户通过 Windows 认证( 同样,遗留应用程序希望一天移动到web或者 3会议方解决方案) 进行认证,我们知道它是以这种方式。

更改 SQL Server 表以使用datetime而不是datetime2后,下面的代码工作得很好:

Option Compare Database
Option Explicit
Function RefreshLinkedTables() As Boolean
 Dim db As DAO.Database
 Dim tb As DAO.TableDef
 Set db = CurrentDb
 For Each tb In db.TableDefs
 ' Skip system files.
 If (Mid(tb.Name, 1, 4) <>"MSys" And Mid(tb.Name, 1, 4) <>"~TMP") Then
 Debug.Print tb.Name
 Debug.Print tb.Connect
 If (Mid(tb.Connect, 1, 5) ="ODBC;") Then
 'We only need to refresh a single table.
 If (tb.Name ="Jobs") Then
 tb.Connect = tb.Connect &""
 'Live connection
 'tb.Connect ="ODBC;Description=___;DRIVER=SQL Server;SERVER=___;APP=Microsoft Office 2010;DATABASE=___"
 'Dev connection
 'tb.Connect ="ODBC;Description=___;DRIVER=SQL Server;SERVER=___;APP=Microsoft Office 2010;DATABASE=___"
 tb.RefreshLink
 End If
 'tb.RefreshLink
 End If
 Debug.Print"=== === ==="
 End If
 Next
 db.TableDefs.Refresh
 Set db = Nothing
 RefreshLinkedTables = True
 Exit Function
End Function

逻辑可以被更多的清理,但它可以。

感谢Gord的帮助。

原作者:
...