Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Поиск в БД Добавлено: 05.02.10 20:03  

Автор вопроса:  ηikolaŠ~rus | ICQ: 604058327 
Здрасте!
Как программно искать в БД нужные поля
Private Sub cmdFind_Click()
'у пользователя запрашивается имя а потом происходит
'поиск его в БД
Data1.Recordset.FindFirst "Author = '" _
& Trim(InputBox("Введите имя ")) & "'"
'если запись не найдена появляется следующая надпись:
If Data1.Recordset.NoMatch Then MsgBox "Имя не найдено"
End Sub

искал в инете вот тчо0то похожие нашел
вот наподобие этого(только этот код не идет,)
Помогите плиз!!
Мне надо также сделать как в коде только чтоб он шел!!

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 alexfor



Вопросов: 28
Ответов: 68
 Профиль | | #1 Добавлено: 05.02.10 20:37
Привет. БД какая?

Ответить

Номер ответа: 2
Автор ответа:
 ηikolaŠ~rus



ICQ: 604058327 

Вопросов: 50
Ответов: 287
 Профиль | | #2 Добавлено: 05.02.10 20:42
Как какая акесс 2003

Ответить

Номер ответа: 3
Автор ответа:
 alexfor



Вопросов: 28
Ответов: 68
 Профиль | | #3 Добавлено: 05.02.10 21:53
Даю пример на аксе с реализацией полного или ограниченного доступа юзера к данным (запись или чтение).
В БД нужно создать тейбл users. Имена полей. id - счетчик, name(логин) - текстовый 50, password(пароль) - текст 50, rights(права) - числовой(там данные 1-полный доступ, 0 - ограниченый), real_name() - текст 100. Т.е.:
------------------------------------------------------------
id|name|password|rights|real_name |
1 |hard |rock | 1 |Петя Васечкин |
2 |qwert|rtyuio | 0 |Жора Печкин |
------------------------------------------------------------
В проекте создать:
Форму LogIn, Text1 – это будет логин, Text2 – пароль(значение PassworChar - *), cmd1 – авторизация, вход.

Код формы:
Option Explicit
Public user_name As String
Public password As String
------------------------------------------------------------------------------------------
Private Sub Command1_Click()
On Error Resume Next
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim real_password As String

    user_name = Text1.Text ‘логин
    password = Text2.Text ‘пароль
    
    Set cn = New ADODB.Connection
    'Открытие соединения
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\base\Имя_базы.mdb;Persist Security Info=False;Jet OLEDB:Database Password=тратата"
    cn.Open

‘через АДО соединяемся с таблицей users
    Set rs = New ADODB.Recordset
    With rs
        .ActiveConnection = cn
        .CursorLocation = adUseClient
        .LockType = adLockBatchOptimistic
        .CursorType = adOpenKeyset
        .Source = "SELECT * FROM `users`;"
        .Open
        .ActiveConnection = Nothing
    End With
   ‘поиск логина
    rs.Find "name = '" & user_name & "'"
    'MsgBox rs.Fields(0).Value
    If rs.EOF Then
        MsgBox "Неправильный логин пользователя", vbCritical, "ошибка"
        Text1.Text = ""
        Text2.Text = ""
        Text1.SetFocus
    Else
        real_password = rs.Fields(2).Value ‘пароль
        rights = CInt(rs.Fields(3).Value) ‘права
        If password = real_password Then
            Select Case rights
                Case 0
                    MsgBox "Права Пользователя!" & vbCrLf & "Здравствуйте," & vbCrLf & rs.Fields(4).Value & "!", vbInformation, "Авторизация"
                   ‘тут можно прописать действия если права юзера =0 для других форм
                   With Имя_формы
                            ‘запрет добавления записей
                            cmdAdd.Enabled = false
                    End With
                   
                Case 1
                   ‘Возвращаем значение Реальной фамилии, сюда можно добавить и должность, если в БД всунуть еще одно поле и потом прикрутить в меседж еще одно поле. Повышает рейтинг разработчика, всезнающая прога однако
                              MsgBox "Права администратора!" & vbCrLf & "Здравствуйте," & vbCrLf & rs.Fields(4).Value & "!", vbInformation, "Авторизация"
                   With Имя_формы
                            ‘разрешаем добавлять записи
                            cmdAdd.Enabled = true
                    End With
            End Select
            LogIn.Hide
            frmTimer.Show
        Else
            MsgBox "Неправильный пароль!", vbCritical, "Ошибка
            Text2.Text = ""
            Text2.SetFocus
        End If
    End If
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    
End Sub

Private Sub Form_Load()
    Command1.Enabled = False
    Text1.Text = ""
    Text2.Text = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set LogIn = Nothing
End Sub

‘тоже самое поведение по Enter для мастдаевцев и продвинутых линуксоидов
Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
On Error Resume Next
If KeyCode = vbKeyReturn Then
    user_name = Text1.Text ‘логин
    password = Text2.Text ‘пароль
    
    Set cn = New ADODB.Connection
    'Открытие соединения, база закрыта паролем
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\base\Имя_базы.mdb;Persist Security Info=False;Jet OLEDB:Database Password=тратата"
    cn.Open

‘через АДО соединяемся с таблицей users
    Set rs = New ADODB.Recordset
    With rs
        .ActiveConnection = cn
        .CursorLocation = adUseClient
        .LockType = adLockBatchOptimistic
        .CursorType = adOpenKeyset
        .Source = "SELECT * FROM `users`;"
        .Open
        .ActiveConnection = Nothing
    End With
   ‘поиск логина
    rs.Find "name = '" & user_name & "'"
    'MsgBox rs.Fields(0).Value
    If rs.EOF Then
        MsgBox "Неправильный логин пользователя", vbCritical, "ошибка"
        Text1.Text = ""
        Text2.Text = ""
        Text1.SetFocus
    Else
        real_password = rs.Fields(2).Value ‘пароль
        rights = CInt(rs.Fields(3).Value) ‘права
        If password = real_password Then
            Select Case rights
                Case 0
                    MsgBox "Права Пользователя!" & vbCrLf & "Здравствуйте," & vbCrLf & rs.Fields(4).Value & "!", vbInformation, "Авторизация"
                   ‘тут можно прописать действия если права юзера =0 для других форм
                   With Имя_формы
                            ‘запрет добавления записей
                            cmdAdd.Enabled = false
                    End With
                   
                Case 1
                    MsgBox "Права администратора!" & vbCrLf & "Здравствуйте," & vbCrLf & rs.Fields(4).Value & "!", vbInformation, "Авторизация"
                   With Имя_формы
                            ‘разрешаем добавлять записи
                            cmdAdd.Enabled = true
                    End With
            End Select
            LogIn.Hide
            frmTimer.Show
        Else
            MsgBox "Неправильный пароль!", vbCritical, "Ошибка
            Text2.Text = ""
            Text2.SetFocus
        End If
    End If
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

End If
End Sub

‘Если в полях что-то есть, даем добро, енейблим главный батон
Private Sub Text1_Change()
    If Text1.Text = "" Or Text2.Text = "" Then Command1.Enabled = False Else Command1.Enabled = True
End Sub

Private Sub Text2_Change()
    If Text2.Text = "" Or Text1.Text = "" Then Command1.Enabled = False Else Command1.Enabled = True
End Sub

‘Можно повесить еще батон выход
Private Sub Command2_Click()
    End
End Sub

‘Можно повесить батон очистить поля
Private Sub Command3_Click()
    Text1.Text = ""
    Text2.Text = ""
End Sub


Ну и кроме того, во избежание косяков по правам 0 или 1 их лучше отруливать уже в конкретных формах на событие
Private Sub Form_Activate()
   'проверка прав пользователя
  If rights = 0 Then
    cmdAdd.Enabled = False
    cmdDelete.Enabled = False
  End If
End Sub

Для этого создать модуль, туда прописать:
'глобальная переменная прав пользователей
Public rights As Integer

Ну вот и все. Удачи.

Ответить

Номер ответа: 4
Автор ответа:
 alexfor



Вопросов: 28
Ответов: 68
 Профиль | | #4 Добавлено: 05.02.10 22:10
да и самое главное бросай использовать осх Data в сочетании Jet4.0 ну т.е. акс2003:), используй АДО

Ответить

Номер ответа: 5
Автор ответа:
 ηikolaŠ~rus



ICQ: 604058327 

Вопросов: 50
Ответов: 287
 Профиль | | #5 Добавлено: 06.02.10 09:26
кажись ты даже вопроса не читал!
За код спс но мне надо поиск сделать в БД, а не пароль и логин!!!!

Ответить

Номер ответа: 6
Автор ответа:
 alexfor



Вопросов: 28
Ответов: 68
 Профиль | | #6 Добавлено: 06.02.10 12:08
Это не сложно. Вобще тебе на форму работы с БД. Поиск осуществляется методом Find или FindNext. Если хочешь выбрать все записи, что связанные с конкретным именем - используй Filter
Dim search as String
search = search.Text
If search.Text <> "" Then Adodc1.Recordset.Filter = "Имя_поля like '*" & search & "*'"
Снятие фильтра - Adodc1.Recordset.Filter = adFilterNone

Ответить

Номер ответа: 7
Автор ответа:
 ηikolaŠ~rus



ICQ: 604058327 

Вопросов: 50
Ответов: 287
 Профиль | | #7 Добавлено: 06.02.10 20:56
Не кажись ты ваще не читал ВОПРОСА ,если не заметил я какрас использую FindNext

Ответить

Номер ответа: 8
Автор ответа:
 ηikolaŠ~rus



ICQ: 604058327 

Вопросов: 50
Ответов: 287
 Профиль | | #8 Добавлено: 06.02.10 20:56
Не идет твой код

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 06.02.10 21:25
Не правда. Ты какрас FindFirst используешь, а next нет

Ответить

Номер ответа: 10
Автор ответа:
 ηikolaŠ~rus



ICQ: 604058327 

Вопросов: 50
Ответов: 287
 Профиль | | #10 Добавлено: 06.02.10 21:32
FindFirst Ищет первую запись в БД
FindLast Ищет последнюю запись в БД
FindNext Ищет каждую следующую запись в БД
FindPrevious Ищет предыдущую запись в БД
я с этим знаком

Ответить

Номер ответа: 11
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #11
Добавлено: 06.02.10 21:46
никогда не работал с дазами банных, но если бы работал, то дляначала погуглил бы и почитал как это делать http://www.vb6.us/tutorials/database-access-vb6-data-control-tutorial

Ответить

Номер ответа: 12
Автор ответа:
 alexfor



Вопросов: 28
Ответов: 68
 Профиль | | #12 Добавлено: 06.02.10 22:11
Работаю c ВБ6 БД акс Jet3,Jet4,SQL и у меня все идет. Использую при этом DataEnvironment, код АДО, ADODC и у меня все идет, как по поиску так и по фильтрам.

Ответить

Номер ответа: 13
Автор ответа:
 ηikolaŠ~rus



ICQ: 604058327 

Вопросов: 50
Ответов: 287
 Профиль | | #13 Добавлено: 07.02.10 09:47
Ладно постаруюсь в инете найте
Алекс если ты спец в БД скажи плиз как сделать чтоб при переходе на след.зап или в начоло или на предыдущую запись и т.д ..... в лабеле показывалось например 1 Запись из 3 и .т.д
я меня у даты висибле фальш
я ее не использую

Ответить

Номер ответа: 14
Автор ответа:
 alexfor



Вопросов: 28
Ответов: 68
 Профиль | | #14 Добавлено: 07.02.10 10:11
За это отчечает AbsolutePosition рекордсета.
Вот то, что тебе пример лейбл и четыре батона.
Private Sub cmdFirst_Click()
  On Error GoTo GoFirstError
  Adodc_demoffer.Recordset.MoveFirst
   label = "Запись № " & CStr(Adodc_demoffer.Recordset.AbsolutePosition)
  Exit Sub
GoFirstError:
  MsgBox Err.Description
End Sub

Private Sub cmdLast_Click()
  On Error GoTo GoLastError
  Adodc_demoffer.Recordset.MoveLast
  label = "Запись № " & CStr(Adodc_demoffer.Recordset.AbsolutePosition)
  Exit Sub
GoLastError:
  MsgBox Err.Description
End Sub

Private Sub cmdNext_Click()
  On Error GoTo GoNextError
  If Not Adodc_demoffer.Recordset.EOF Then Adodc_demoffer.Recordset.MoveNext
  label = "Запись № " & CStr(Adodc_demoffer.Recordset.AbsolutePosition)
  If Adodc_demoffer.Recordset.EOF And Adodc_demoffer.Recordset.RecordCount > 0 Then
    Beep
    Adodc_demoffer.Recordset.MoveLast
  End If
  Exit Sub
GoNextError:
  MsgBox Err.Description
End Sub

Private Sub cmdPrevious_Click()
  On Error GoTo GoPrevError
  If Not Adodc_demoffer.Recordset.BOF Then Adodc_demoffer.Recordset.MovePrevious
  label = "Запись № " & CStr(Adodc_demoffer.Recordset.AbsolutePosition)
  If Adodc_demoffer.Recordset.BOF And Adodc_demoffer.Recordset.RecordCount > 0 Then
    Beep
    Adodc_demoffer.Recordset.MoveFirst
  End If
  Exit Sub
GoPrevError:
  MsgBox Err.Description
End Sub

Ответить

Номер ответа: 15
Автор ответа:
 alexfor



Вопросов: 28
Ответов: 68
 Профиль | | #15 Добавлено: 07.02.10 11:48
Отправил тебе на мыло пример поиска.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам