Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > В чем ошибка?


Автор: FRC 12.11.2006, 11:14
Доброго все времени суток, спасибо что уделили внимание моей проблемке. Прозьба укажите мне на мою ошибку! Если чего не понятно поясню более подробно.
Код

Private Sub Command3_Click()
Dim cmd As String, sql As String, cn As ADODB.Connection
Dim rs As ADODB.Recordset
'создание запроса
sql = "SELECT * FROM TAB WHERE (NomerIP = " & txtDel.Text & ")"
'создать сроку подключения
cmd = "Provider = microsoft.jet.OLEDB.4.0; Data Source=C:\BAZA.mdb"
'установка соединеия с базой
Set cn = New ADODB.Connection
cn.ConnectionString = cmd
cn.Open 'открыть набор записей
Set rs = New ADODB.Recordset
rs.Open sql, cn, adOpenDynamic, adLockOptimistic
If rs.RecordCount > 0 Then
rs.Delete ' процедура удаления
MsgBox "Запись из базы данных удалена!", vbInformation + vbOKOnly, "Удаление выполнено!"
End If
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub


Автор: boevik 12.11.2006, 11:30
какая ошибка выскакивает?

Добавлено @ 11:34 
Одна из ошибок, "прозьба" пишется через с "просьба".
A если серьезно, то NomerIP скорее свего в таблице определен как text, а поэтому запрос состовляется с апострофом.
Код

sql = "SELECT * FROM TAB WHERE (NomerIP = '" & txtDel.Text & "')"

Автор: FRC 12.11.2006, 12:14
Увожаемый boevik, благодарю за посказку! Если я ставлю апостроф, программа выдает ошибку "Несоответствие типов данных в выражении условия отбора" может я чего в коде не то написал или не написал???

Автор: Voldemar2004 12.11.2006, 12:34
Код
sql = "SELECT * FROM TAB WHERE NomerIP = " & txtDel.Text

FRC, если у тебя поле NomerIP - числовое - то лучше так.

Автор: boevik 12.11.2006, 13:00
FRC, давай поподробнее, тип поля NomerIP? Какая ошибка выскакивает в первом коде? и т.д., чем больше данных, тем быстрее поможем.

Автор: FRC 12.11.2006, 13:32
boevik, На форме находится MSHFlexGrid1 отображающая данные из Базы данных BAZA.mdb  в базе есть таблица TAB в которой содержить несколько столбцов один из них называется NomerIP (поле числовое) в него вносятся целые числа например: 358934. Также на форме нахдится кнопка "Удалить" и TextBox "txtDel" юзер вводит в TextBox  определенный номер и нажимает кнопку после чего запись удаляется из БД и также она изчезает из MSHFlexGrid1
В первом коде ошибки ни какой не происходит, просто кнопка не реагирует ни как просто нажимается.
Во втором случае с апострофом 
Цитата
 программа выдает ошибку "Несоответствие типов данных в выражении условия отбора"

Мне кажется, что я что-то в запросе sql напутал надо чтобы вся строка удалялась содержащая число введенное в TextBox
____________________________
|358934|Иванов И.И.|Москва|муж| - должна удалиться эта строка после нажатия на кнопку
|23345|Иванова И.С.|Смоленск|жен|

Voldemar2004, нет никакой реакции просто кнопка нажимается. smile 
Это вроде бы все.

Автор: boevik 12.11.2006, 13:44
Цитата(FRC @  12.11.2006,  11:14 Найти цитируемый пост)
sql = "SELECT * FROM TAB WHERE (NomerIP = " & txtDel.Text & ")"

Так ты делаешь select, а не удаление.

Следующая команда выполнет удаление.
Код

sql = "DELETE FROM TAB WHERE (NomerIP = " & txtDel.Text & ")"



В общем виде лучше записать так:
Код

Private Sub Command3_Click()
Dim cmd As String, sql As String, cn As ADODB.Connection
'создание запроса
sql = "DELETE FROM TAB WHERE (NomerIP = " & txtDel.Text & ")"
'создать сроку подключения
cmd = "Provider = microsoft.jet.OLEDB.4.0; Data Source=C:\BAZA.mdb"
'установка соединеия с базой
Set cn = New ADODB.Connection
cn.Open cmd
cn.Execute sql 'удаление записи
MsgBox "Запись из базы данных удалена!", vbInformation + vbOKOnly, "Удаление выполнено!"
End If
cn.Close
Set cn = Nothing
End Sub

Автор: FRC 12.11.2006, 14:39
boevik, Все работает нормально, только не обновляет MSHFlexGrid1 после нажатяи кнопки! Как висела там запись так и висит, тлько после повторного запуска программы она исчезает! Чего дописать надо чтобы сразу исчезала?

Автор: Voldemar2004 12.11.2006, 15:28
Свойство Refresh.

Автор: FRC 12.11.2006, 23:27
Voldemar2004, Свойство Refresh бузусловно помогло, но возникла другая проблема, при обновлении пропадает раскраска грида под зебру, происходит это следующим образом:
Код

Private Sub Form_Load()
'Цвет "Зебра"
For i = 1 To MSHFlexGrid1.Rows - 1 Step 2
   MSHFlexGrid1.Row = i
   For j = 0 To MSHFlexGrid1.Cols - 1
      MSHFlexGrid1.Col = j
      MSHFlexGrid1.CellBackColor = RGB(107, 250, 192) 'цвет фона
      MSHFlexGrid1.CellForeColor = RGB(0, 0, 0) 'цвет шрифта
   Next
Next
End Sub

Куда лутьше поставить Adodc1.Refresh???

Автор: boevik 13.11.2006, 00:19
Раскраску вынеси в отдельную процедуру и вызывай её когда требуется (после refresh, к примеру)

Автор: FRC 13.11.2006, 19:09
boevik, Voldemar2004, ОГРОМНОЕ спасибо!!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)