Модуль входа в систему

Я пытаюсь создать финансовую базу данных, которая требует, чтобы пользователи входили и выходили из системы. У меня эта часть работает правильно. На домашней странице базы данных я пытаюсь получить последние 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.

Я бы также предостерег вас от использования имени "Пользователь" в качестве имени переменной. Это зарезервированное слово в доступе:

http://office.microsoft.com/en-us/access-help/access-2007-reserved-words-and-symbols-HA010030643.aspx

Другие вопросы по тегам