You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell访问Access链接表提示链接规范不存在,如何解决?

问题描述

我有一个.mdb数据库,其中包含一个链接至外部CSV文件的Linked_Table。在Access中可正常打开该表并执行SQL查询,但尝试用PowerShell(因VBScript已弃用)通过ADODB自动化加载数据时出现问题。

使用的PowerShell代码如下:

$adOpenStatic = 3
$adLockOptimistic = 3

$objConnection = New-Object -comobject ADODB.Connection
$objRecordset = New-Object -comobject ADODB.Recordset

$objConnection.Open("
    Provider =  Microsoft.ACE.OLEDB.12.0;
    Data Source = C:\Data\My_Frontend.mdb
")

$objRecordset.Open(
    "Select * from Linked_Table",
    $objConnection,$adOpenStatic,$adLockOptimistic)

$objRecordset.MoveFirst()

do {
    $objRecordset.Fields.Item("product").Value;
    $objRecordset.MoveNext()
} until ($objRecordset.EOF -eq $True)

$objRecordset.Close()
$objConnection.Close()

查询普通表一切正常,但查询Linked_Table时出现错误:

The text file specification 'Patient-orders Link Specification' does not exist. You cannot import, export, or link using the specification.

我确认已保存对应的链接规范并用于链接/导入数据,现疑问:

  1. 为何会出现该错误?
  2. 如何解决此问题?
解答

1. 错误原因

Access保存的文本链接规范存储在当前用户的Access配置文件中,而非嵌入到.mdb数据库文件内。用ADODB直接连接数据库时,PowerShell进程不会加载Access的用户配置,导致驱动找不到对应的链接规范。此外,ACE OLEDB驱动直接访问链接表时,不会自动触发Access的配置加载逻辑,必须显式指定规范或让驱动定位到规范存储位置。

2. 解决方法

方法一:在连接字符串中显式指定规范

修改ADODB连接字符串,添加CSV文件所在路径和链接规范名称参数:

$objConnection.Open("
    Provider = Microsoft.ACE.OLEDB.12.0;
    Data Source = C:\Data\My_Frontend.mdb;
    Jet OLEDB:Text Path = C:\实际CSV文件所在文件夹路径;
    Jet OLEDB:Text File Specification = Patient-orders Link Specification
")

需替换C:\实际CSV文件所在文件夹路径为你的CSV文件真实目录。

方法二:通过Access.Application对象执行查询

自动化Access应用程序加载数据库,这样会读取当前用户的Access配置,自然能识别已保存的链接规范:

$accessApp = New-Object -ComObject Access.Application
$accessApp.OpenCurrentDatabase("C:\Data\My_Frontend.mdb")

$recordset = $accessApp.CurrentDb.OpenRecordset("Select * from Linked_Table")
$recordset.MoveFirst()

do {
    $recordset.Fields.Item("product").Value
    $recordset.MoveNext()
} until ($recordset.EOF -eq $True)

$recordset.Close()
$accessApp.CloseCurrentDatabase()
$accessApp.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($accessApp) | Out-Null

方法三:重新创建链接表并嵌入格式规范(适用于可重新链接的场景)

在Access中重新链接CSV时,通过VBA代码显式定义列格式,把规范嵌入数据库系统表,避免依赖用户配置:

' 在Access中运行此VBA代码后保存数据库
DoCmd.TransferText acLinkDelim, , "Linked_Table", "C:\路径\到\你的\CSV文件.csv", True, "product;text,quantity;integer"

代码中最后一个参数为列格式定义,可根据实际CSV结构调整。

内容的提问来源于stack exchange,提问作者Phil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:53:10