微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access 2016中Excel工作簿的无链接路径

如何解决MS Access 2016中Excel工作簿的无链接路径

我现在不使用链接表,而是使用以下格式创建查询

SELECT * FROM MyTable IN 'S:\NetworkShare\Folder\MyAccessDB.accdb'

这为我提供了使用QueryDef对象控制任何记录集的路径(如果它发生更改)的优势。无需链接似乎更僵化,更不动态的表就可以做到这一点。

是否可以通过链接的Excel工作簿来做到这一点?

解决方法

您的QueryDef可以采用以下格式:

SELECT * FROM [SheetName$Range] IN 'FilePath' [Excel 12.0 Xml;HDR=YES;IMEX=1]

SELECT * FROM [Excel 12.0 Xml;HDR=YES;IMEX=1;ACCDB=YES;DATABASE=FilePath].[SheetName$Range]

如果数据的第一行是标题,则HDR=YES否则HDR=NO

IMEX(导入导出模式)可以有3个values 0,1 and 2

  • 0-导出模式(写)
  • 1-导入模式(读取)
  • 2-链接模式(读+写)

对于.xls文件格式,直到Excel 2003为止都是Excel 97,请使用Excel 8.0

对于.xlsx文件格式,Excel 2007及更高版本,请使用Excel 12.0 Xml

有关其他连接选项,请参见此site

Range是可选的,如果您的数据是固定的,则可以是A1:D50。如果列是固定的,但行不是固定的,则可以使用A1:D,直到最后一行。

例如 您的文件路径是C:\User\UserName\Data\File1.xlsxSheet1,并且第一行包含标题,那么您的QueryDef可以是:

SELECT * FROM [Excel 12.0 Xml;HDR=YES;IMEX=1;ACCDB=YES;DATABASE=C:\User\UserName\Data\File1.xlsx].[Sheet1$]

SELECT * FROM [Sheet1$] IN 'C:\User\UserName\Data\File1.xlsx' [Excel 12.0 Xml;HDR=YES;IMEX=1]

也请参见此相关问题Import Excel spreadsheet into MS Access Database

,

例如,您可以使用ADODB来达到类似的目的

Dim YourFilePath As String
YourFilePath = "Your\file\path"

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

Dim objConnection As Object
Dim objRecordset As Object

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")

Application.StatusBar = "Connecting To DataSource"

objConnection.Mode = 1
objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Mode=Read;" & _
    "Data Source=" & YourFilePath & ";" & _
        "Extended Properties=""Excel 12.0;HDR=Yes;"";"

Application.StatusBar = "Querying DataSource"

'HERE IS YOUR SELECT QUERY
objRecordset.Open "Select * FROM [Sheet1$A1:Z10000]",_
    objConnection,adOpenStatic,adLockOptimistic,adCmdText
    
Do Until objRecordset.EOF
    Dim someCellValue as String

    'GET YOUR DATA FROM HERE
    someCellValue = objRecordset.Fields.Item("ColumnName")

    'MOVE TO NEXT ROW
    objRecordset.MoveNext
Loop

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。