Atipos Ответов: 1

[Доступ] как я могу вставить глобальную переменную в поле?


Здравствуйте, прежде всего я объясню, что у меня в руках.
Две маски, в маска а есть "пользователь" поле и другие поля (что меня интересует, так это "пользователь"). Находясь в Маска Б это был бы тот самый авторизоваться, с именем пользователя и паролем.

Когда я вхожу в Пользователь в Маска А, Я автоматически открываю форму входа в систему, с помощью которой я определяю, кто получает доступ. Таким образом, я хотел бы взять (когда учетные данные введены правильно) имя пользователя человека, который входит в систему, и поместить его с "Пользователь" в Маска А.

Я создал глобальную переменную "Имя пользователя 1".
Это код, который я тестировал, и сообщение, которое я использовал, чтобы понять, работает. Но я не могу использовать его, положив его в коробку, которую я хотел бы.

Private Sub Employee_AfterUpdate()

DoCmd.OpenForm FormName:="login", WindowMode:=acDialog
MsgBox username1

End Sub


Это глобальная переменная.
Option Compare Database
Option Explicit

Public username1 As String


Надеюсь, я все объяснил. Спасибо




Код входа в систему
Private Sub Command0_Click()
DoCmd.CloseDatabase
End Sub

Private Sub Command1_Click()

    If IsNull(Me.tb_ID) Or IsNull(Me.tb_pwd) Then
      MsgBox "You must enter password or login ID.", vbOKOnly + vbInformation, "Required Data"
      Me.tb_ID.SetFocus
        Exit Sub
    End If
    
    If Me.tb_pwd.Value = DLookup("[psw]", "Utenti", "[User]='" & Me.tb_ID.Value & "'") Then
      username1 = Me.tb_ID.Value
      DoCmd.Close acForm, "login", acSaveNo
      DoCmd.OpenForm "Work Hours List"
    Else
      MsgBox "Password or login ID incorrect. Please Try Again", vbOKOnly + vbExclamation, "Invalid Entry!"
      Me.tb_pwd.SetFocus
    End If
    
End Sub


Код того, что я пробовал с полевым сотрудником
Private Sub Employee_AfterUpdate()

DoCmd.OpenForm FormName:="login", WindowMode:=acDialog
MsgBox username1

End Sub


Private Sub Form_Close()

DoCmd.OpenForm "login"

End Sub


Что я уже пробовал:

Private Sub Employee_AfterUpdate()

DoCmd.OpenForm FormName:="login", WindowMode:=acDialog
MsgBox username1

End Sub

Private Sub Form_Close()

DoCmd.OpenForm "login"

End Sub




Private Sub EmployeeText_AfterUpdate()

DoCmd.OpenForm FormName:="login", WindowMode:=acDialog
MsgBox username1
Me.EmployeeText.Value = username1

End Sub

1 Ответов

Рейтинг:
4

Gustav Brock

Я понятия не имею, что у тебя за дела. Маска А и Маска Б может быть, и объяснение очень запутанное.

Название, однако, понятно, и ответ прост. В форме, где это поле привязано к элементу управления (текстовому полю), назначьте глобальное значение элементу управления (текстовому полю). Ценность собственность, скажем, в OnOpen событие формы:

Me!YourTextbox.Value = username1


Atipos

Проблема в том, что поле не имеет свойства value. Это дает мне такую ошибку: "объект не поддерживает это свойство или метод"

Поле "сотрудник", с его помощью я могу выбрать сотрудника из списка, когда я выберу имя сотрудника, он откроет форму входа в систему, с этим я поставлю имя пользователя и пароль.
Что мне нравится делать, так это то, что имя пользователя

Gustav Brock

Я вижу на так, что у вас нет поля, но есть метка. Для надписи, присвоить глобальной в свойство caption метки.

Atipos

Я очень ценю вашу доступность и благодарю вас. Используя свойство caption, Что я хотел бы сделать, это отлично работает. Но, к сожалению, меняется название колонки. Благодаря вам я понимаю, что должен действовать именно на этом поле.

Теперь я писал::

Я.Employee_Label.Заголовок = имя_пользователя1



Сделав это, как написано чуть выше, измените заголовок колонки.

Если вы сейчас поставите:

Меня.EmployeeText.Значение = имя_пользователя1

Я возвращаюсь к ошибке времени выполнения 2113, значение, которое вы вводите, недопустимо для этого поля.



https://imgur.com/JuMjLNn
- Я загружаю небольшое изображение того, что мне нравится менять с помощью глобального

Gustav Brock

Похоже, что ваше поле-это combobox, привязанный к полю. Затем вы (как правило) должны указать идентификатор имени пользователя, но - из вашего кода - это уже кажется таковым и то, что хранится в username1.

Попробуйте немного отладить и убедитесь, что вы вручную можете ввести значение в таблицу.

Atipos

Если источник строк комбобокса является

Выберите [расширенные сотрудники].ID, [сотрудники продлены].[Имя сотрудника] от [расширенные сотрудники];

должен ли я работать над этим? Я имею в виду, со мной.X.Value=username1.
Я не знаю, смогу ли я добраться до объекта, который находится в другой таблице базы данных.

Gustav Brock

Если ваш combobox привязан к первому полю id, а username1 содержит идентификатор (из строки: username1 = Me.tb_ID.Value), вы должны иметь возможность назначить этот идентификатор combobox, и он отобразит имя.
Чтобы "добраться" до другого объекта из другой таблицы, настройте запрос так, чтобы он имел соединение с этой таблицей.

Atipos

Я прошу прощения за свое невежество, но я новичок с vba и доступом. По этой причине я спрашиваю: чтобы присвоить идентификатор username1 combobox, нужно ли мне делать это через Employee_AfterUpdate ()?

Gustav Brock

Из формы вы можете сделать это в любом месте. Выше я предположил текстовое поле, теперь одна кодовая строка должна гласить::

Меня!YourCombobox.Значение = имя_пользователя1

Atipos

Это всегда приводит меня к ошибкам. Что, если я просто проверю, является ли username1=employee?
Может ли это сработать?

Gustav Brock

В чем же ошибка? И какое значение вы ему придаете? И это действительное удостоверение личности?

Atipos

Всегда время выполнения 2113 введенное значение недопустимо для этого поля.
Я не понимаю, потому что, когда я сделал это, я.Rmployee_Label.Caption=username1, это работает, но измените метку.
С помощью свойства Value выдайте эту ошибку...

Gustav Brock

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

Atipos

Я понимаю, что глобальная переменная-это не строка. Но я объявил его "публичным именем пользователя 1 Как строку"...

Это потому, что если я переименую combobox Employee1 (когда это был сотрудник, он был в отличие от другого сотрудника), а затем:

Меня.Employee1.Значение = имя_пользователя1

Получается, что введенное вами значение не является допустимым для данного поля.

Gustav Brock

Если вы объявите глобальную переменную как String, она будет содержать строку.
Если tb_ID-это число, то username1 должно быть объявлено как Long:

имя_пользователя1 = меня.tb_ID.Значение

Atipos

Да, я уже объявил username1=Me.tb_ID.Value.
tb_ID-это имя текстового поля в маске входа, поэтому я помещаю в него текст (строку), поэтому username1 должен быть строкой.

(Кстати, спасибо Вам большое за то, что помогли мне в этот момент, я надеюсь, что у вас будут фантастические выходные!)

Gustav Brock

Итак, ID-это имя пользователя? Обычно ID-это число (длинное), и оно не соответствует вашему SQL:

Выберите [расширенные сотрудники].ID, [сотрудники продлены].[Имя сотрудника] от [расширенные сотрудники];

где, я думаю, имя-это имя пользователя.

Atipos

Источник строки предназначен для сотрудника, которого вы можете видеть на изображении. Это для маски А.
Идентификатор tb_ID-это маска входа, имя пользователя, которое я только что назвал tb_ID

Gustav Brock

Это очень запутанно. Вы должны назвать свои поля и элементы управления, чтобы отразить содержимое.

Если username1 содержит имя, которое должно соответствовать [Employees Extended].[Имя сотрудника], вы должны привязать combobox ко второму полю/столбцу, а не к первому - как это делается по умолчанию.

Atipos

Я понял, в чем ошибался. Я не помнил, чтобы ставил Employee как целое число, поэтому username1 не позволил мне ввести его.

Изменил тип, и теперь он работает отлично. Сообщите о своем ответе как о "принятом решении", потому что вы прекрасно объяснили.

Извините за беспорядок, большое вам спасибо

Gustav Brock

Отлично! Рад, что ты с этим разобрался.

Gustav Brock

Оно имеет. Возможно, вам следует раскрыть свой код.

Atipos

Я обновлю код по основному вопросу.

Gustav Brock

ОК. Но вы, похоже, ничему не присваиваете имя пользователя 1.