Страница: 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.0ata 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.0ata 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-сайт:
Профиль | | #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-сайт:
Профиль | | #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
Отправил тебе на мыло пример поиска.