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

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

20.12.2014, 11:55. Показов 4852. Ответов 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
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 12:59
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
        Dim rs As New ADODB.Recordset
        Dim a,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)
        rs.MoveLast
        a = rs.RecordCount
        rs.MoveFirst
        for i = 1 To a
        if rs.Fields("Da_te").Value < rs.Fields("Da_te2").Value Then 
        rs.Delete
        a = a - 1
        Else
        End If
        rs.MoveNext
        Next i
    End Sub
Если в условном операторе будет ругаться на условие, то сначала ввести две переменные для rs.Fields("Da_te").Value и rs.Fields("Da_te2").Value, а потом задать условие через них.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 17:20  [ТС]
Большое спасибо за ответ, но в выражении
VB.NET
1
 if rs.Fields("Da_te").Value < rs.Fields("Da_te2").Value Then
, данные в поле Da_te должны быть меньше, чем текущая дата, а не данные в поле Da_te2.
И, даже в БД Da_te < Da_te2 из БД ничего не удаляется и программа ничего не пишет об какой либо ошибке.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 17:45
Почему-то подумал, что в Da_te2 как раз текущее время и было. Тогда нужно заменить правую часть неравенства на DateTime.Today (по-моему так текущая дата задается). А дальше я бы натыкал MsgBoxы после каждой строки кода, начиная с 5ой или 6ой и проверил что на выходе. То есть: соответствует ли число "а" количеству записей, в то ли поле таблицы вы попадаете при соединении, попадаете ли на первую и последнюю запись в этом поле, и в цикле тоже: работает ли условие if. По опыту - это самый быстрый способ обнаружения "косяков".
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
21.12.2014, 17:47
Как-то так?
VB.NET
1
if rs.Fields("Da_te").Value < Date.Now Then
1
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 19:05  [ТС]
Замабувараев, Вставил - ничего не удаляется.

Добавлено через 42 минуты
chumich, Что мне надо написать в MsgBox ?
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 19:53
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
Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
        Dim rs As New ADODB.Recordset
        Dim a,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
        'Проверяешь, есть ли соединение
        msg = MsgBox ("Соединение установлено")
        Dim dt As ... 'Твой формат даты
        dt = Date.Now
        'Проверяешь правильно ли выдается текущая дата
        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)
        for i = 1 To a
        if rs.Fields("Da_te").Value < Date.Now Then
        'Проверяешь попадаешь ли ты хотя бы раз внутрь условия
        msg = MsgBox ("Есть контакт")
        rs.Delete
        a = a - 1
        Else
        End If
        rs.MoveNext
'Проверяешь совпадает ли выдаваемый результат со следующей после найденной в условии записью в нужной колонке, то есть переместился ли ты
        msg = MsgBox (dt)
        Next i
    End Sub
Только я не помню точно как правильно сообщение задавать в VB, привык уже к C#, хотя по-моему правильно написал. И не помню как оно реагирует на другие, кроме текстового форматы. В C# приходится конвертировать всё в текстовый, возможно и здесь нужно. Если да, то тебе программа сразу выдаст несоответствие формата. Тогда перед каждым сообщением вставь Convert. Когда запустишь программу, следи за сообщениями - то ли выдается. Если где-то не появится, значит там и косяк.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 20:19  [ТС]
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
Private Sub Command6_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command6.Click
        Dim rs As New ADODB.Recordset
        Dim a, 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 [U]msg[/U]
        'Проверяешь, есть ли соединение
        msg = MsgBox("Соединение установлено")
        Dim dt As ... 'Твой формат даты
        [U]dt[/U] = Date.Now
        'Проверяешь правильно ли выдается текущая дата
        msg = MsgBox([U]dt[/U])
        rs.MoveLast()
        dt = rs.Fields("Da_te").Value
        'Проверяешь совпадает ли выдаваемый результат с последней записью в нужной колонке
        msg = MsgBox([U]dt[/U])
        a = rs.RecordCount
        'Проверяешь совпадает ли число записей с количеством их в таблице
        msg = MsgBox(a)
        rs.MoveFirst()
        'Проверяешь совпадает ли выдаваемый результат с первой записью в нужной колонке
        msg = MsgBox([U]dt[/U])
        For i = 1 To a
            If rs.Fields("Da_te").Value < Date.Now Then
                'Проверяешь попадаешь ли ты хотя бы раз внутрь условия
                msg = MsgBox("Есть контакт")
                rs.Delete()
                a = a - 1
            Else
            End If
            rs.MoveNext()
            'Проверяешь совпадает ли выдаваемый результат со следующей после найденной в условии записью в нужной колонке, то есть переместился ли ты
            msg = MsgBox(dt)
        Next i
    End Sub
Я обозначил то, что подчеркнуто волнистой линией.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 20:45
Попробуй
VB.NET
1
Dim msg As MsgBoxResult
Там где
VB.NET
1
Dim dt As ...
нужно вместо ... поставить формат твоей даты, проверить еще раз, если dt в сообщениях опять подчеркнется, значит нужно конвертировать в текстовый формат.

Добавлено через 12 минут
Да, подзабыл я VB. Убери msg вообще, то есть оставь сообщения просто в виде MsgBox(переменная). И в Date.Now получается вывод дата + время, надо его как-то отформатировать. У тебя в каком виде дата в БД? Если в виде 12.12.2014 то нужно поставить Date.Now.Date
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 20:46  [ТС]
chumich,
Дата выглядит так: например 15.12.2014
Формат даты я написал dd.mm.yyyy это правильно ?
Нужно ли этот формат взять в скобки или как ?
Если беру в скобки, подчеркивает первую скобку и все dt, если не беру в скобку подчеркивает весь формат даты
dt не подчеркивает.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 20:55
Значит в 9 строке кода
VB.NET
1
Dim dt As Date
а в 10ой
VB.NET
1
dt = Date.Now.Date
пробуй, мне кажется должно заработать.

Добавлено через 4 минуты
И еще в 24 строке поправь:
VB.NET
1
If rs.Fields("Da_te").Value < Date.Now.Date Then
0
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
21.12.2014, 20:58
Цитата Сообщение от chumich Посмотреть сообщение
Date.Now.Date
Ух, какой монстр! Проще же:
VB.NET
1
Now.ToShortDateString
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 21:24  [ТС]
chumich,
Сейчас все ошибки исчезли, но удаления записи не произошло.
При нажатии на кнопку удаления появляется
MsgBox: Соединение установлено , ОК
MsgBox: 21.12.2014, ОК
MsgBox: 15.12.2014, ОК
MsgBox: -1 , ОК
MsgBox: 15.12.2014 , ОК
Не появился MsgBox("Есть контакт") и запись в БД не удалена.

Добавлено через 6 минут
chumich,
У меня в БД только одна дата меньше сегодняшней.

Добавлено через 1 минуту
Nachrichter,
Спасибо за Ваш ответ, я изменил - результат тот же.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 21:33
vasiliw8,
Естественно, если а = -1. Странно почему тогда на цикле ошибку не выдает. Давай тупо проверим: закомментируй с 13 по 19 строчки в коде, а вместо "а" в цикле забей реальное число записей в твоей БД. И запусти. Посмотрим что получится.
Nachrichter,
да, наверно - давно в VB не практиковал, забыл всё.

Добавлено через 4 минуты
vasiliw8,
интересно, если у тебя только одна дата меньше сегодняшней, то почему тебе два сообщения 15.12.2014 вылезло - это же должны были быть первая и последняя запись? А это уже две даты.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 22:10  [ТС]
chumich,
Я закомментировал с 13 по 19 строчки, а = 4 (столько записей для пробы, одна запись меньше сегодняшней даты)
При нажатии на кнопку удаления появляется
MsgBox: Соединение установлено , ОК
MsgBox: 21.12.2014, ОК
MsgBox: 21.12.2014, ОК
MsgBox: 21.12.2014, ОК
MsgBox: 21.12.2014, ОК
MsgBox: 21.12.2014, ОК
MsgBox: 21.12.2014, ОК
MsgBox: Есть контакт, ОК
MsgBox: 21.12.2014, ОК
Произошло удаление.
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 22:52
Значит в принципе всё получилось. Осталось решить проблему как определить число записей без RecordCount, потому что я посмотрел в интернете - оказывается в ADODB с ним часто такое случается, что -1 выдает, и толковых решений я не увидел. Если твоя БД от этого не пострадает, я бы посоветовал добавить столбец "№ п/п" и брать последнее значение оттуда. Это самый простой вариант. Если тебе так нельзя, то надо что-то придумывать.

Добавлено через 23 минуты
Есть одна идея как обойтись без столбца. Можно сделать примитивный счетчик записей:
VB.NET
1
2
3
4
5
6
7
8
Dim cht As Integer
scht = 1
rs.MoveFirst
Do Until rs.EOF
    rs.MoveNext ()
    scht = scht+1
Loop
rs.MoveFirst
В общем, убираешь из последнего рабочего кода всё от rs.Open до цикла. Вставляешь счетчик сразу после rs.Open, в цикле везде меняешь "а" на "scht". Сообщение перед "Next i" тоже убери. Добавь в БД пару записей для удаления и проверь работу программы.

Добавлено через 2 минуты
Да, еще возможно после EOF нужны ().
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 22:52  [ТС]
chumich,
У меня нет проблем изменить БД, только, что делать с полем Код в формате счетчик, его можно удалить ?
И в каком формате создать поле "№ п/п" ?
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 23:04
А у тебя поле Код есть? Тогда нет проблем. Из него и можно взять значение. Смотри сам как тебе больше нравится: можешь попробовать тот вариант, который я только что написал со счетчиком. Можно использовать поле Код. Тогда опять же убираешь всё между rs.Open и циклом. И вставляешь:
VB.NET
1
2
3
4
Dim scht As Integer        
        rs.MoveLast()
        scht = rs.Fields("Код").Value    ' или как оно там у тебя называется не знаю
        rs.MoveFirst()
опять же заменяешь в цикле а на scht и т. д. Попробуй оба, если не лень.

Добавлено через 3 минуты
В варианте со счетчиком в Dim естественно scht, а не cht.
0
38 / 38 / 16
Регистрация: 04.03.2014
Сообщений: 249
21.12.2014, 23:07  [ТС]
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
Private Sub Command6_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command6.Click
        Dim rs As New ADODB.Recordset
        Dim scht, 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 cht As Integer
        scht = 1
        rs.MoveFirst()
        Do Until rs.EOF
            rs.MoveNext()
            scht = scht + 1
        Loop
        rs.MoveFirst()
        'Dim msg As MsgBoxResult
 
 
        'Проверяешь, есть ли соединение
        'msg = 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
        'a = 5
        'Проверяешь совпадает ли число записей с количеством их в таблице
        'msg = MsgBox(a)
        'rs.MoveFirst()
        'Проверяешь совпадает ли выдаваемый результат с первой записью в нужной колонке
        'msg = MsgBox(dt)
        For i = 1 To scht
            'If rs.Fields("Da_te").Value < Date.Now Then
            If rs.Fields("Da_te").Value < Date.Now.Date Then
 
                'Проверяешь попадаешь ли ты хотя бы раз внутрь условия
                'msg = MsgBox("Есть контакт")
                rs.Delete()
                scht = scht - 1
            Else
            End If
            rs.MoveNext()
            'Проверяешь совпадает ли выдаваемый результат со следующей после найденной в условии записью в нужной колонке, то есть переместился ли ты
            'msg = MsgBox(dt)
        Next i
    End Sub
И ругается на
VB.NET
1
If rs.Fields("Da_te").Value < Date.Now.Date Then
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
21.12.2014, 23:16
Странно, первый раз не ругался, а теперь ругается? Ты вроде там ничего не менял. Ну, попробуй Now.ToShortDateString
вместо Date.Now.Date.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2014, 23:16
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен 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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru