Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842

Удаление записи из Access

18.11.2013, 22:11. Показов 6269. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане!
Собственно, есть небольшая проблемка. Не удаляется запись из таблицы, база Access.
Добавление записи в базу происходит, редактирование существующих записей работает, но записи не удаляются. Уперся и все - не могу никак найти причину.
Ниже привожу код
Подключение и получение данных:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            da = new OleDbDataAdapter("SELECT Mass.id, Mass.Times, Mass.Mass, Mass.Priest, Mass.Comment FROM Schedule.DayMass, Schedule.Mass WHERE Mass.id_day=DayMass.id AND DayMass.days='" + _date.ToShortDateString() + "'", Connection.GetConnect);
            ds = new DataSet();
            da.Fill(ds);
            Grid.ItemsSource = ds.Tables[0].DefaultView;
            OleDbCommand command = new OleDbCommand("SELECT DayMass.Memory FROM Schedule.DayMass WHERE DayMass.days='" + _date.ToShortDateString() + "'", Connection.GetConnect);
            OleDbDataReader dataread = command.ExecuteReader();
            if (dataread.Read())
            {
                MemoryString = dataread.GetString(0);
                tbDay.Text = MemoryString;
            }
            else
            {
                tbDay.Text = null;
            }
Добавление в datatable
C#
1
            ds.Tables[0].Rows.Add(GetRow());
Изменение данных:
C#
1
2
3
4
5
6
            ds.Tables[0].Rows[i].BeginEdit();
            ds.Tables[0].Rows[i]["Times"] = cBoxHour.Text + ":" + cBoxMinute.Text;
            ds.Tables[0].Rows[i]["Mass"] = cBoxMass.SelectedItem;
            ds.Tables[0].Rows[i]["Priest"] = cBoxPriest.SelectedItem;
            ds.Tables[0].Rows[i]["Comment"] = tbComment.Text;
            ds.Tables[0].Rows[i].EndEdit();
Удаление данных:
C#
1
2
3
4
5
6
            int i = Grid.SelectedIndex;
            if (i != -1)
            {
                ds.Tables[0].Rows.RemoveAt(i);
                del = true;
            }
Обновление данных в Access:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
            if (add)
            {
                OleDbCommand comadd = new OleDbCommand("SELECT id FROM DayMass WHERE days='" + previousdate + "'", Connection.GetConnect);
                int i = (int)comadd.ExecuteScalar();
                da.InsertCommand = new OleDbCommand("INSERT INTO Mass (id_day,times,mass,priest,comment) VALUES (" + i + ",@time,@mass,@priest,@comment)", Connection.GetConnect);
                OleDbParameter[] parametr = new OleDbParameter[4];
                parametr[0] = new OleDbParameter("time", OleDbType.VarChar, 255, "Times");
                parametr[1] = new OleDbParameter("mass", OleDbType.VarChar, 255, "Mass");
                parametr[2] = new OleDbParameter("priest", OleDbType.VarChar, 255, "Priest");
                parametr[3] = new OleDbParameter("comment", OleDbType.VarChar, 255, "Comment");
                da.InsertCommand.Parameters.AddRange(parametr);
            }
            if (edit)
            {
                da.UpdateCommand = new OleDbCommand("UPDATE Mass SET Mass.Times=@time, Mass.Mass=@mass, Mass.Priest=@priest, Mass.Comment=@comment WHERE Mass.id=@id", Connection.GetConnect);
                OleDbParameter[] parametr = new OleDbParameter[5];
                parametr[0] = new OleDbParameter("time", OleDbType.VarChar, 255, "Times");
                parametr[1] = new OleDbParameter("mass", OleDbType.VarChar, 255, "Mass");
                parametr[2] = new OleDbParameter("priest", OleDbType.VarChar, 255, "Priest");
                parametr[3] = new OleDbParameter("comment", OleDbType.VarChar, 255, "Comment");
                parametr[4] = new OleDbParameter("id", OleDbType.Integer, 32, "id");
                da.UpdateCommand.Parameters.AddRange(parametr);
            }
            if (del)
            {
                da.DeleteCommand = new OleDbCommand("DELETE FROM Mass WHERE id=@id", Connection.GetConnect);
                OleDbParameter[] parametr = new OleDbParameter[1];
                parametr[0] = new OleDbParameter("id", OleDbType.Integer, 32, "id");
                da.DeleteCommand.Parameters.AddRange(parametr);
            }
            if (add || edit || del)
            {
                da.Update(ds.Tables[0]);
                ds.AcceptChanges();
            }
В чем может быть проблема с удалением?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.11.2013, 22:11
Ответы с готовыми решениями:

Удаление записи из БД access
Как можно переделать код, что-бы удалять выбранную запись(выделенную строку), а не по textBox'ам? private OleDbConnection...

Удаление последней записи access
Требуется удалить последнюю добавленную запись в таблицу. Нужно полагать, что сперва нужно определить кол-во записей. но что дальше?

Удаление записи из access (ADO)
День добрый. Удаляю через ADOQuery, но результата ноль, либо не правильно делаю. Подскажите пожалуйста. Хочу удалить всю запись из БД. А...

7
Заблокирован
19.11.2013, 04:18
Ну код я не смотрел, но в любом случае, будет проще использовать OleDbCommandBuilder вместо этих многочисленных OleDbCommand.
По крайней мере, тогда не придётся писать столько кода, а значит, будет труднее ошибиться.

Просто добавьте в "Подключение и получение данных" после первой строчки
C#
1
OleDbCommandBuilder odcbuilder = new OleDbCommandBuilder(da);
"Обновление данных в Access" тогда должно будет выглядеть так:
C#
1
2
3
4
5
if (add || edit || del)
{
    da.Update(ds.Tables[0]);
    ds.AcceptChanges();
}
Если не поможет, скиньте проект и БД, чтобы я посмотрел.

P.S.
И на будущее предупреждайте, что проект в WPF (или что это за Grid со свойством ItemsSource), а то неясно.
1
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
19.11.2013, 11:32
C#
1
2
ds.Tables[0].Rows[i].Delete();
del = true;
1
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
19.11.2013, 22:35  [ТС]
Ребята, спасибо за помощь!
C#
1
ds.Tables[0].Rows[i].Delete();
То, что надо. Еще раз спасибо.
0
0 / 0 / 0
Регистрация: 27.12.2019
Сообщений: 2
15.03.2021, 13:48
Вот моё решение. Не идеально, конечно, но работает. Метод Query отвечает за SQL-запросы. вы же можете подставить свои. Я делаю проверку по полю "Код", ибо в моей базе оно ключевое. У Вас оно так же может быть своё.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
private void Query(string query)
        {
            //Метод для выполнения всех SQL-запросов
            // создаем объект OleDbCommand для выполнения запроса к БД MS Access
            OleDbCommand command = new OleDbCommand(query, myConnection);
 
            // выполняем запрос к MS Access
            command.ExecuteNonQuery();
        }
 
if (dataGridView4.CurrentRow == null)
            {
                MessageBox.Show("Выберите ячейку для удаления", "Неа, так не пойдёт!");
            }
            else
            {
                int[] SelIt = new int[dataGridView4.RowCount];//массив для выделенных строк
 
                if (dataGridView4.SelectedRows.Count > 1)//выделено ли больше одной записи? 
                {
                    for (int i = 0; i < dataGridView4.RowCount; i++)//перебор dataGrid
                    {
                        if (dataGridView4.Rows[i].Selected)//проверяем, выделен ли элемент
                        {
                            SelIt[i] = Convert.ToInt32(dataGridView4.Rows[i].Cells[0].Value);//добавление выделенных элементов в массив                                                   
                        }
                        else 
                        {
                            SelIt[i] = 0;//неподходящие элементы получают значение 0
                        }
                    }
                    for (int j = 0; j < SelIt.Length; j++)//перебор массива выделенных элементов
                    {
                        for (int i = 0; i < dataGridView4.RowCount; i++)//перебор dataGrid
                        {
                            if (Equals(SelIt[i], Convert.ToInt32(dataGridView4.Rows[i].Cells[0].Value)))//сравнение
                            {
                               Query("DELETE * FROM [Ваша база] WHERE Код = " + SelIt[i] + "");//удаление подходящих
                            }
                        }
                    }
 
                    this.накладныеTableAdapter.Fill(this.myShopDB1DataSet.Накладные);
 
                    MessageBox.Show("Записи успешно удалены!", "Готово");
                }
                else 
                {
                    Query("DELETE * FROM [ваша база] WHERE Код = " + Convert.ToInt32(this.dataGridView4.CurrentRow.Cells[0].Value) + "");//если выбрана только одна запись, удаляем её
 
                    MessageBox.Show("Запись успешно удалена!", "Готово");
 
                    this.накладныеTableAdapter.Fill(this.myShopDB1DataSet.Накладные);
                }                                           
            }
0
 Аватар для Andrey-MSK
3353 / 2239 / 388
Регистрация: 14.08.2018
Сообщений: 7,569
Записей в блоге: 4
15.03.2021, 14:56
Цитата Сообщение от LolitaKek Посмотреть сообщение
C#
1
//Метод для выполнения всех SQL-запросов
А где ExecuteReader и ExecuteScalar?
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
16.03.2021, 10:56
LolitaKek,
Что то код у вас очень большой. Аналогично вашему выше.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (dataGridView1.CurrentRow == null)
            {
                MessageBox.Show("Выберите ячейку для удаления", "Неа, так не пойдёт!");
            }
            else
            {
                for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
                {
                    var id = dataGridView1.SelectedRows[i].Cells[0].Value;
                    Query($"DELETE * FROM [Ваша база] WHERE Код ={id}");
 
                }
                if (dataGridView1.SelectedRows.Count > 1)
                {
                    MessageBox.Show("Записи успешно удалены!", "Готово");
                }
                else
                {
                    MessageBox.Show("Запись успешно удалена!", "Готово");
                }
             this.накладныеTableAdapter.Fill(this.myShopDB1DataSet.Накладные);
            }
1
0 / 0 / 0
Регистрация: 27.12.2019
Сообщений: 2
18.03.2021, 12:45
Ну можно и так. Код просто старый. Откопал в одном из проектов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2021, 12:45
Помогаю со студенческими работами здесь

Удаление и добавление записи Access
Добрый день. Как взять значение полей из EditA? Если в кавычках писать сразу значения то добавляет. procedure...

Удаление записи (строчки) из таблицы Access
Как обойти сообщение об удалении записи из таблицы в Access? И возможно ли удалить запись не открывая таблицу?

ListView: добавление записи, выбор записи, удаление записи
на форме есть три текст бокса: textbox1(имя), textbox2(фамилия), textbox3(отчество), textbox4(выбранное) кнопка Button1(добавить),...

Удаление загрузочной записи о Windows8.1 и удаление самой Windows 8.1 при наличии двух ОС
На ноутбуке на разделе C Windows XP ,установил Windows 8.1 на логический раздел E.Теперь хочу удалить 8.1 и установить туда 7.В БИОСе...

Добавление и удаление записи, поиск записи с максимальной зарплатой, сортировка по алфавиту
Помогите, пожалуйста!:help: Очень нужно сделать до 26!(а если не сложно, то еще и с комментариями :-Добавлено через 27 минут если вы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru