我有一个MS Access 2010数据库,其中包含一个链接到CSV文件的表。使用内置的Access"链接表管理器"来升级CSV文件位置不起作用。
我检查要更新的文件,选择"始终提示输入新位置"并选择新文件。我收到一条消息,告诉我更新成功了,但是当我去检查时,表仍然链接到旧文件。
这是MS Access错误,如果是,那么最有效的解决方法是什么?
我最终删除旧表并手动重新创建具有相同规格的新表。
答案 0 :(得分:1)
*更新: - 我忘了包含引用的函数Relink_CSV :(
是的,我称之为bug。微软可能称之为“设计特色”。
正如您所发现的,您可以手动修复问题。如果您对代码解决方案感兴趣,那么我可能会有一些适合您的东西 - 如果您的CSV文件是用逗号分隔的。
以下代码(您需要修改!)将删除现有的链接csv文件,然后添加指向同一文件的链接。为了进行调试,我的代码然后删除该链接并添加指向不同文件名的链接,但是在同一文件夹中。
如果您的csv格式不简单,还有其他解决方案可以使用已保存的导入规范,您可以重复使用。
Option Explicit
Option Compare Database
Sub Call_Relink()
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim strTableName As String
Dim strPath As String
Dim strFile As String
Dim iReply As Integer
iReply = MsgBox("WARNING!!!! This code will remove the linked tables 'FileA' and 'FileB'" & vbCrLf & vbCrLf & _
"Click 'Yes' to Continue" & vbCrLf & "Click 'No' to Stop", vbYesNo, "CAUTION!! Will remove linked table(s)")
If iReply <> vbYes Then
Exit Sub
End If
On Error GoTo Error_Trap
Set dbs = CurrentDb
dbs.TableDefs.Delete "FileA" ' For testing; delete table if it already exists
strPath = "C:\Temp\"
strFile = "FileA.csv"
strTableName = "FileA" ' Table name in Access
Relink_CSV strTableName, strPath, strFile ' Call function to link the CSV file
dbs.TableDefs.Refresh ' Refresh TDF's
Debug.Print "Pause here and check file link" ' Put a breakpoint here; pause and look at the table in Access
dbs.TableDefs.Delete "FileA" ' For testing; delete table if it already exists
strPath = "C:\Temp\" ' Path to next csv
strFile = "FileB.csv" ' Name of next csv file
strTableName = "FileA" ' Table name in Access
Relink_CSV strTableName, strPath, strFile ' Call function to link to a different CSV file
dbs.TableDefs.Refresh
Debug.Print "Pause here and check file link" ' Put a breakpoint here; pause and look at the table in Access
My_Exit:
Set dbs = Nothing
Exit Sub
Error_Trap:
Debug.Print Err.Number & vbTab & Err.Description
If Err.Number = 3265 Then ' Item not found in this collection.
' Ignore this error
Resume Next
End If
MsgBox Err.Number & vbTab & Err.Description
Resume My_Exit
Resume
End Sub
Function Relink_CSV(strTableName As String, strPath As String, strFile As String)
' (1) Name of the table in Access
' (2) Path to the file
' (3) File name
On Error GoTo Relink_Err
DoCmd.TransferText acLinkDelim, , strTableName, strPath & strFile, False, ""
Relink_Exit:
Exit Function
Relink_Err:
Debug.Print Err.Number & vbTab & Err.Description
MsgBox Err.Number & vbTab & Err.Description
Resume Relink_Exit
Resume
End Function