Powershell - 插入后 Select 查询的 ODBC MSAccess 提交事务刷新数据
Powershell - ODBC MSAccess Commit transaction refresh data for Select Query after Insert
我在 powershell 中使用 ODBC 连接到 .accdb Access 数据库。将新数据插入 table 后(通过 ExecuteNonQuery 插入),我无法使用 select 命令提取数据以进行进一步处理(创建 PDF table)。查询的结果对象为空(0 行),尽管 "Select @@IDENTITY" returns 是最新的索引标识符。工作流程是这样的:
将数据输入表格 window -> 创建新记录 -> 提取数据并处理成报告 -> 通过邮件发送报告 -> 记录标记为已发送
我尝试使用 SQL 事务机制,但即使在提交完成后,也无法立即使用 select 查询检索数据。插入另一条记录后,可以使用 select 查询提取先前插入的记录,但不能提取新的最新记录。
我还没有找到解决此问题的有效方法。我听说过这一点,在使用 Access 表单时,当表单移动到下一条记录时,数据将可用。有什么办法可以解决这个问题吗?
下面是我的 getter 和 setter 函数。一般来说,它们按预期工作,但首先使用带有插入的 Set-Data 并随后使用 select 触发 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')
}
}
我已经解决了这个问题。提交本身按预期工作。输出过程中丢失的数据记录是使用 for 语句循环数据集中的行时出错的结果。
我在 powershell 中使用 ODBC 连接到 .accdb Access 数据库。将新数据插入 table 后(通过 ExecuteNonQuery 插入),我无法使用 select 命令提取数据以进行进一步处理(创建 PDF table)。查询的结果对象为空(0 行),尽管 "Select @@IDENTITY" returns 是最新的索引标识符。工作流程是这样的: 将数据输入表格 window -> 创建新记录 -> 提取数据并处理成报告 -> 通过邮件发送报告 -> 记录标记为已发送
我尝试使用 SQL 事务机制,但即使在提交完成后,也无法立即使用 select 查询检索数据。插入另一条记录后,可以使用 select 查询提取先前插入的记录,但不能提取新的最新记录。
我还没有找到解决此问题的有效方法。我听说过这一点,在使用 Access 表单时,当表单移动到下一条记录时,数据将可用。有什么办法可以解决这个问题吗?
下面是我的 getter 和 setter 函数。一般来说,它们按预期工作,但首先使用带有插入的 Set-Data 并随后使用 select 触发 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')
}
}
我已经解决了这个问题。提交本身按预期工作。输出过程中丢失的数据记录是使用 for 语句循环数据集中的行时出错的结果。