【问题标题】:Powershell - ODBC MSAccess Commit transaction refresh data for Select Query after InsertPowershell - 插入后选择查询的 ODBC MSAccess 提交事务刷新数据
【发布时间】:2018-07-06 01:23:22
【问题描述】:

我正在使用 powershell 中的 ODBC 连接到 .accdb 访问数据库。将新数据插入表(通过 ExecuteNonQuery 插入)后,我无法使用选择命令提取数据以进行进一步处理(创建 PDF 表)。查询的结果对象为空(0 行),尽管“Select @@IDENTITY”返回最新的索引标识符。工作流程是这样的: 将数据输入表单窗口 -> 创建新记录 -> 提取数据并处理成报告 -> 通过邮件发送报告 -> 记录标记为已发送

我尝试使用 SQL 事务机制,但即使在提交完成后,也无法立即使用选择查询检索数据。插入另一条记录后,可以使用选择查询来提取先前插入的记录,但不能提取最新的记录。

我还没有找到任何可行的解决方案来解决这个问题。我听说过,在使用 Access 表单时,当表单移动到下一条记录时,数据将可用。有什么想法可以解决这个问题吗?

以下是我的 getter 和 setter 函数。一般来说,它们按预期工作,但首先使用带有插入的 Set-Data,然后使用带有选择的触发 Get-Data 不会提供任何记录。

Function Get-Data($SQLCommand){
    try{
        $Connection = New-Object System.Data.Odbc.OdbcConnection($DSN)
        $Connection.Open()
        $AccdbCommand = New-Object System.Data.Odbc.OdbcCommand($SQLCommand, $Connection)
        $AccdbAdapter = New-Object System.Data.Odbc.OdbcDataAdapter($AccdbCommand)
        $AccdbDataSet = New-Object System.Data.DataSet
        $AccdbAdapter.Fill($AccdbDataSet)
        $Connection.Close()
        return $AccdbDataSet
    }
    catch
    {
        [System.Windows.Forms.MessageBox]::Show($_.Exception.Message + "`r`n" + $_.Exception.InnerException, "Fehler",'OK','Error')
    }
}

Function Set-Data($SQLCommand){
    try
    {
        $Connection = New-Object System.Data.Odbc.OdbcConnection($DSN)
        $Connection.Open()

        $Transaction = $Connection.BeginTransaction()

        $AccdbCommand = New-Object System.Data.Odbc.OdbcCommand($SQLCommand, $Connection, $Transaction)
        $AccdbCommand.ExecuteNonQuery()
        $transaction.Commit()

        $AccdbCommand = New-Object System.Data.Odbc.OdbcCommand("Select @@IDENTITY", $Connection)
        $result = $AccdbCommand.ExecuteScalar()

        $Connection.Close()
    }
    catch
    {
        [System.Windows.Forms.MessageBox]::Show($_.Exception.Message + "`r`n" + $_.Exception.InnerException, "Fehler", 'OK', 'Error')
    }
}

【问题讨论】:

    标签: powershell transactions odbc ms-access-2010 insert-into


    【解决方案1】:

    我已经解决了这个问题。提交本身正在按预期工作。输出过程中丢失的数据记录是由于使用 for 语句循环数据集中的行时出错的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      相关资源
      最近更新 更多