首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析登录表单中的if语句

如何解析登录表单中的if语句
EN

Stack Overflow用户
提问于 2019-12-03 16:41:20
回答 3查看 78关注 0票数 0

每当我点击一个没有注册到数据库的RFID,它就不会显示msgbox。我使用一些使用else的条件语句,但它也不起作用。我试过不等于操作符,但也没有工作

代码语言:javascript
复制
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    process1:
    Try

        rec = New ADODB.Recordset
        rec.Open("SELECT * from admin where rfid='" & TextBox4.Text & "'", con, 1, 2)

        Dim y As Integer
        y = 0

        While Not rec.EOF

            rec.MoveNext()
            y = y + 1

        End While

        If y = 1 Then
                Timer1.Stop()
                Me.Hide()
                MsgBox("VALID RFID! WELCOME ADMIN!")
                SystemForm.Show()
                TextBox4.Text = ""

            If y <> 1 Then

                Timer1.Stop()
                MsgBox("Invalid RFID NO.!")
                TextBox4.Text = ""

            End If

        End If


    Catch ex As Exception
        Timer1.Stop()
        MsgBox("Invalid RFID NO.!")
        TextBox4.Text = ""
    End Try

End Sub
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-03 23:32:34

您是在代码中启用计时器,还是在设计器中将“启用”设置为“真”?你为计时器设定了什么时间间隔?听起来,上面发布的代码是在您能够填充文本框之前运行的。

当我捕获异常时,我使用消息和StackTrace来报告错误。您可能希望替换异常处理程序中的MsgBox文本,以便它对您更有帮助。我愿意打赌,您看到的MsgBox实际上是从Catch块中得到的。

票数 0
EN

Stack Overflow用户

发布于 2019-12-03 16:59:18

我认为else对你来说是最好的例子。我还将一些共享逻辑从条件中移出:

代码语言:javascript
复制
Timer1.Stop()

If y = 1 Then
    Me.Hide()
    MsgBox("VALID RFID! WELCOME ADMIN!")
    SystemForm.Show()
Else
    Timer1.Stop()
    MsgBox("Invalid RFID NO.!")
End If

TextBox4.Text = ""

从长远来看,我还会做很多其他的修改,包括在查询中使用SELECT COUNT(rfid),它将始终返回一个数字,并且实际上从总体上脱离了ADODB,但是上面的内容可能会得到您想要的结果。

编辑

以下是包含特定调试点的完整替代版本。我是一个长期VB的家伙,但我承认我有点生疏,所以你可能需要调整一两件事。

一些非常重要的事情:

  1. ,我移除了try/catch。我总是建议保存,直到你有工作的代码,它往往隐藏微小的小错误。当您正在开发一些东西时,例外情况会告诉您首先发生了什么问题,并且您真的很想看到这些问题。
  2. --我使用MsgBox来显示字符串,而理想情况下,您应该使用控制台,但我这样做是因为这就是您的代码是如何定义为重要的的。不管SQL是什么,都必须在数据库上手动运行,而MsgBox仍然是打开的。这很关键。手动运行它将告诉您是否有语法错误,或者可能存在类型转换问题。使用仍然打开的MsgBox运行它将(更好)保证您没有可能与数据库对话的其他代码的争用条件。如果对数据库手动运行SQL并不能产生您预期的结果,那么修复它,或者在这里发布问题供我们查看,包括任何错误。如果手动运行SQL,但代码不起作用,请检查连接对象,也许您正在与另一个数据库?

对话

代码语言:javascript
复制
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    Timer1.Stop()

    ' First lets find out what is in the text box
    MsgBox("Searching for rfid: " & TextBox4.Text)

    ' Next, lets take a look at the SQL
    sql = "SELECT * from admin where rfid='" & TextBox4.Text & "'"
    MsgBox("Using SQL: " & sql)

    rec = New ADODB.Recordset
    rec.Open(sql, con, 1, 2)

    Dim y As Integer
    y = 0

    While Not rec.EOF
        rec.MoveNext()
        y = y + 1
    End While

    Timer1.Stop()

    If y = 1 Then
        Me.Hide()
        MsgBox("VALID RFID! WELCOME ADMIN!")
        SystemForm.Show()
    Else
        MsgBox("Invalid RFID NO.!")
    End If

    TextBox4.Text = ""

End Sub
票数 1
EN

Stack Overflow用户

发布于 2019-12-04 04:27:10

首先,为什么要使用一个有十年历史的开发工具。VisualStudio2019社区免费下载。

完全摆脱Timer,只需使用登录按钮即可。

让我们进入当前的十年,使用ADO.net而不是ADODB

由于我不知道您使用的是哪个数据库,所以我给出了一个使用Server的示例。如果数据库是Access的,则必须将Sql数据库对象更改为OleDb对象。在文件顶部导入以下内容之一。

代码语言:javascript
复制
Imports System.Data.SqlClient

代码语言:javascript
复制
Imports System.Data.OleDb

数据库对象需要关闭和处理。即使有错误,Using...End Using块也会为您处理这个问题。您可以将连接字符串直接传递给连接的构造函数,命令文本和连接直接传递给命令的构造函数。注意,它们都包含在同一个使用块中。

当你只需要数数的时候,不要拉下数据。只需要数一数。永远不要连接字符串来构建Sql查询。始终使用参数以避免Sql注入。

我不得不猜测rfid的数据类型。检查数据库的实际类型,并相应地调整代码。

如果结果集为.ExecuteScalar,则返回第一行,第一列。在这种情况下,记录计数。

请注意,连接直到.Execute...之前才会打开。它在使用End Using之后立即关闭。在连接关闭之前,我们不会开始比较结果和显示消息框。

如果您尝试了这段代码,但是它不起作用,请告诉我们错误是什么以及它发生在哪一行。

代码语言:javascript
复制
Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Tick
    Dim RetVal As Integer
    Using cn As New SqlConnection("Your connection string"),
            cmd As New SqlCommand("Select Count(*) Form admin Where rfid = @rfid;", cn)
        cmd.Parameters.Add("@rfid", SqlDbType.Int).Value = CInt(TextBox4.Text)
        cn.Open()
        RetVal = CInt(cmd.ExecuteScalar)
    End Using
    If RetVal = 1 Then
        MsgBox("VALID RFID! WELCOME ADMIN!")
        SystemForm.Show()
        Me.Hide()
    Else
        MsgBox("Invalid RFID NO.!")
    End If
    TextBox4.Text = ""
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59161637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档