Поиск в базах данных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Winitar
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 06.07.2006 (Чт) 20:45
Откуда: Астана

Поиск в базах данных

Сообщение Winitar » 23.07.2007 (Пн) 7:03

Блин, запутался в поиске, как правильно искать запись в базе данных по заданному критерию? Я мучался, мучался, и написал вот эту ерунду, длинно очень, но работает! :?

Код: Выделить всё
Private Sub modSer_Click()
Dim sl As String, ks As Integer, i1 As Integer, i2 As Integer, kn As Long, kss As Boolean
Carb.Recordset.MoveFirst
RSer.Clear

9 For i1 = 1 To Len(txtName.Text) 'определяем количество слов (true - 2, false - 1)
     If Mid(txtName.Text, i1, 1) = " " Then
        kss = True
        GoTo 10
     Else
        kss = False
        If Carb.Recordset.EOF = True Then
           GoTo 10
        End If
     End If
Next i1



 
10  If kss = False Then 'поиск записей с одним словом
 
If Carb.Recordset.EOF = False Then
20   If txtName.Text = txtSer.Text Then
    Exit Sub
     Else
     Carb.Recordset.MoveNext
         
       On Error GoTo 500
     GoTo 9
     End If
End If
 
ElseIf kss = True Then 'поиск записей с двумя словами

110 ks = 0
If Carb.Recordset.EOF = False Then
For i2 = 1 To Len(txtName.Text)
  If Mid(txtName.Text, i2, 1) = " " Then
   ks = i2 - 1
   GoTo 220
  End If
Next i2

220 sl = Mid(txtName.Text, 1, ks)
   If sl = txtSer.Text Then
   RSer.AddItem txtName.Text
   kn = kn + 1
     
    Carb.Recordset.MoveNext
GoTo 9
     Else
     Carb.Recordset.MoveNext

     On Error GoTo 500
     GoTo 9
     End If
ElseIf Carb.Recordset.EOF = True Then
500 MsgBox "Поиск завершен. Найдено записей - " & kn
End If
End If

End Sub


Ну как, разобрался кто нибудь?


А как это делать проще? Я читал об этом, но там что то было напутано и ни чего не получилось... :roll:

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 23.07.2007 (Пн) 7:12

Проще сделать SQL запросом.

Код: Выделить всё
SELECT * FROM TABLE WHERE имя_твоего_поля =, <>, like и т.п.

Ser-Robotiaga
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 19.01.2007 (Пт) 0:45

Сообщение Ser-Robotiaga » 29.07.2007 (Вс) 18:22

А как твой код будет работать для большой БД?
По-моему в методах Find для объекта Recordset нет ничего сложного.Я вот только не понял зачем тебе поиск двумя словами. Насколько я мог разобраться они идут одно за другим.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.07.2007 (Вс) 20:13

Метод Find для объекта Recordset изначально и во всём хуже запроса с WHERE.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot и гости: 36

    TopList