VB登陆程序错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB登陆程序错误相关的知识,希望对你有一定的参考价值。

Public Class Form1

Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim UserName As String

Dim PassWord As String

Dim conn As New ADODB.Connection '定义新的连接

Dim rs As New ADODB.Recordset '定义新的记录集

Dim StrSQL As String '定义字符串StrSQL

conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\学习\VB\User.mdb") '打开连接,指定连接路径和支持

conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\db1.mdb") '打开连接,指定连接路径和支持

UserName = Trim(TxtUserName.Text) '将文本框内的值赋给定义好的变量,trim为类型转换函数
PassWord = Trim(TxtPassword.Text)

If UserName = "" Or PassWord = "" Then '如果输入的用户名和密码为空则

MsgBox("对不起,用户或密码不能为空!请重新输入!!", vbCritical, "错误")

ElseIf UserName <> Nothing And PassWord <> Nothing Then '否则如果用户名与密码都不为空则Cnum自加1,Cnum为窗体载入时添加数字变量,用于记录错误登录次数

Cnum = Cnum + 1

StrSQL = "select * from User where User_ID = '" & UserName & "'and User_PWD ='" & PassWord & "'"
'从用户信息表中查询用户名称和用户口令两个字段并获得属性值,为下面的判断语句做准备
rs.Open(StrSQL, conn, adOpenKeyset, adLockPessimistic) '//打开记录集,可以用数字代替

If rs.EOF = True Then '此句为判断的核心语句,EOF的返回值表示为最后一行的后一行,和BOF类似,返回值为TRUE,则表示表中不存在这一行记录,由此判断密码是否与表中记录相一致,从而达到验证的目的。
MsgBox("对不起,无此用户或者密码不正确!请重新输入!!", vbCritical, "错误")
TxtUserName.Text = "" '置文本框为空
TxtPassword.Text = ""
TxtUserName.SetFocus()
rs.Close()
If Cnum >= 3 Then MsgBox("对不起,您已经多次失败,无权操作本系统!", vbCritical, "无权限")
Unload(Me)
Exit Sub
End If
Else '登陆成功,以下为权限验证

Form2.Show()
Unload(Me)

End If

End If

End Sub

Private Sub Form_Load()
Cnum = 0
End Sub
End Class

错误:未声明名称“Cnum”。
错误:未声明名称“adOpenKeyset”。
错误:未声明名称“adLockPessimistic”。
错误:“SetFocus”不是“System.Windows.Forms.TextBox”的成员。
错误:未声明名称“Unload”。
怎麼改?解决了补分..

cnum 没有声明dim的声明一下,

你必须明白,如果你用 vb.net 做开发就别再用 ado 而改用ado.net
用oledb.oldbconnection代替 adodb.connection
如果你坚持在 .net 中用ado,请添加引用,引用 com 中的 ado

setfocus 不是.net 用法 改成 focus
unload改成 close
或者你可以用vb.net 的自带工具,升级vb6的代码。
参考技术A 未声明的变量就用 dim 声明一下

没有的函数或方法 就要创建相关的过程或函数
参考技术B 你这又有VB的又有VB.net的,比较乱

cnum没有定义
vb.net直接用focus(),没有setfocus
unload改为me.close()
其它没找到在哪,应该是没有声明IO

VB6 程序无法打开 Excel 2007,未注册自动化错误库

【中文标题】VB6 程序无法打开 Excel 2007,未注册自动化错误库【英文标题】:VB6 program fails opening Excel 2007 with Automation Error Library not registered 【发布时间】:2014-07-30 05:36:12 【问题描述】:

我在装有 Office 2010 32 位的 Windows 7 32 位机器上创建了这个 VB6 程序,它运行良好。在装有 Office 2013 32 位的 Windows 8 64 位机器上对其进行了测试,它可以工作。在一台装有 Windows 7 64 位和 Office 2007(仅限 32 位)的机器上,它会在以下代码段中引发错误。

实际的错误信息:

运行时错误 –2147319779 (8002801d) 自动化错误,库不是 已注册

VB6 代码:

If (excel_app Is Nothing) Then
    Set excel_app = CreateObject("Excel.Application")
Else
    Set excel_app = GetObject(, "Excel.Application")
End If

excel_app.Visible = True
excel_version = excel_app.Application.Version
Set wBook = excel_app.Workbooks.Open(directory_path & "\templates\book1.xlsm")

所以当我打开 book1 时它会抛出错误。它实际上确实打开了它,并且它在 Workbook_Open() 上运行了一个宏,这看起来很好。在它完成并且程序的处理返回到 VB6 程序后,它会抛出错误。

以下是项目参考:

有人遇到过这个问题吗?解决办法是什么?

[编辑]

我显然做错了,我的错误处理程序抛出了一个错误。

我确实尝试了另一件事,它被删除了“Set wBook =”并且它没有引发错误。从那时起,我已经放置了“Set wBook =”,因为我确实需要在我的代码中进一步使用它。

    Dim wBook As Workbook
    Dim excel_app As Object

    On Error GoTo trialhandler

    If (excel_app Is Nothing) Then
        Set excel_app = CreateObject("Excel.Application")
    Else
        Set excel_app = GetObject(, "Excel.Application")
    End If

    excel_app.Visible = True
    excel_version = excel_app.Application.Version
    Set wBook = excel_app.Workbooks.Open(directory_path & "\templates\book1.xlsm")

    MsgBox ("Exiting")
    Exit Sub
trialhandler:

    Dim source_string As String
    source_string = excel_app.Source 'Error here
    MsgBox ("My Error 1:" & source_string)
    excel_app.Err
    MsgBox ("My Error 2:" & excel_app.Err.Number & "  " & excel_app.Err.Description)

    Exit Sub

我之前在上面安装了Office 2013,然后卸载它并在上面放置了2007,这会有什么影响吗?或者我已经参考 Excel 2010 创建了这个程序,现在我正试图针对 Office 2007 运行它?虽然它可以在 2013 年的另一台机器上运行。在这里抓住稻草。

[编辑 2]

它已经通过了初始错误,以后会抛出完全相同的错误。这篇文章导入了一个 mdb 表。一定还有一些早期的绑定遗留下来

    With wBook.Worksheets("Seal Register").ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=" & db_full_path & ";" _
        , _
        "Mode=ReadWrite;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" _
        , _
        "Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;" _
        , _
        "Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;" _
        , _
        "Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;" _
        , _
        "Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"), _
        Destination:=Range("A" & row_number)).QueryTable
        .MaintainConnection = False
        .CommandType = xlCmdTable
        .CommandText = Array(db_table_name)
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = 1
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = db_full_path
        .ListObject.DisplayName = "Table_" & db_table_name
        .Refresh BackgroundQuery:=False
    End With

【问题讨论】:

【参考方案1】:

没有理由认为这是一个 vb 错误。

返回或设置最初产生错误的对象或应用程序的名称。

object.Source [= stringexpression]

参数 目的 总是 Err 对象。

字符串表达式 表示产生错误的应用程序的字符串表达式。

备注 Source 属性指定一个字符串表达式,该表达式通常是导致错误的对象的类名或编程 ID。当您的代码无法处理访问对象中生成的错误时,请使用 Source 为您的用户提供信息。例如,如果您访问 Microsoft Excel 并生成除以零错误,Microsoft Excel 将 Err.Number 设置为该错误的错误代码,并将 Source 设置为 Excel.Application。请注意,如果错误是在 Microsoft Excel 调用的另一个对象中生成的,Excel 会截取错误并将 Err.Number 设置为它自己的代码,即除以零。但是,它将其他 Err 对象(包括 Source)保留为由生成错误的对象设置。

Source 始终包含最初产生错误的对象的名称——您的代码可以尝试根据您访问的对象的错误文档来处理错误。如果您的错误处理程序失败,您可以使用 Err 对象信息向您的用户描述错误,使用 Source 和另一个 Err 来告知用户最初是哪个对象导致了错误,它对错误的描述等等。

从自动化 Microsoft Office 97 和 Microsoft Office 2000 洛瑞·特纳 微软公司

2000 年 3 月

问题: 我的自动化客户端在我的应用程序的 Office 97 版本中运行良好。但是,我重建了我的项目,它在 Office 2000 上运行良好,但现在在 Office 97 上失败了。可能出了什么问题?

新版本的 Office 包含新功能并增强了一些现有功能。为了向客户提供对这些新功能和增强功能的编程访问,必须更新对象模型。由于此更新,Office 2000 的方法可能比 Office 97 具有更多的参数。

现有方法的新参数通常是可选的。如果您使用后期绑定到 Office 自动化服务器,您的代码应该可以在 Office 97 或 Office 2000 上成功运行。但是,如果您使用早期绑定,则 97 和 2000 类型库之间的差异可能会导致您在以下情况下出现问题:

如果您在 Visual Basic 中创建自动化客户端并引用 Office 2000 类型库,如果您调用已更改的方法或属性,则在使用 Office 97 服务器时您的代码可能会失败。

如果您创建 MFC 自动化客户端并使用 ClassWizard 包装 Office 2000 类型库中的类,如果您调用已更改的方法或属性,则在使用 Office 97 服务器时您的代码可能会失败。 为避免此问题,您应该针对您打算支持的最低版本的 Office 服务器开发您的自动化客户端。为了在保持与多个 Office 版本的兼容性方面获得最佳结果,您应该使用后期绑定。但是,如果您选择使用早期绑定,请绑定到您想要支持的最早版本的 Office 服务器的类型库。举例来说,如果您正在使用 Visual Basic 编写自动化客户端并希望该客户端使用 Excel 97 和 Excel 2000,则应在 Visual Basic 项目中引用 Excel 97 类型库。同样,如果您使用 MFC 编写自动化客户端,您应该使用 ClassWizard 来包装 Excel 97 类型库。

有关详细信息,请参阅 Microsoft 知识库中的以下文章:

Q224925 信息:Office 2000 的类型库已更改

【讨论】:

谢谢,我会添加一些错误处理,看看我想出了什么。 在获取源代码时遇到了一些问题。我在上面的问题中提出了Edit,反映了这一点。 使用vb的err对象,应该和excel的一样 好的,谢谢。错误来源说 Project1 所以我猜它确认它来自 VB6 程序。我将在开发机器上安装 Office 2007,然后更改我的引用并再次编译。 也许将 wbook 更改为 as object 可能就足够了。

以上是关于VB登陆程序错误的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET编好程序后一运行就提示生成错误,重装VB好几遍了还是不行

将应用程序从 VB 重写为 C++ 并得到错误 0070

使用 VB.NET 应用程序手动创建 MySQL 触发器(语法错误)

VB6 程序无法打开 Excel 2007,未注册自动化错误库

vb程序登陆的用户名和密码在哪里找?

如何解决 vb.net 应用程序中的 mysql 定义错误?