Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: работа с VB в Access  (Прочитано 41865 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« : 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
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #1 : 08-02-2004 15:39 » 

Алёна, не пробовала в Экцессе, на в VB я бы не долбалась с Инпутом, а поставила на пороль обычное текстовое поле. У него есть свойство PasswordChar, которое как раз задает символ, вводящийся вместо символов пароля...
Записан

не умеете летать- не мучайте метлу!
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #2 : 08-02-2004 17:09 » 

Т.е. ты предлагаешь для ввода пароля создать форму с текстовым полем?

По моему это дольше,
ведь надо сначала создать форму с полем, Потом ввести переменную, а затем закрыть форму и начать обрабатывать переменную. Это занимает больше чем шесть строчек.

 :?: Может всё-таки кто-нибудь знает как в InputBox выводить звёздочки*.

P.S. А можно ли создавать временную форму, а затем удалять её. Если Да, то как. (И как на ней создать текстовое поле.)
Записан

Стену можно пробить только головой. Все остальное орудия.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #4 : 09-02-2004 16:05 » 

Если ты имеешь в виду компонент "Текстовое поле"(TextBox), то у него по определению нет свойства Caption. Вместо этого у него есть свойство Text, со значение которого поступают аналогично и его значение спокойно можно присваивать переменной.
Записан

не умеете летать- не мучайте метлу!
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #5 : 09-02-2004 17:53 » 

Когда я ставлю:

stPasswordU = Trim(Поле2.Text)

кнопка вообще не работает. В этом случае не выдается даже сообшения "Пароль не верен!"

Может дело в несоответствии типов полей :?:  
Но текстовое поле по моему имеет тип String, и переменная к которой присваеваем тоже имеет тип String. Значит несоответствий быть не должно.

Не могу найти ошибку. По идее всё должно ратотать Жаль
Записан

Стену можно пробить только головой. Все остальное орудия.
Dimyan
Гость
« Ответ #6 : 10-02-2004 13:17 » 

Я в VBA не силен (точнее вообще его не знаю) но вообще считывание информации и присвоение ее переменной производится так:
Код:
 string MyString = MyTextBox.Text; 
Записан
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #9 : 11-02-2004 08:12 » 

Не знаю как работает Экцесс на поиск ошибок в коде... Если там этого нет, может у тебя под рукой найдется нормальный Бэйсик? Перенесла бы туда код и запустила дебаг: увидишь не чем застрянешь.
Записан

не умеете летать- не мучайте метлу!
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #11 : 11-02-2004 16:19 » 

Алёна, Бейсик- это такой язык, в котором не все, что должно логически работать работает на самом деле в том виде в каком мы хотим, чтобы оно работало: я уже с этим неоднократно сталкивалась.  Ха-ха-ха  Я шокирован!  Отлично
Записан

не умеете летать- не мучайте метлу!
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #12 : 16-02-2004 08:23 » 

Never,  Привет, я вернулся, предложение в силе - готов работать... 8)  8)  8)

Алёна,  а зачем ты вообще считываешь введенный пароль в переменную? (тем более по потере фокуса)  Ведь все должно быть проще:
твоя строка проверки
If stPasswordA = Поле2.Text Then и т.д.
Тогда Private Sub Поле2_LostFocus()  не нужно совсем... Улыбаюсь
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #13 : 16-02-2004 15:18 » 

Цитата

Ведь все должно быть проще:
твоя строка проверки
If stPasswordA = Поле2.Text Then и т.д.

Пробовала, не получается.  Так больше нельзя...
Работает только в этом варианте. Почему не знаю.
Когда делала всю обработку в одном событии, ничего не получалось (см. выше). А где в Access искать коды ошибок я не знаю.
Записан

Стену можно пробить только головой. Все остальное орудия.
Dimyan
Гость
« Ответ #14 : 17-02-2004 04:15 » 

Алёна,  там в справки должно быть написано, на сколько я знаю в Access справочка даже русская. Коды ошибок в справке обязательно быть должны.
Записан
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #15 : 17-02-2004 06:55 » 

Алёна, поставь точку прерывания на этой строке. В поле Immediate напиши
? Поле2.Text
Нажми Enter  и посмотри, какое значение имеет поле....
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #16 : 17-02-2004 18:32 » 

Цитата

Коды ошибок в справке обязательно быть должны.

Конечно должны быть, но я даже не знаю какой код у моей ошибки. Ведь при выполнении 1 варианта никаких сообщений не выдается
Цитата

В поле Immediate

А это что за поле?
Когда я присваиваю значение поле какому-то текстовому объекту Тоже никакой реакции.
Записан

Стену можно пробить только головой. Все остальное орудия.
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #17 : 18-02-2004 06:05 » 

Алёна, поле Immediate показывает информацию вызванную командами,  набранных в нем. Включается Ctrl+G или в меню View. Отображается обычно ниже окна с кодом программы.
Never,  послание не пришло....
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #18 : 18-02-2004 06:29 » 

Алёна, попробовал твой код в акцессе (пример где обработка одного события) и он выдал ошибку
"Невозможно обратиться к свойству или методу элемента управления, пока на этот элемент не установлен фокус ввода"
поэтому у тебя процедура вылетала по ошибке и ничего не происходило, а второй пример (с двумя событиями) отрабатывал правильно
Записан

I Have Nine Lives You Have One Only
THINK!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #19 : 18-02-2004 06:36 » 

и еще Алёна, в акцессе
Значение «Пароль» свойства Маска ввода (InputMask) создает элемент управления, предназначенный для ввода пароля. Любые знаки, вводящиеся в этот элемент управления будут отображаться на экране звездочками (*). Подобная маска ввода используется для предотвращения вывода на экран вводящихся знаков

Поле2.InputMask = "Password"

попробуй
Записан

I Have Nine Lives You Have One Only
THINK!
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #20 : 18-02-2004 06:43 » 

Алёна, исходя из ошибки, описанной HandKot,  обращайся не к Поле2.Text, а к Поле2.Value.
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #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
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #22 : 19-02-2004 06:18 » 

Алёна,  Ты правильно сказала:
Цитата

ведь свойство Text содержит строковое выражение, отображаемое в поле, а свойство Value содержит строковое выражение, находящееся в текстовом поле

Text всего лишь отображение текста, и обратиться к нему можно только установив фокус на поле, а Value - переменная контрола. К ней можно обратиться всегда (если форма загружена), даже если фокус на другой форме: ИмяФормы.ИмяКонтрола.Value...
В некоторых контролах отображение (Text) не всегда равно значению (Value), например Выпадающий Дурак (DropDown или в Access - ПолеСоСписком). В нем не редко отображается текст (Единицы измерения, Город, Партнер и т.д...) из справочника, а значение - ключ выбранного текста, для поиска/фильтрации в другой таблице....
Я понимаю, что высказанное мной немного сумбурно, но обещаю подготовить дополнение к урокам Невы (если этого там нет), где поподробнее распишу такие свойства контролов....
Неве, Вот и дополнение всплыло Ага
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #23 : 19-02-2004 06:23 » 

Алёна,
 
Цитата

Как его ещё можно усовершенствовать.

У тебя присутствует ненужное присваивание:
Цитата

stPasswordU = Поле2.Value

Убери его, а вместо:
Цитата

If stPasswordA = stPasswordU Then

Напиши:
If stPasswordA = Поле2.Value Then
На современных машинах, лишние операции такого плана мало заметны, даже если будут выполняться в цикле или рекурсии, но это совсем ненужная опирация, т.к. Поле2.Value - уже сама по себе переменная и ты ее можешь использовать напрямую... И как говориться в рекламе:"Зачем платить дважды?" Ага
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #24 : 19-02-2004 07:15 » new

Dusk,
Цитата

дополнение к урокам Невы
во-первых, мы собственно и до контроллов еще не добрались в уроках; во-вторых, я этой фишки с Text и Value не знала (так, что спасибо, доступно объяснил Улыбаюсь ) У меня были крайне паршивые учителя  Ха-ха-ха
Записан

не умеете летать- не мучайте метлу!
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #25 : 19-02-2004 19:28 » 

Цитата

На современных машинах, лишние операции такого плана мало заметны

Вот поэтому я их и добавила.   Вот такой я вот Не солидно включать в курсовую десять строчек на VBA, надо ходя бы одиннадцать Ага

Шучу,  Жжешь этот кусочек у меня долго не получался. И поэтому со временем оброс мусором. Я ведь сначало пыталась пароль через InputBox вводить. Но у меня не получилось. А когда я посмотрела все возможные параметры его, поняла почему.
Записан

Стену можно пробить только головой. Все остальное орудия.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #26 : 10-03-2004 15:21 » 

Пароль у меня теперь прекрасно работает,

Но теперь не знаю как введя правильный пароль закрыть старую форму(которая использовалась для его ввода)

Дописала:

DoCmd.Close stDocName2, , acSaveYes

Где stDocName2 имя старой формы. А окно всё равно закрываться не хочет.

Вопрос: Как закрыть форму через VBA? :?:  :?:
Записан

Стену можно пробить только головой. Все остальное орудия.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #27 : 10-03-2004 15:44 » 

я всегда говорил, что девушки-программистки - это чудо  Ага
Записан

Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #28 : 10-03-2004 17:23 » 

Алексей1153,   Ха-ха-ха надеюсь- это комплимент???
Алёна, а окно у тебя там модальное? Или обычную форму надо убрать? Если обычную, попробуй Form.Hide
Записан

не умеете летать- не мучайте метлу!
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #29 : 10-03-2004 17:39 » 

Цитата

я всегда говорил, что девушки-программистки - это чудо


Конечно чудо, а подсказать слабо :twisted:  Хотя бы аналогию из другого языка.
Записан

Стену можно пробить только головой. Все остальное орудия.
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines