| |
|
|
| | вот мой код:
Option Compare Database
Function paswd()
Dim strSelect As String
Dim strFrom As String
Dim strWhere As String
strSelect = "SELECT "
strSelect = strSelect & "pas.id, pas.idparol, pas.iduser"
strFrom = " FROM pas"
strWhere = " WHERE True"
qqq = Forms![avtorizaciy]![Пароль]
www = Forms![avtorizaciy]![Логин]
If Nz(Forms!avtorizaciy!Пароль, 0) > 0 Then strWhere = strWhere & " AND (pas.idparol = " & (qqq) & ")"
If Nz(Forms!avtorizaciy!Логин, 0) > 0 Then strWhere = strWhere & " and (pas.iduser = " & (www) & ")"
strSQL = strSelect & strFrom & strWhere
CurrentDb.QueryDefs("password").SQL = strSQL
paswd = strSQL
End Function
Проблема тут
|
If Nz(Forms!avtorizaciy!Пароль, 0) > 0 Then strWhere = strWhere & " AND (pas.idparol = " & (qqq) & ")"
If Nz(Forms!avtorizaciy!Логин, 0) > 0 Then strWhere = strWhere & " and (pas.iduser = " & (www) & ")"
|
код работает нормально, только в запросе значения "qqq" и "www" берет в квадратные скобки и при открытии запроса спрашивает ввести значения вместо того чтобы по ним сортировать...
Гдето ошибка =((( | |
| |
| |
| |
|
|
| | Я бы порекомендовал всегда вверху модуля определять
Option Explicit
эта команда запрещает системе самостоятельно определять тип переменных.
В частности, у вас не известно какого типа переменные qqq и www
команды же
qqq = Forms![avtorizaciy]![Пароль]
www = Forms![avtorizaciy]![Логин]
работают то правильно, но я написал бы так:
[Form_avtorizaciy].Pasw1.Text
[Form_avtorizaciy].Login1.Text
еще один совет, если можно,- не создавайте объекты и именем в кирилице (по-русски).
далее, зачем вы ДВА раза обращаетесь к форме к полям Пароль и Логин? У Вас же эти данные висят в переменных qqq и www :)
потом, насколько я знаю, в конце запроса нужно ставить ; , т.е. команда
strSQL = strSelect & strFrom & strWhere
будет выглядеть как:
strSQL = strSelect & strFrom & strWhere & ";"
Ну раз уж начал, то я бы строки
If Nz(Forms!avtorizaciy!Пароль, 0) > 0 Then strWhere = strWhere & " AND (pas.idparol = " & (qqq) & ")"
поменял бы на
If Nz(qqq, 0) > 0 Then strWhere = strWhere & " AND pas.idparol = " & qqq
и аналогично вторую
Удачи)  | |
| |
| |
| |
|
|
| | 1. Значения текстовых полей нужно "обрамлять" апострофами в запросах, а не круглыми скобками.
2. Если код функции расположен в модуле формы, правильно писать короткие ссылки на свойства (например: Me.ControlName.Value)
3. Есть-ли в данном случае смысл в замене строки SQL сохраненного запроса?
4. Предложение языка SQL "WHERE" используется не для сортировки, как вы полагаете почему-то, а для ограничения количества строк, возвращаемых запросом.
Вкратце : ) | |
| |
| |
| |
|
|
| | Расскажу смысл моей затеи:
по данным из формы авторизации делается запрос из таблицы логинов и паролей, далее рекорд сетом вытягиваю значечение (оно там одно) и сохраняю его в переменную, далее с этой переменной работаю.... воть...
на код сильно не серчайте этопробный, переменные я потом объявил и лишнюю писанину убрал!
Ограмное ва спсибо, буду пробывать и отчитаюсь =) сейчас просто жена грозитья разводом если я не отлипну от компа и не начну заниматья ребенком =) так что все запросы и рекордсеты на завтра =) | |
| |
| |
| |
|
|
| |
работают то правильно, но я написал бы так:
[Form_avtorizaciy].Pasw1.Text
[Form_avtorizaciy].Login1.Text
|
а полное их написание как выглядит?
qqq = [form_avtorizaciy].логин.text - так ругается
и еще вопросик qqq и www я как string объявляю? | |
| |
| |
| |
|
|
| | вроде как свойство text доступно только в том случае если фокус находится на контроле к которому обращаетесь
так что вот так будет наверное лучше
qqq = forms![form_avtorizaciy]!логин
и еще на счет публичной (общей) переменной
часто встречаются мнения о том что они (переменные) слетают и как вариант обхода этого глюка рекомендуют держать открытой в невидимом режиме форму с полями в которых хранить необходимые данные - в случае необходимости уже обращаться не к общей переменной а к полю этой формы где хранится значение | |
| |
| |
| |
|
|
| |
1. Значения текстовых полей нужно "обрамлять" апострофами в запросах, а не круглыми скобками.
|
если обрамляю апострафами то он берет не значение переменной а само наименование переменной =(
что то ничего не получилось =(
получилось =)
If Nz(qqq, 0) > 0 Then strWhere = strWhere & " and pas.idparol = " & """" & qqq & """"
If Nz(www, 0) > 0 Then strWhere = strWhere & " and pas.iduser = " & """" & www & """"
|
| |
| |
| |
| |
|
|
| | подскажите как мне один раз присвоить значение переменой в модуле, чтобы потом постоянно ей пользоваться?
т.е. я из запроса присваиваю переменной имя авторизовавшегося а потом буду проверять ху из ху и раздавать соответствующие права.... | |
| |
| |
| |
|
|
| | Объяви переменные как глобальные они будут видны из все форм, отчетов и проч.
используй не двойные а одинарные ------ > '
тогда мона писать так =" Like ' * ' " и никто ругаться не будет, пробелов наставил для наглядности | |
| |
| |
| |
|
|
| | добрый день! С глобальной переменной все получилось, работает замечательно =) спасибо. | |
| |
| |