В моей программе есть опция «Выход из системы», чтобы вывести текущего пользователя из системы и вернуться на экран входа в систему, а не просто выйти всей программы.Отключить элементы управления формой для заданного временного предела, чтобы предотвратить неправильную логику
У меня есть база данных для правильного обновления при выходе из системы, однако, когда основная форма закрывается и возвращается на экран журнала, есть небольшая логическая ошибка.
Когда я ввожу имя пользователя и пароль, затем нажмите «Вход в систему» и «Продолжить», отобразится MessageBox
, чтобы показать, что текущий пользователь уже вошел в систему. Это функция, которую я реализовал, но она не должна показывать сообщение на этом этапе.
После того, как вы перешли и проверили базу данных, пользователь вышел из системы правильно, но база данных не обновилась достаточно быстро, поэтому кажется, что пользователь все еще зарегистрирован.
Пример:
я войти в систему как "user1", мой тестовый пользователь. Имя пользователя и пароль - «1».
Я выхожу, код исполняется.
На экран входа в систему, я использую следующий ключевой шаблон: + TAB + ввести имя пользователя и пароль 1 в соответствующих текстовых полях. Затем я использую . Введите + Введите, чтобы активировать кнопки, щелкнув события входа в систему и перейдите к кнопкам.
В общем, это занимает, возможно, секунду, максимум 2 секунды.
Однако это вызывает сообщение, в котором говорится, что пользователь уже вошел в систему.
Тем не менее, если я просто введи имя пользователя/пароль и подождал пару секунд, прежде чем нажимать «Вход в систему», значит, он отлично работает. Таким образом, база данных не уделяется времени на обновление.
Итак, есть способ отключить ведение журнала на элементах формы формы в течение секунды или двух, чтобы дать базе данных возможность зафиксировать изменения?
По существу, есть два способа, которыми я мог бы это сделать;
Я мог бы задержать основную формы закрытия в течение 2 секунд, перед закрытием/показывая журнал по форме (Попробованной с
Application.DoEvents
подпрограммы, но журнал по форме просто показал в любом случае, так как она всегда открыта в фоновом режимеИли просто показать курсор ожидания, но отключить текстовые поля в течение 2 секунд, когда он получает сосредоточены
код для регистрации от процесса:.
sql = "UPDATE [System Settings] SET usersOnline = ?"
Dim cmd As New OleDbCommand(sql, con)
cmd.Parameters.Add("@users", OleDbType.VarChar).Value = users
cmd.ExecuteNonQuery()
Try
sql = "UPDATE [Users] SET [isOnline] = ? WHERE User_ID = ?"
Dim update As New OleDb.OleDbCommand(sql, con)
update.Parameters.Add("@isOn", OleDb.OleDbType.Boolean).Value = False
update.Parameters.Add("@ID", OleDb.OleDbType.VarChar).Value = user
update.ExecuteNonQuery()
Catch
End Try
Войдите на кнопку Код:
For Each userRow In mainDBset.Tables(0).Rows
If userRow.Item("User_ID") = txtUser.Text And userRow.Item("Password") = txtPw.Text Then
If usersOnline >= maxUsers Then
MsgBox("Unable to log in, max user limit of '" & maxUsers.ToString & "' has been reached - '" & usersOnline & "' currently logged on.", MsgBoxStyle.OkOnly, "Max User Limit Reached")
Exit Sub
End If
sql = "SELECT * FROM [Users] WHERE [User_ID] = ?"
Dim checkCMD As New OleDb.OleDbCommand(sql, mainDBconnection)
Dim checkAdapter As New OleDb.OleDbDataAdapter(checkCMD)
checkAdapter.SelectCommand.Parameters.Add("@ID", OleDb.OleDbType.VarChar).Value = txtUser.Text
Dim cDt As New DataTable
Dim cDs As New DataSet
checkAdapter.Fill(cDs)
cDt = cDs.Tables(0).Copy()
If cDt.Rows(0).Item("isOnline") = True Then
MessageBox.Show("This user is already logged into the system, so cannot be logged in again.", "Error Logging On", MessageBoxButtons.OK)
Exit Sub
End If
Хммм ... Я никогда не слышал о сценарии, где это происходит, и данные базы данных не обновляются вовремя ... Есть ли возможность для вас закрыть соединение, а затем повторно открыть его, когда Вход в форму загружается? – David
@ David Спасибо за ваше предложение, но нет, я уже пробовал это, база данных все еще говорит, что пользователь вошел в систему. Мне действительно нужна задержка, чтобы предотвратить ее. – Harambe
Так что, чтобы быть понятным, вы говорите, что вызов функции обновления возвращается до завершения обновления? – peterG