Модуль входа в систему
Я пытаюсь создать финансовую базу данных, которая требует, чтобы пользователи входили и выходили из системы. У меня эта часть работает правильно. На домашней странице базы данных я пытаюсь получить последние 25 (или X число) транзакций для отображения с помощью запроса. По какой-то причине я не могу передать код, так как он показывает "Несоответствие типов данных". Вот различный код - я объясню каждый, как я иду:
Опция сравнения глобальных переменных (мой глобальный модуль)
глобальные переменные Глобальный C, длинный Глобальный C2, длинный Глобальный HoldString в виде строки Глобальный флаг в виде логического глобального ответа в виде строки Глобальный mbReply в виде VbMsgBoxResult
Global User As String
Global GUser As Long
Global db As Database
Ниже приведены Subs() для входа (первая Sub() для кнопки "Выход", вторая Sub() для кнопки входа):
Опция сравнения базы данных
Частный Sub B_Exit_Click ()
mbReply = MsgBox(title:="Exit", _
prompt:="Are you sure you wish to exit the system?", _
Buttons:=vbYesNo)
If mbReply = vbNo Then
Exit Sub
Else
DoCmd.Quit acQuitSaveNone
End If
End Sub
Закрытые переменные Sub B_SignIn_Click() 'Установите db = CurrentDb() Dim Сотрудники как DAO.Recordset Установите Employees = db.OpenRecordset("Сотрудники", dbOpenDynaset)
Dim isEmployeed As Boolean
Dim PassMatch As Boolean
Dim isTerm As Boolean
'проверить, есть ли пользователь в системе isEmployeed = False PassMatch = False isTerm = False
Do While Not Employees.EOF
If Employees![UserName] = T_Username.Value Then
isEmployeed = True
'make sure the employee is not terminated
If Employees![Terminated] = "Yes" Then
isTerm = True
End If
If isTerm = True Then
MsgBox ("This user has been terminated.")
Exit Sub
End If
'make sure password is correct
If Employees![Password] = T_Password.Value Then
PassMatch = True
End If
If PassMatch = False Then
MsgBox ("Incorrect Password.")
Exit Sub
End If
'mark signed in
Employees.Edit
Employees![SignedIn] = 1
Employees.Update
User = Employees![FirstName] & " " & Employees![LastName]
GUser = Employees![ID] 'Sets GUswer to equal record ID.
End If
Employees.MoveNext
Loop
If isEmployeed = False Then
MsgBox ("This username is not in the system.")
Exit Sub
End If
'закройте эту форму и откройте главное меню Employees.Close DoCmd.OpenForm FormName: = "HomePage" DoCmd.Close acForm, Me.Name, acSaveNo
End Sub
Следующий мой код SQL для запроса:
ВЫБЕРИТЕ ТОП 25 Spend.ID, Spend.Vendor, Spend.MaterialGroup, Spend.GLCode, Spend.CostCenter, Spend.Department, Spend.InvoiceNumber, Spend.InvoiceDate, Spend.Amount, Spend.Tax, Spend.Total, Spend.DateEntered, Spend.DocNumber, Spend.Description, Spend.[Платный?], Spend.EnteredBy, Spend.EnteredBy
ОТ потратить
WHERE (((Spend. [EnteredBy]) = "GUser"));
Spend. [EnteredBy] связан с таблицей Employees. Так что EnteredBy на самом деле является числовым полем из-за этой связи.
Если я жестко закодирую выражение WHERE, чтобы оно было чем-то вроде (((Spend.[EnteredBy])=2)); тогда запрос будет работать нормально.
В конечном счете, я хочу, чтобы запрос показывал последние 25 записей данных, которые выполнил вошедший в систему пользователь.
Надеюсь, это имеет смысл. Если есть вопросы, пожалуйста, дайте мне знать. Я чувствую, что упускаю что-то маленькое, но не могу понять.
Спасибо,
Кларк
1 ответ
Ваш запрос должен читать:
SELECT TOP 25 Spend.ID, Spend.Vendor, Spend.MaterialGroup, Spend.GLCode, Spend.CostCenter,
Spend.Department, Spend.InvoiceNumber, Spend.InvoiceDate, Spend.Amount, Spend.Tax, Spend.Total,
Spend.DateEntered, Spend.DocNumber, Spend.Description, Spend.[Paid?], Spend.EnteredBy, Spend.EnteredBy
FROM Spend WHERE (((Spend.[EnteredBy])=" & GUser & "));
Обратите внимание на амперсанды ( &), которые я поместил до и после вашей переменной GUser. Это говорит Access, чтобы оценить это выражение и вернуть его VALUE.
Я бы также предостерег вас от использования имени "Пользователь" в качестве имени переменной. Это зарезервированное слово в доступе: