private void ButtonDel_Click(object sender, RoutedEventArgs e) { //Удаление обращения MsAccess acs = new MsAccess(); DataRowView dataRow = (DataRowView)DataGridRequests.SelectedItem; //Получаю номер заявки string ordNum = dataRow.Row.ItemArray[1].ToString(); //Получаю дату заявки DateTime ordDt = (DateTime)dataRow.Row.ItemArray[2]; //Формирую предупреждающее сообщение MessageBoxResult msg = MessageBox.Show( messageBoxText: $"Будет удалено обращение {ordNum} от {ordDt:MM.dd.yyyy}\nПродолжить?" , caption: "Внимание" , button: MessageBoxButton.YesNo); if (msg == MessageBoxResult.No) { return; } //Удаляю заявку из трех таблиц OleDbConnection connection = acs.CreateConnection(); OleDbTransaction transaction = connection.BeginTransaction(); OleDbCommand command = connection.CreateCommand(); command.CommandText = $@"DELETE flw.* FROM ord INNER JOIN flw ON ord.ord_id = flw.ord_id WHERE ord.ord_num=""{ordNum}"";"; command.Transaction = transaction; int ordDelRows = 0; //Удаляю из flw try { ordDelRows = command.ExecuteNonQuery(); } catch (Exception) { MessageBox.Show("Не могу удалить обращение из таблицы flw"); transaction.Rollback(); return; } command.CommandText = $@"DELETE app.* FROM ord INNER JOIN app ON ord.ord_id = app.ord_id WHERE ord.ord_num=""{ordNum}"";"; command.Transaction = transaction; //Удаляю из app try { ordDelRows = command.ExecuteNonQuery(); } catch (Exception) { MessageBox.Show("Не могу удалить содержание обращения из таблицы app"); transaction.Rollback(); return; } command.CommandText = $@"DELETE ord.* FROM ord WHERE ord.ord_num=""{ordNum}"";"; command.Transaction = transaction; //Удаляю из ord try { ordDelRows = command.ExecuteNonQuery(); } catch (Exception) { MessageBox.Show("Не могу удалить обращение из таблицы ord"); transaction.Rollback(); return; } //Подтверждаю транзакцию если все в порядке transaction.Commit(); connection.Close(); //Обновление DataGrid DataGridReqReload(); //Подсчет кол-ва обращений CountRequestsMp(); //Запись лога acs.Log(ordNum, "Удаление"); }
private void ButtonUpdate_Click(object sender, RoutedEventArgs e) { MsAccess acs = new MsAccess(); string normDbPath = Environment.CurrentDirectory + @"\Resources\Norm.accdb"; OleDbConnection connection = acs.CreateConnection(); OleDbTransaction transaction = connection.BeginTransaction(); OleDbCommand command = connection.CreateCommand(); //Удаление норм из родительской базы command.CommandText = $@"DELETE FROM nrm WHERE nrm_dt = {DatePickerNorm.SelectedDate:#M-d-yyyy#} AND stf_tn IN (SELECT stf_tn FROM nrm IN '{normDbPath}')"; command.Transaction = transaction; int deteleRows = 0; try { deteleRows = command.ExecuteNonQuery(); } catch (Exception) { MessageBox.Show("Ошибка удаления старых данных. Проверьте данные и повторите попытку."); connection.Close(); return; } //Вставка норм в родительскую базу if (deteleRows > 0) { command.CommandText = $@"INSERT INTO nrm (nrm_dt, stf_tn, nrm_hr, nrm_scr) SELECT nrm.nrm_dt, nrm.stf_tn, nrm.nrm_hr, nrm.nrm_scr FROM nrm IN '{normDbPath}'"; command.Transaction = transaction; } int insertRows = 0; try { insertRows = command.ExecuteNonQuery(); } catch (Exception) { MessageBox.Show("Ошибка вставки. Проверьте данные и повторите попытку."); connection.Close(); return; } //Удаление норм в локальной базе данных if (insertRows > 0) { command.CommandText = $@"DELETE FROM nrm IN '{normDbPath}'"; command.Transaction = transaction; } int deleteLocalRows = 0; try { deleteLocalRows = command.ExecuteNonQuery(); } catch (Exception) { MessageBox.Show("Ошибка удаления данных из локальной базы. Проверьте данные и повторите попытку."); connection.Close(); return; } if (deleteLocalRows == 0) { transaction.Rollback(); connection.Close(); MessageBox.Show("Ошибка редактирования данных"); return; } transaction.Commit(); connection.Close(); MessageBox.Show("Данные изменены"); ButtonUpdate.Visibility = Visibility.Collapsed; ButtonReset.Visibility = Visibility.Collapsed; GenerateNormsDep(); acs.Log(DatePickerNorm.SelectedDate.Value.ToShortDateString() + "_" + _dep, "Изменение"); }