Я подключаюсь с ODBC в powershell к базе данных доступа .accdb. После вставки новых данных в таблицу (вставка через ExecuteNonQuery) я не могу извлечь данные с помощью команды выбора для дальнейшей обработки (создать таблицу PDF). Результирующий объект запроса пуст (0 строк), хотя «Select @@ IDENTITY» возвращает самый последний индексный идентификатор. Рабочий процесс выглядит примерно так:
Данные, введенные в окно форм -> создается новая запись -> данные извлекаются и обрабатываются в отчете -> отчет отправляется по почте -> запись помечается как отправленная
Я пытался использовать механизм транзакций SQL, но даже после фиксации данные не могут быть сразу получены с помощью запроса select. После вставки другой записи ранее вставленную можно извлечь с помощью запроса выбора, но не новой самой новой записи.
Я не нашел никакого рабочего решения этого поведения. Я слышал об этом при использовании форм доступа, где данные будут доступны, когда форма будет перемещена в следующую запись. Любые идеи, как я могу решить это?
Ниже приведены мои функции получения и установки. Как правило, они работают как положено, но использование 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')
}
}