Алёна
Молодой специалист
Offline
Блондинка...
|
|
« : 08-02-2004 13:31 » |
|
Never (и все остальные ) Я тебе уже жаловалась, что у меня не идет VBA, теперь я упрастила все до минимума. Теперь при нажатии запрашивается пароль, и если пароль верен, то открывается форма. Но где (с каком месте) я должно поставить " * ", что бы вводимого пароля не было видно. stPasswordA = "Пароль" stPasswordU = InputBox("Введите пароль", "Ввод пароля") If stPasswordA = stPasswordU Then stDocName = "Журнал хозяйственных операций" DoCmd.OpenReport stDocName, acPreview Else MsgBox "Пароль не верен!" End If :!: Это черновой вариант, как узнаю где ставить * то сразу включу его в курсовой. :idea: Я понимаю, что это вопрос не по курсу, но надо же было его где то задать. Не открывать же для этого новую тему.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Never
|
|
« Ответ #1 : 08-02-2004 15:39 » |
|
Алёна, не пробовала в Экцессе, на в VB я бы не долбалась с Инпутом, а поставила на пороль обычное текстовое поле. У него есть свойство PasswordChar, которое как раз задает символ, вводящийся вместо символов пароля...
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #2 : 08-02-2004 17:09 » |
|
Т.е. ты предлагаешь для ввода пароля создать форму с текстовым полем?
По моему это дольше, ведь надо сначала создать форму с полем, Потом ввести переменную, а затем закрыть форму и начать обрабатывать переменную. Это занимает больше чем шесть строчек.
:?: Может всё-таки кто-нибудь знает как в InputBox выводить звёздочки*.
P.S. А можно ли создавать временную форму, а затем удалять её. Если Да, то как. (И как на ней создать текстовое поле.)
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #3 : 09-02-2004 16:00 » |
|
В таком случае, у меня возникает маленькая проблема. Почему-то у "Поле2" (в которое я ввожу пароль) нет свойства Caption. И поэтому я не могу введенное значение присвоить переменной. Следовательно я не могу сравнивать переменные. И в результате у меня всегда выдает "Пароль не верен!" Dim stDocNameF As String Dim stPasswordA As String Dim stPasswordU As String stPasswordA = "Пароль" ' stPasswordU = Поле2.Caption If stPasswordA = stPasswordU Then stDocNameF = "Журнал хозяйственных операций" DoCmd.OpenReport stDocNameF, acPreview Else MsgBox "Пароль не верен!" End If :?: Как мне присвоить переменной значение "Поле2"
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Never
|
|
« Ответ #4 : 09-02-2004 16:05 » |
|
Если ты имеешь в виду компонент "Текстовое поле"(TextBox), то у него по определению нет свойства Caption. Вместо этого у него есть свойство Text, со значение которого поступают аналогично и его значение спокойно можно присваивать переменной.
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #5 : 09-02-2004 17:53 » |
|
Когда я ставлю: stPasswordU = Trim(Поле2.Text) кнопка вообще не работает. В этом случае не выдается даже сообшения "Пароль не верен!" Может дело в несоответствии типов полей :?: Но текстовое поле по моему имеет тип String, и переменная к которой присваеваем тоже имеет тип String. Значит несоответствий быть не должно. Не могу найти ошибку. По идее всё должно ратотать
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Dimyan
Гость
|
|
« Ответ #6 : 10-02-2004 13:17 » |
|
Я в VBA не силен (точнее вообще его не знаю) но вообще считывание информации и присвоение ее переменной производится так: string MyString = MyTextBox.Text;
|
|
|
Записан
|
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #7 : 10-02-2004 14:30 » |
|
Строки stPasswordU = Trim(Поле2.Text)
и string MyString = MyTextBox.Text;
идентичны, Т.к. stPasswordU имеет тип String, а Trim просто убирает пробелы.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Dimyan
Гость
|
|
« Ответ #8 : 11-02-2004 04:22 » |
|
Алёна, значит смотри свой код на ошибки. такой код должен нормально работать и уж тем болие не болжен влиять на кнопку
|
|
|
Записан
|
|
|
|
Never
|
|
« Ответ #9 : 11-02-2004 08:12 » |
|
Не знаю как работает Экцесс на поиск ошибок в коде... Если там этого нет, может у тебя под рукой найдется нормальный Бэйсик? Перенесла бы туда код и запустила дебаг: увидишь не чем застрянешь.
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #10 : 11-02-2004 14:33 » |
|
Представляете, когда я разделила старое событие на два разных, у меня получилось Почему, не знаю, может кто может объяснить на будующее :?: А то каждый раз действовать методом научного тыка как-то долго получается Public stPasswordU As String Public stPasswordA As String Private Sub Кнопка6_Click() Dim stDocNameF As String stPasswordA = "Пароль" If stPasswordA = stPasswordU Then stDocNameF = "Журнал хозяйственных операций" DoCmd.OpenReport stDocNameF, acPreview Else MsgBox "Пароль не верен!" End If End Sub Private Sub Поле2_LostFocus() stPasswordU = Поле2.Text End Sub :oops: А Бейсика уменя нет никакого.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Never
|
|
« Ответ #11 : 11-02-2004 16:19 » |
|
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #12 : 16-02-2004 08:23 » |
|
Never, Привет, я вернулся, предложение в силе - готов работать... 8) 8) 8) Алёна, а зачем ты вообще считываешь введенный пароль в переменную? (тем более по потере фокуса) Ведь все должно быть проще: твоя строка проверки If stPasswordA = Поле2.Text Then и т.д. Тогда Private Sub Поле2_LostFocus() не нужно совсем...
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #13 : 16-02-2004 15:18 » |
|
Ведь все должно быть проще: твоя строка проверки If stPasswordA = Поле2.Text Then и т.д.
Пробовала, не получается. Работает только в этом варианте. Почему не знаю. Когда делала всю обработку в одном событии, ничего не получалось (см. выше). А где в Access искать коды ошибок я не знаю.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Dimyan
Гость
|
|
« Ответ #14 : 17-02-2004 04:15 » |
|
Алёна, там в справки должно быть написано, на сколько я знаю в Access справочка даже русская. Коды ошибок в справке обязательно быть должны.
|
|
|
Записан
|
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #15 : 17-02-2004 06:55 » |
|
Алёна, поставь точку прерывания на этой строке. В поле Immediate напиши ? Поле2.Text Нажми Enter и посмотри, какое значение имеет поле....
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #16 : 17-02-2004 18:32 » |
|
Коды ошибок в справке обязательно быть должны.
Конечно должны быть, но я даже не знаю какой код у моей ошибки. Ведь при выполнении 1 варианта никаких сообщений не выдается В поле Immediate
А это что за поле? Когда я присваиваю значение поле какому-то текстовому объекту Тоже никакой реакции.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #17 : 18-02-2004 06:05 » |
|
Алёна, поле Immediate показывает информацию вызванную командами, набранных в нем. Включается Ctrl+G или в меню View. Отображается обычно ниже окна с кодом программы. Never, послание не пришло....
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #18 : 18-02-2004 06:29 » |
|
Алёна, попробовал твой код в акцессе (пример где обработка одного события) и он выдал ошибку "Невозможно обратиться к свойству или методу элемента управления, пока на этот элемент не установлен фокус ввода" поэтому у тебя процедура вылетала по ошибке и ничего не происходило, а второй пример (с двумя событиями) отрабатывал правильно
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #19 : 18-02-2004 06:36 » |
|
и еще Алёна, в акцессе Значение «Пароль» свойства Маска ввода (InputMask) создает элемент управления, предназначенный для ввода пароля. Любые знаки, вводящиеся в этот элемент управления будут отображаться на экране звездочками (*). Подобная маска ввода используется для предотвращения вывода на экран вводящихся знаков
Поле2.InputMask = "Password"
попробуй
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #20 : 18-02-2004 06:43 » |
|
Алёна, исходя из ошибки, описанной HandKot, обращайся не к Поле2.Text, а к Поле2.Value.
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #21 : 18-02-2004 16:28 » |
|
попробуй
А у меня это есть, т.к. я эту позицию устанавливала через свойства, поэтому в програмном коде она на отразилась. обращайся не к Поле2.Text, а к Поле2.Value.
Почему, ведь свойство Text содержит строковое выражение, отображаемое в поле, а свойство Value содержит строковое выражение, находящееся в текстовом поле. Разница по смыслу не существенная, а в результате очень даже. Теперь исходный код у меня имеет вид: Private Sub Кнопка6_Click() Dim stPasswordU As String Dim stPasswordA As String Dim stDocName As String Dim stLinkCriteria As String stPasswordU = Поле2.Value stPasswordA = "Пароль" If stPasswordA = stPasswordU Then stDocName = "Фирма" DoCmd.OpenForm stDocName, , , stLinkCriteria Else MsgBox "Пароль не верен!" Поле2.Value = "" Поле2.SetFocus End If End Sub :?: Как его ещё можно усовершенствовать. p.S. Справку к этой форме я уже сделала, подсказки всплывают.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #22 : 19-02-2004 06:18 » |
|
Алёна, Ты правильно сказала: ведь свойство Text содержит строковое выражение, отображаемое в поле, а свойство Value содержит строковое выражение, находящееся в текстовом поле
Text всего лишь отображение текста, и обратиться к нему можно только установив фокус на поле, а Value - переменная контрола. К ней можно обратиться всегда (если форма загружена), даже если фокус на другой форме: ИмяФормы.ИмяКонтрола.Value... В некоторых контролах отображение (Text) не всегда равно значению (Value), например Выпадающий Дурак (DropDown или в Access - ПолеСоСписком). В нем не редко отображается текст (Единицы измерения, Город, Партнер и т.д...) из справочника, а значение - ключ выбранного текста, для поиска/фильтрации в другой таблице.... Я понимаю, что высказанное мной немного сумбурно, но обещаю подготовить дополнение к урокам Невы (если этого там нет), где поподробнее распишу такие свойства контролов.... Неве, Вот и дополнение всплыло
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #23 : 19-02-2004 06:23 » |
|
Алёна, Как его ещё можно усовершенствовать.
У тебя присутствует ненужное присваивание: stPasswordU = Поле2.Value
Убери его, а вместо: If stPasswordA = stPasswordU Then
Напиши: If stPasswordA = Поле2.Value Then На современных машинах, лишние операции такого плана мало заметны, даже если будут выполняться в цикле или рекурсии, но это совсем ненужная опирация, т.к. Поле2.Value - уже сама по себе переменная и ты ее можешь использовать напрямую... И как говориться в рекламе:"Зачем платить дважды?"
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
Never
|
|
« Ответ #24 : 19-02-2004 07:15 » |
|
Dusk, дополнение к урокам Невы
во-первых, мы собственно и до контроллов еще не добрались в уроках; во-вторых, я этой фишки с Text и Value не знала (так, что спасибо, доступно объяснил ) У меня были крайне паршивые учителя
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #25 : 19-02-2004 19:28 » |
|
На современных машинах, лишние операции такого плана мало заметны
Вот поэтому я их и добавила. Не солидно включать в курсовую десять строчек на VBA, надо ходя бы одиннадцать Шучу, этот кусочек у меня долго не получался. И поэтому со временем оброс мусором. Я ведь сначало пыталась пароль через InputBox вводить. Но у меня не получилось. А когда я посмотрела все возможные параметры его, поняла почему.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #26 : 10-03-2004 15:21 » |
|
Пароль у меня теперь прекрасно работает,
Но теперь не знаю как введя правильный пароль закрыть старую форму(которая использовалась для его ввода)
Дописала:
DoCmd.Close stDocName2, , acSaveYes
Где stDocName2 имя старой формы. А окно всё равно закрываться не хочет.
Вопрос: Как закрыть форму через VBA? :?: :?:
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #27 : 10-03-2004 15:44 » |
|
я всегда говорил, что девушки-программистки - это чудо
|
|
|
Записан
|
|
|
|
Never
|
|
« Ответ #28 : 10-03-2004 17:23 » |
|
Алексей1153, надеюсь- это комплимент??? Алёна, а окно у тебя там модальное? Или обычную форму надо убрать? Если обычную, попробуй Form.Hide
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
Алёна
Молодой специалист
Offline
Блондинка...
|
|
« Ответ #29 : 10-03-2004 17:39 » |
|
я всегда говорил, что девушки-программистки - это чудо
Конечно чудо, а подсказать слабо :twisted: Хотя бы аналогию из другого языка.
|
|
|
Записан
|
Стену можно пробить только головой. Все остальное орудия.
|
|
|
|