Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: что то с селектом...
 
 автор: АлаяЗаря   (25.04.2010 в 13:23)   личное сообщение
 
 

вот мой код:


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" берет в квадратные скобки и при открытии запроса спрашивает ввести значения вместо того чтобы по ним сортировать...

Гдето ошибка =(((

  Ответить  
 
 автор: akkorn   (25.04.2010 в 14:33)   личное сообщение
 
 

Я бы порекомендовал всегда вверху модуля определять
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
и аналогично вторую



Удачи)

  Ответить  
 
 автор: Lukas   (25.04.2010 в 17:26)   личное сообщение
 
 

1. Значения текстовых полей нужно "обрамлять" апострофами в запросах, а не круглыми скобками.
2. Если код функции расположен в модуле формы, правильно писать короткие ссылки на свойства (например: Me.ControlName.Value)
3. Есть-ли в данном случае смысл в замене строки SQL сохраненного запроса?
4. Предложение языка SQL "WHERE" используется не для сортировки, как вы полагаете почему-то, а для ограничения количества строк, возвращаемых запросом.
Вкратце : )

  Ответить  
 
 автор: АлаяЗаря   (25.04.2010 в 18:28)   личное сообщение
 
 

Расскажу смысл моей затеи:

по данным из формы авторизации делается запрос из таблицы логинов и паролей, далее рекорд сетом вытягиваю значечение (оно там одно) и сохраняю его в переменную, далее с этой переменной работаю.... воть...

на код сильно не серчайте этопробный, переменные я потом объявил и лишнюю писанину убрал!


Ограмное ва спсибо, буду пробывать и отчитаюсь =) сейчас просто жена грозитья разводом если я не отлипну от компа и не начну заниматья ребенком =) так что все запросы и рекордсеты на завтра =)

  Ответить  
 
 автор: АлаяЗаря   (26.04.2010 в 01:17)   личное сообщение
 
 


работают то правильно, но я написал бы так:
[Form_avtorizaciy].Pasw1.Text
[Form_avtorizaciy].Login1.Text



а полное их написание как выглядит?

qqq = [form_avtorizaciy].логин.text - так ругается

и еще вопросик qqq и www я как string объявляю?

  Ответить  
 
 автор: snipe   (26.04.2010 в 03:50)   личное сообщение
 
 

вроде как свойство text доступно только в том случае если фокус находится на контроле к которому обращаетесь
так что вот так будет наверное лучше
qqq = forms![form_avtorizaciy]!логин

и еще на счет публичной (общей) переменной
часто встречаются мнения о том что они (переменные) слетают и как вариант обхода этого глюка рекомендуют держать открытой в невидимом режиме форму с полями в которых хранить необходимые данные - в случае необходимости уже обращаться не к общей переменной а к полю этой формы где хранится значение

  Ответить  
 
 автор: АлаяЗаря   (26.04.2010 в 01:38)   личное сообщение
 
 


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 & """"

  Ответить  
 
 автор: АлаяЗаря   (26.04.2010 в 02:22)   личное сообщение
 
 

подскажите как мне один раз присвоить значение переменой в модуле, чтобы потом постоянно ей пользоваться?

т.е. я из запроса присваиваю переменной имя авторизовавшегося а потом буду проверять ху из ху и раздавать соответствующие права....

  Ответить  
 
 автор: kot_k_k   (26.04.2010 в 09:18)   личное сообщение
 
 

Объяви переменные как глобальные они будут видны из все форм, отчетов и проч.

используй не двойные а одинарные ------ > '

тогда мона писать так =" Like ' * ' " и никто ругаться не будет, пробелов наставил для наглядности

  Ответить  
 
 автор: АлаяЗаря   (26.04.2010 в 11:46)   личное сообщение
 
 

добрый день! С глобальной переменной все получилось, работает замечательно =) спасибо.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList