【问题标题】:PowerShell MDB Query - Script Works in Access not in PowerShell [duplicate]PowerShell MDB 查询 - 脚本在 Access 中工作,不在 PowerShell [重复]
【发布时间】:2018-05-24 15:05:06
【问题描述】:

正如主题所说,我在 Access 中直接对 MDB 有一个有效的查询,我有一个 PowerShell 脚本可以处理不同的查询,但此查询不返回任何数据。想法?

这行得通...

$path = "C:\temp\Config.mdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset

$cn.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = $path")
$Ports = $rs.open("Select * from Options where OptionName='Eng.SerialPortMgr.PrinterPort1'",$cn,$adOpenStatic,$adLockOptimistic)
$rs.MoveFirst()

do {
$rs.Fields.Item("OptionName").value + " = " + $rs.Fields.Item("OptionData").value; 
$rs.MoveNext()} 
until($rs.EOF -eq $True)

$rs.Close()
$cn.Close()

$Ports

这没有,我不明白为什么。唯一的区别是查询和下面这个脚本中的查询在 Access 中工作......

$path = "C:\temp\Config.mdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset

$cn.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = $path")
$Ports = $rs.open("SELECT Options.OptionName, Options.OptionData FROM Options WHERE OptionName LIKE 'Eng.SerialPortMgr.PrinterPort*'",$cn,$adOpenStatic,$adLockOptimistic)
$rs.MoveFirst()

do {
$rs.Fields.Item("OptionName").value + " = " + $rs.Fields.Item("OptionData").value; 
$rs.MoveNext()} 
until($rs.EOF -eq $True)

$rs.Close()
$cn.Close()

$Ports

【问题讨论】:

  • % 是 SQL 中的通配符。不是*
  • 都试过了都没有结果
  • 因为你只从一个表中选择,我也会尝试从你的 SELECT 子句中删除表标识符。
  • $rs.Count 给你什么?
  • 所以我修改了它并让它工作,% 是它在脚本中喜欢的。不知道为什么在我必须修复错字或我没有看到的东西之前它不起作用。它是一个大型 WPF shell 脚本的一部分,我可能把自己绊倒了哈哈。

标签: powershell ms-access


【解决方案1】:

这行得通...

$path = "C:\temp\Config.mdb"
$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset

$cn.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = $path")
$SawConfigPorts = $rs.open("SELECT Options.OptionName, Options.OptionData FROM Options WHERE OptionName LIKE 'Eng.SerialPortMgr.PrinterPort%'",$cn,$adOpenStatic,$adLockOptimistic)
$rs.MoveFirst()

do {
    $rs.Fields.Item("OptionName").value + " = " + $rs.Fields.Item("OptionData").value; 
        $rs.MoveNext() } 
        until($rs.EOF -eq $True)

$rs.Close()
$cn.Close()

$SawConfigPorts

【讨论】:

  • 如果您将更改的内容包含在内,此答案会更好,因此未来的读者不必手动比较您的代码块以查看有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 2019-08-16
相关资源
最近更新 更多