Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/22: Рейтинг темы: голосов - 22, средняя оценка - 4.68
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249

Удалить запись из БД

20.12.2014, 11:55. Показов 5080. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Удалить запись из БД, если дата в поле Da_te, меньше, чем текущая.
Вот код для добавления записей
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
        Dim rst As New ADODB.Recordset
        rst = New ADODB.Recordset
        rst.Open("Event_tbl", "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\User\Desktop\Nap5_Add\Event_db.accdb;Persist Security Info=False;", ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)
        rst.AddNew()
        rst.Fields("Da_te").Value = CDate(Text2.Text)
        rst.Fields("Event").Value = Text1.Text
        rst.Fields("Ti_me").Value = Text3.Text
        rst.Fields("Enterprise").Value = Text4.Text
        rst.Fields("Phone").Value = Text5.Text
        rst.Fields("Location").Value = Text6.Text
        rst.Fields("Da_te2").Value = CDate(Text7.Text)
        rst.Update()
    End Sub
Я хочу добавить кнопку, при нажатии которой будет удаляться необходимая запись в зависимости от даты
в поле Da_te.
Если не трудно, прошу добавить код на удаление в мой код.
Заранее благодарен всем, кто найдет время ответить на мой вопрос.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2014, 11:55
Ответы с готовыми решениями:

Четыре кнопки на форме: добавить запись, удалить запись, закрыть, найти запись
Private Sub КнопкаДобавитьЗапись_Click() On Error GoTo Err_КнопкаДобавитьЗапись_Click DoCmd.GoToRecord , , acNewRec ...

Поменять любую запись местами с последней и удалить последнюю запись.
Помогите пожалуйста! Мне для программы, которая использует records (записи), нужно написать процедуру, которая меняет любую запись...

Составить программу с помощью которой можно добавить запись, удалить запись и распечатать дешевое издание.
program _file_LB7_Zeleniuk; type zurnal=record name:string; tiraz:integer; vartist:integer; end; var f:file of zurnal; ...

52
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 23:23  [ТС]
Студворк — интернет-сервис помощи студентам
chumich,https://www.cyberforum.ru/atta... 1419193414
Миниатюры
Удалить запись из БД  
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 23:27  [ТС]
То же самое.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 23:28
Вполне возможно, что проблема и не в этой строке. Поставь MsgBox(scht) после Loop - проверь сколько записей он считает: если на одну больше, то возможно причина в этом.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 23:31  [ТС]
Может быть я что то лишнее закомментировал ?
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 23:32
Проверь scht.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 23:37  [ТС]
chumich,
При 6 записях MsgBox(scht) показывает 61, но 2 записи попадающие под критерии он удаляет.
И та же ошибка появляется и программа зависает.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 23:48
61? Это круто. Скорее всего из-за этого и ошибка. Цикл должен дойти до последней записи и остановиться. Откуда же такая цифра? Попробуй заменить Do Until rs.EOF на Do While Not rs.EOF и проверь еще раз scht.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 23:57  [ТС]
chumich,
То же самое.
Что значит "Проверь scht" ?
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
22.12.2014, 00:07
Проверь scht это значит какое число выдает сообщение . Я так понимаю, что опять 61? Тогда есть два пути: плюнуть на этот вариант и попробовать второй (через поле Код). Или вставить еще один MsgBox (scht) перед Loop. И проверить что он будет выдавать. Если вставишь MsgBox, он должен выдать по очереди: 2, 3 и так далее до значения твоего количества записей. Если будет выдавать дальше, то останавливай программу - значит проблема в EOF.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
22.12.2014, 11:59  [ТС]
chumich,
MsgBox (scht) перед Loop, выдает 66, 67, 68, 69, 70 и запись удаляется.
После введения новой записи:67, 68, 69, 70, 71 и запись удаляется. Выскакивает ошибка, которую я прислал на картинке.
В БД всего одна запись с датой меньше текущей.
Что можно сделать еще для корректной работы ?
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
22.12.2014, 20:55
Лучший ответ Сообщение было отмечено vasiliw8 как решение

Решение

Такое ощущение, что не очищается рекордсет. Поскольку каждый раз количество записей увеличивается. В конце кода, перед End Sub надо вставить rs.Close () и еще я не знаю как это в ADODB делается, но в DAO есть такая команда Set rs = Nothing. Здесь Set по-моему не работает, а как по-другому сделать тоже самое не знаю. В любом случае вставь rs.Close () и проверь, что получится. Если очистится - хорошо, если число записей перестанет увеличиваться - тоже неплохо, останется найти как очистить.

Добавлено через 57 минут
Кстати, и в ADODB похоже есть rs = Nothing. Вставь и его после rs.Close ().
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
22.12.2014, 22:18  [ТС]
Все MsgBoxы закомментированы, за исключением MsgBox(scht) после Loop. И он показывает всегда на одну запись больше. Потом выскакивает сообщение об ошибке (вчерашняя картинка в 22:23) и запись или записи удаляются из БД. Т.Е. если бы не было этой ошибки все работает хорошо. Сейчас программа выглядит так:
VB.NET
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
56
57
58
Private Sub Command6_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command6.Click
        Dim rs As New ADODB.Recordset
        Dim i As Integer
        rs = New ADODB.Recordset
        rs.Open("Event_tbl", "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\User\Desktop\Nap5_Add\Event_db.accdb;Persist Security Info=False;", ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)
        'Dim msg As MsgBoxResult
        'Проверяешь, есть ли соединение
        'msg = MsgBox("Соединение установлено")
        'MsgBox("Соединение установлено")
        Dim dt As Date
        'Твой формат даты
        dt = Date.Now.Date
        'Проверяешь правильно ли выдается текущая дата
        'msg = MsgBox(dt)
        'rs.MoveLast()
        'dt = rs.Fields("Da_te").Value
        'Проверяешь совпадает ли выдаваемый результат с последней записью в нужной колонке
        'msg = MsgBox(dt)
        'a = rs.RecordCount
        'Проверяешь совпадает ли число записей с количеством их в таблице
        'msg = MsgBox(a)
        'rs.MoveFirst()
        'Проверяешь совпадает ли выдаваемый результат с первой записью в нужной колонке
        'msg = MsgBox(dt)
        ''Dim scht As Integer
        ''rs.MoveLast()
        ''scht = rs.Fields("Код").Value    ' или как оно там у тебя называется не знаю
        ''rs.MoveFirst()
        Dim scht As Integer
        scht = 1
        rs.MoveFirst()
        Do Until rs.EOF
            rs.MoveNext()
            scht = scht + 1
        Loop
        MsgBox(scht)
        rs.MoveFirst()
        For i = 1 To scht
            If rs.Fields("Da_te").Value < Date.Now.Date Then
 
                'Проверяешь попадаешь ли ты хотя бы раз внутрь условия
                ' msg = MsgBox("Есть контакт")
                rs.Delete()
                'scht = 4
            Else
            End If
            rs.MoveNext()
            'Проверяешь совпадает ли выдаваемый результат со следующей после найденной в условии записью в нужной колонке, то есть переместился ли ты
            'msg = MsgBox(dt)
        Next i
 
        rs.Close()
        rs = Nothing
    End Sub
 
 
 
End Class
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
22.12.2014, 22:24
На одну? Было вроде на 61? Тогда просто сделай вначале scht = 0, а не 1. И тогда всё должно получиться.
1
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
22.12.2014, 22:27  [ТС]
Все, я нашел ошибку: в строчке 30 было записано scht = 1, я изменил на scht = 0, теперь показывает правильное количество записей и ошибка не выскакивает, записи удаляются.
chumich огромное спасибо Вам за терпение и помощь.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
22.12.2014, 22:32
Не за что . Проверь обязательно работу в случае двух подряд записей с меньшей датой (то есть тех, которые должны удалиться). Программа может проскочить вторую. Если проскочит, напиши, нужно будет немного подправить код.
1
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
24.12.2014, 17:17  [ТС]
Спасибо, удаляет и одну и несколько записей.

Добавлено через 23 часа 12 минут
chumich,
Вот так сейчас выглядит код на вставку и на удаление записей в поля БД.
Я бы хотел установить какой либо грид, чтобы видеть изменения в БД, если возможно подскажите наглядно, как это сделать ?
VB.NET
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Option Strict Off
Option Explicit On
Friend Class Form1
    Inherits System.Windows.Forms.Form
    Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
        Dim rst As New ADODB.Recordset
        rst = New ADODB.Recordset
        rst.Open("Event_tbl", "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\User\Desktop\Nap5_Add\Event_db.accdb;Persist Security Info=False;", ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)
        rst.AddNew()
        rst.Fields("Da_te").Value = CDate(Text2.Text)
        rst.Fields("Event").Value = Text1.Text
        rst.Fields("Ti_me").Value = Text3.Text
        rst.Fields("Enterprise").Value = Text4.Text
        rst.Fields("Phone").Value = Text5.Text
        rst.Fields("Location").Value = Text6.Text
        rst.Fields("Da_te2").Value = CDate(Text7.Text)
        rst.Update()
    End Sub
    
    Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
        Text1.Text = ""
        Text2.Text = ""
        Text3.Text = ""
        Text4.Text = ""
        Text5.Text = ""
        Text6.Text = ""
        Text7.Text = ""
    End Sub
 
    Private Sub Command4_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command4.Click
        Text7.Text = Text2.Text
    End Sub
    
    Private Sub List1_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles List1.SelectedIndexChanged
        Text1.Text = ""
        Text1.Text = List1.Text
        Text2.Focus()
    End Sub
 
    Private Sub List2_SelectedIndexChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles List2.SelectedIndexChanged
        Text4.Text = ""
        Text4.Text = List2.Text
        Text5.Focus()
    End Sub
 
    Private Sub MonthCalendar1_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged
        Text2.Text = MonthCalendar1.SelectionStart
 
    End Sub
 
    Private Sub Command6_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command6.Click
        Dim rs As New ADODB.Recordset
        Dim i As Integer
        rs = New ADODB.Recordset
        rs.Open("Event_tbl", "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\User\Desktop\Nap5_Add\Event_db.accdb;Persist Security Info=False;", ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockPessimistic)
        
        Dim dt As Date
        'Твой формат даты
        dt = Date.Now.Date
        
        Dim scht As Integer
        scht = 0
        rs.MoveFirst()
        Do Until rs.EOF
            rs.MoveNext()
            scht = scht + 1
        Loop
 
        rs.MoveFirst()
        For i = 1 To scht
            If rs.Fields("Da_te").Value < Date.Now.Date Then
                rs.Delete()
            Else
            End If
            rs.MoveNext()
            'Проверяешь совпадает ли выдаваемый результат со следующей после найденной в условии записью в нужной колонке, то есть переместился ли ты
 
        Next i
        rs.Close()
        rs = Nothing
    End Sub
 
 
 
End Class
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
25.12.2014, 21:10
В каком смысле "наглядно"? Последовательность действий очень проста:
  • DataGridView перетаскивается на форму.
  • Обычно, сразу вылезает окошко для привязки к источнику данных, если нет, то в правом верхнем углу грида есть стрелочка, при нажатии на которую появляется это окошко.
  • В окошке последовательно выполняются предлагаемые операции: выбор источника данных, создание подключения, привязка грида к конкретным полям конкретной таблицы.
Там, в принципе, всё очень интуитивно понятно и элементарно. Попробуйте, если что-нибудь не получится, пишите - постараюсь тогда как-нибудь наглядней ответить .
P.S. Это я для VS2012 написал.
1
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
25.12.2014, 22:15  [ТС]
Я пользуюсь VS2008.
Я установил DataGridView1 на форму, через его свойство DataSourse подключил к БД и при запуске программы он показывает мне мою БД, но при добавлении новых данных эти данные не видны даже при перезагрузке программы.
Я использую следующий код:
VB.NET
1
2
3
4
5
6
7
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      
        Me.Event_tblTableAdapter.Fill(Me.Event_dbDataSet.Event_tbl)
        Me.Event_tblTableAdapter.Update(Me.Event_dbDataSet.Event_tbl)
        DataGridView1.AutoSize = True
        DataGridView1.Update()
    End Sub
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
26.12.2014, 20:57
Ну, то что сразу не показывает - это нормально, а вот что при перезагрузке не видит новых данных - это уже странно. Сегодня у меня не получится проверить код - переустанавливаю VS, но завтра к вечеру посмотрю. Пока только могу посоветовать еще раз проверить подключение - может где-то галочка не поставлена.

Добавлено через 21 час 30 минут
Посмотри проект, специально в 2008 сделал. Там всё обновляется, хочешь - сразу, хочешь - при перезагрузке, хочешь - через кнопку . Только путь к базе данных в коде не забудь переписать.
связь с БД через DataGrid.rar
1
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
27.12.2014, 10:34  [ТС]
Пытаюсь запустить программу, но пишет ошибку:

"Поставщик "Microsoft.Jet.OLEDB.4.0" не зарегистрирован на локальном компьютере."
Я почитал, что на Access 2010 и Windows 64 бит он не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2014, 10:34

Не могу удалить свою учетную запись. Пункта "переключиться на локальную учетную запись" нет
Добрый день! На свое рабочем компьютере мне нужно было загрузить приложение из маркета, и для этого я зашел в свою учетную запись. После...

Удалить запись из БД
Добрый день! Подскажите как мне сделать так что бы после занесении данных в БД они удалялись через 2 часа. Я слышал что cron это может...

Удалить запись
Доброго времени суток. Пишу блог (уже не раз писал об этом) и наткнулся на проблему. Вообщем, у меня в блоге, если у тебя стоит сессия root...

Удалить запись
Здравствуйте. Реализую удаление записей из таблицы.У меня есть две таблицы client и product. Сначала помечал на удаление и удалял по...

Не получается удалить запись
Пожалуйста помогите: Есть файл1, в нём отображается таблица, для удаления записи использую chekbox, нажимаем на кнопку и запускается...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru