Удаление строки из Access

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Удаление строки из Access

Сообщение Чудик » 08.02.2013 (Пт) 13:24

Уважаемые друзья! Объясните мне, по какой причине у меня ошибка? Не пойму.
Вложения
Безымянный.jpg
Безымянный.jpg (102.74 Кб) Просмотров: 2299
Век живи - век учись!
www.detal-plast.narod.ru

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.02.2013 (Пт) 14:01

Потому что не надо так добавлять параметры.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Re: Удаление строки из Access

Сообщение Чудик » 08.02.2013 (Пт) 14:07

Хорошо, не буду. Только, как же тогда достичь требуемого результата?
Век живи - век учись!
www.detal-plast.narod.ru

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.02.2013 (Пт) 16:00

Писать правильно. А ещё, думать перед тем как писать. И дебажить, если не работает.

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Re: Удаление строки из Access

Сообщение Чудик » 09.02.2013 (Сб) 2:29

В принципе, подправил строку:

Dim y As New OleDb.OleDbCommand("DELETE * FROM [Зарплата] WHERE [Сотрудник] = " & " '" & Me.ComboBox1.Text & "' AND [Дата]= " & d & " ", r)

и все заработало. Иными словами, не заметил, что пропустил * для выборки.
Как писАть правильно, так и не понял. Хотя ничего криминального в моем варианте тоже не увидел. Буду благодарен, если кто-то объяснить, чем он плох.
Век живи - век учись!
www.detal-plast.narod.ru

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 09.02.2013 (Сб) 10:04

Чудик писал(а):Иными словами, не заметил, что пропустил * для выборки.

Если не ошибаюсь, звёздочка в delete не ставится...
Апосторофы добавил - поэтому и заработало.

Чудик писал(а):Хотя ничего криминального в моем варианте тоже не увидел. Буду благодарен, если кто-то объяснить, чем он плох.

Как минимум, тем что он может не работать. Во-первых, если в строке есть апостроф. Во-вторых, конкатенация с датой вообще непонятно как работает, вполне возможно, что при других региональных параметрах перестанет.
А ещё существует sql injection...
Плюс, не по формированию команды. Если запрос падает, то когда закроется соединение вообще неизвестно, лучше использовать using. Переменным лучше давать более осмысленные имена.

Чудик писал(а):Как писАть правильно, так и не понял.

Как-то так (не проверял), использую SqlConnection и SqlCommand, но думаю, OleDb тоже предоставляет подобные возможности:
Код: Выделить всё
Using Con As New SqlConnection(ConnectionString)
  Dim Cmd As New SqlCommand() With { .CommandText="delete from [Зарплата] where [Сотрудник] = @employee and [Дата] = @date", .Connection=Con}
  Cmd.Parameters.AddWithValue("@employee", Me.ComboBox1.Text)
  Cmd.Parameters.AddWithValue("@date", d)
 
  Con.Open()
  Cmd.ExecuteNonQuery()
End Using


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 87

    TopList