Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2010, 10:50   #1
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию параметрическое открытие OpenForm, работа с полями таблицы через .Fields

Всем привет вот и снова я =)

В своей эпопее по достижению доступа по авторизации достиг того, что имеется форма записи, которая запросто откроет форму для определенной записи (фильтр по полю (пароль у меня)), однако проблема - если ввести неверный пароль (оный что отсутствует в БД вообще) форма все равно откроется...
В общем случае использую
Код:
DoCmd.OpenForm "Форма модератора", , , "Пароль=[Введите пароль]"
Чтоб достичь приветствия и анализа введенного пароля сделал следующее:
Код:
Private Sub Вход_Click()
Dim pass As String
Dim sheet As Recordset
Dim flag As Boolean

flag = False
pass = ""

If Moder.Value = True Then
                                                                 
    Set sheet = CurrentDb.OpenRecordset("Модератор")
    sheet.MoveFirst
  
    Do Until sheet.EOF
    If sheet.Fields("Пароль") = pass Then
                 DoCmd.OpenForm "Форма модератора", , , "Пароль=[Введите пароль]"
                 flag = True
End If
sheet.MoveNext
Loop
sheet.Close

End If
End Sub
Запись привел в порядок прям тут на скору руку. самое важное - что делать? если испольщовать .Fields то вводится пароль с поля, если DoCmd то с окошка, в моем случае приходится делать ввод два раза - с поля и с окошка дуцмд, первое для того чтобы удостовериться в пароле, второе - чтоб правильно открыть форму.

Очень прошу помочь - подскажите модификацию или фиелдов или дуцмд так, чтоб можно было в отдельной форме ввести пароль (не сугубо важно где...), откроется форма модераторов для этого пароля, или же не откроется с сообщением "фиг вамс"
А то в одном случае до записи получилось достучаться а форму для нее открыть не получается или же форму для той самой записи открыть получается но система это делает без задней мысли (не проверяя)
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 14.06.2010, 13:33   #2
AdrenalinE
Пользователь
 
Аватар для AdrenalinE
 
Регистрация: 29.09.2007
Сообщений: 95
По умолчанию

А по Вашему коду получается, что достаточно ввести любой из существующих паролей?
AdrenalinE вне форума Ответить с цитированием
Старый 14.06.2010, 18:27   #3
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Познающий.
Если вариант "..в отдельной форме ввести пароль.." - не критичен и Вы обратили внимание и прислушались к вопросу AdrenalinE, возможно будет достаточно одной проверки имени пользователя и пароля:
Код:
Private Sub Вход_Click()
Dim sNam$, sPwd$, rs As DAO.Recordset
Const sQ1 = "select * from Модератор where FieldName = '", sQ2 = "' and  FieldPassword = '"
sNam = FormField1 & "": sPwd = FormField2 & "" 'получение данных из полей формы
Set rs = CurrentDb.OpenRecordset(sQ1 + sNam + sQ2 + sPwd + "'")
If Not Moder.Value = True Then 'это Ваша проверка не знаю чего:confused:
ElseIf Not rs.EOF Then 'если логин и пароль существуют - рекордсет содержит записи
    'открываем форму передавая ей в условие уже введенный пароль
    DoCmd.OpenForm "Форма модератора", , , "Пароль='" + sPwd + "'"
    GoTo 9
End If
'здесь может быть сообщение - попытка не удалась
9
rs.Close: Set rs = Nothing
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 15.06.2010, 11:31   #4
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

Цитата:
Сообщение от AdrenalinE Посмотреть сообщение
А по Вашему коду получается, что достаточно ввести любой из существующих паролей?
Цитата:
Сообщение от Teshlenko_EA
и прислушались к вопросу AdrenalinE
Просто думал зачем вводить "лишние" данные. соригинальничать хотел =)
Модер Админ и Юзер у меня там просто форма такая смешная

о Администратор
о Модератор
о Пользователь

Проверяется истинность выбранного кружочка

Евгений, я не понимаю как работает
Код:
Set rs = CurrentDb.OpenRecordset(sQ1 + sNam + sQ2 + sPwd + "'")
как выглядит табличка rs ? насколько я понял (запрос, имя, ???, пароль)
У нас sQ2 просто обнулено зачем?

а тут апострофы есть? просто непонятно вроде " " означают пустую строчку
Цитата:
Const sQ1 = "select * from Модератор where Ник = '", sQ2 = "' and Пароль = '"
' ", sQ2 = " ' - что это? апострофы "вырезают" эс кью2 из запроса?

-------------
Получается задаем константу sQ1 в нее заносим запрос из модераторов где ник равен непоймучему, и вторую константу sQ2 (не пойму что с апострофами >_< )
С наилучшими пожеланиями.

Последний раз редактировалось Познающий; 15.06.2010 в 14:50.
Познающий вне форума Ответить с цитированием
Старый 15.06.2010, 16:29   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Познающий.
Цитата:
не понимаю как работает
Set rs = CurrentDb.OpenRecordset(sQ1 + sNam + sQ2 + sPwd + "'")
в своей конструкции Вы открываете рекордсет с полным набором данных из источника (таблицы/запроса) "Модератор", а затем перебором записей выполняете поиск совпадений. Конструкция предложенная мной открывает рекордсет источником которого является текстовая строка (SQL конструкция) в условии отбора которой размещены данные введенные в поля формы.
Цитата:
sNam = FormField1 & "": sPwd = FormField2 & "" 'получение данных из полей формы
Цитата:
' - что это...
- об этом стоит почитать в учебнике, апострофами обрамляется текстовое значение передаваемое в запрос.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 15.06.2010, 16:41   #6
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте Познающий.

в своей конструкции Вы открываете рекордсет с полным набором данных из источника (таблицы/запроса) "Модератор", а затем перебором записей выполняете поиск совпадений. Конструкция предложенная мной открывает рекордсет источником которого является текстовая строка (SQL конструкция) в условии отбора которой размещены данные введенные в поля формы.
хорошая вещь. заменила мои строк 10 кода =)
У меня постоянно выдает ошибку о неправильно построенном запросе

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
апострофами обрамляется текстовое значение передаваемое в запрос.
Ну я уже начал просто попугаиничать и сделал почти копию того что написали вы
Код:
'Const sQ1 = "select * from Модератор where FieldName = '", sQ2 = "' and  FieldPassword = '"
(много менял апострофы..) получается в запрос в текстовое значение передавалось sQ2= (а зачем запятая?Выскакивала однажды ошибка с запятой) а после поля пароля зачем одиночный апостроф?
PS Гончаренко читаю щас скачал какой-то вроде направленный именно на ВБ

Вот вроде самое близкое к истине..
Код:
Private Sub Вход_Click()
Dim pass$ ' понравилось объявление стринга =)
Dim name$
Dim sheet As Recordset
'опустил модервалуе к делу не относится =)
Const sQ1 = "select * from Модератор where Ник ='", sQ2 = "' And Пароль = '"
name = Me.FieldName & "": pass = Me.FieldPassword & ""

Set sheet = CurrentDb.OpenRecordset(sQ1 + name + sQ2 + pass + "")
При компиляции ругается на опенрекордсет, то неправильно построен запрос( вот здесь пишет синтаксич ошибка), если убрать в коснсте1 после пароля апостроф пишет "мало параметров - надо 1" удивлен.
С наилучшими пожеланиями.

Последний раз редактировалось Познающий; 15.06.2010 в 16:48.
Познающий вне форума Ответить с цитированием
Старый 15.06.2010, 21:21   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Познающий, конструкция запроса ".. pass + ""..", не закрывает апострофом текстовое значение, пошагово выполните следующую конструкцию:
Код:
...
'объяните дополнительную переменную
Dim s$
'соберите в ней SQL строку
s = sQ1 + name + sQ2 + pass + "'"
'выполните команду
Debug.Print s
'она должна отобразиться подобным образом
'select * from Модератор where Ник = 'F1' And Пароль = 'F2' 
'F1, F2 - значения полей формы соответственно
'и полько потом, убедившись в её верности открывайте рекордсет
Set sheet = CurrentDb.OpenRecordset(s)
...
и удача Вам улыбнется.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 15.06.2010, 22:18   #8
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

рекомендация:
откажитесь от использования в качестве имен переменных зарезервированных слов VB(A), (name, sheet,...) это избавит Вас от проблем в будущем.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 15.06.2010, 22:22   #9
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

красиво написано. мне дебаггер по поводу запроса интересное фи высказывает - вроде все верно(выводит полную структуру запроса) но ему не нравится. лан посмотрим. авось улыбнется
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 15.06.2010, 23:17   #10
AdrenalinE
Пользователь
 
Аватар для AdrenalinE
 
Регистрация: 29.09.2007
Сообщений: 95
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
рекомендация:
откажитесь от использования в качестве имен переменных зарезервированных слов VB(A), (name, sheet,...) это избавит Вас от проблем в будущем.
Евгений.
Очень дельный совет, сталкивался на личном опыте. Также советую не использовать зарезервированные слова в качестве названия полей таблиц (date, time и т.д.).
AdrenalinE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие ссылки в ячейке таблицы flame33 JavaScript, Ajax 5 04.09.2010 19:02
Ограничение связей между полями таблицы в БД BloodyRose Помощь студентам 1 16.04.2010 09:04
ввод в БД через таблицу с раскрывающимися полями (lookup) Skif БД в Delphi 2 13.04.2010 23:58
Программная работа с полями (формула) NomadV Microsoft Office Word 7 08.04.2010 15:21
Параметрическое программирование! Нужна программа life1290 Помощь студентам 0 10.02.2010 16:38