2301_78323625 2024-05-20 23:40 采纳率: 0%
浏览 1

vb Refresh的方法失败 哪位可以告诉我下面哪里出错了

Private Sub Command1_Click()

Adodc1.RecordSource = "select * from login where 用户名 ='" & Text1 & "' and 密码='" & Text2 & "'"
Adodc1.Refresh

If Adodc1.Recordset.RecordCount = 1 Then
If Adodc1.Recordset.Fields(2) = "1" Then Form_main.Show Else Form_welcome.Show

Else
MsgBox "用户名或密码错误"
End If

End Sub

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-20 23:40
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的 Visual Basic for Applications (VBA) 代码中,Adodc1.Refresh 方法失败可能是因为以下几个原因:

    1. 数据库连接未设置或已断开。
    2. SQL 查询语句有语法错误。
    3. 访问权限问题。
    4. 表达式中的文本值没有正确地被引号包围。

    首先,确保您的 ADO Data Control(AdoDbc1)已经正确连接到数据库,并且有正确的数据源。这通常在用户窗体的初始化过程中完成。

    接下来,检查 SQL 查询语句是否正确。在 Adodc1.RecordSource 设置的 SQL 查询中,确保用户名和密码字段的名称是正确的,并且它们的值被适当的引号包围。此外,确保字段名与表的实际列名匹配,且大小写敏感性符合数据库的要求(某些数据库对大小写敏感,而其他数据库则不敏感)。这里有一个修正后的查询语句示例,它使用参数化查询以避免SQL注入攻击,并且更安全:

    Dim sql As String
    sql = "SELECT * FROM login WHERE [用户名] = ? AND [密码] = ?"
    Adodc1.RecordSource = sql
    Adodc1.Parameters.Append Adodc1.CreateParameter("Username", adVarChar, adParamInput, 50, Text1.Text)
    Adodc1.Parameters.Append Adodc1.CreateParameter("Password", adVarChar, adParamInput, 50, Text2.Text)
    Adodc1.Refresh
    

    如果问题仍然存在,您可以尝试关闭并重新打开数据库连接,然后再次刷新记录集。这可以通过调用 CurrentProject.Connection.CloseCurrentProject.Connection.Open 来实现。

    最后,如果以上步骤都无法解决问题,那么可能是数据库服务器本身的问题,比如服务未运行、网络问题或者数据库文件损坏。此时,建议您检查数据库服务器的状态以及网络连接。

    以下是修改后的代码:

    Sub Command1_Click()
        Dim sql As String
        Dim usernameParam As DAO.Parameter
        Dim passwordParam As DAO.Parameter
        
        ' Close the current connection if it's open.
        On Error Resume Next
        CurrentProject.Connection.Close
        On Error GoTo 0
        
        ' Open the connection if it's closed.
        If CurrentProject.Connection.State <> dbOpenConnected Then
            CurrentProject.Connection.Open
        End If
        
        ' Prepare the parameterized query.
        sql = "SELECT * FROM login WHERE [用户名] = ? AND [密码] = ?"
        Adodc1.RecordSource = sql
        Set usernameParam = Adodc1.CreateParameter("Username", adVarChar, adParamInput, 50, Text1.Text)
        Set passwordParam = Adodc1.CreateParameter("Password", adVarChar, adParamInput, 50, Text2.Text)
        Adodc1.Parameters.Append usernameParam
        Adodc1.Parameters.Append passwordParam
        
        ' Refresh the recordset.
        Adodc1.Refresh
        
        If Not Adodc1.Recordset.EOF And Not Adodc1.Recordset.BOF Then
            If Adodc1.Recordset.Fields(2) = "1" Then
                Form_main.Show
            Else
                Form_welcome.Show
            End If
        Else
            MsgBox "用户名或密码错误"
        End If
        
        ' Clean up parameters.
        Adodc1.Parameters.Remove usernameParam.Name
        Adodc1.Parameters.Remove passwordParam.Name
        Set usernameParam = Nothing
        Set passwordParam = Nothing
    End Sub
    

    如果问题依然存在,请检查数据库的连接字符串、访问权限和数据库状态。如果有任何进一步的问题,我可以提供更多的指导。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月20日

悬赏问题

  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥20 看图片)删除这个自动化录屏脚本就一直报错找不到脚本文件,如何解决?(相关搜索:bat文件)
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件