예제 #1
0
        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, "Удаление");
        }
예제 #2
0
        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, "Изменение");
        }