目录
- 背景
- 遇到的问题及解决步骤
- 1、找不到工程和库
- 问题分析
- 问题解决
- 2、 实时错误91,对象变量或with块变量未设置
- 问题分析
- 问题解决
- 3、文件dsn配置问题
- 什么是dsn文件,内容是什么,作用是什么
- ODBC配置dsn文件
- 配置文件dsn默认路径
- ODBC 32位和64位
- 总结
背景
再次回看学生信息管理系统,发现程序运行不了。
遇到的问题及解决步骤
1、找不到工程和库
问题分析
“找不到工程和库”,这种通常意味以下问题:
缺少引用的库文件。
可以通过“项目”菜单下的“引用”选项来添加对外部库文件的引用。如果某个库文件被添加到了工程中,但是该文件已被删除、移动或者更改了名称,那么在编译工程时就会出现“找不到工程和库”的错误。此时,需要检查工程的引用列表,并确保所有引用的库文件都存在于其指定的位置。
操作系统缺少必要的支持文件。
VB6.0 工程的编译和运行需要依赖一些操作系统提供的支持文件,比如 DLL 文件、ActiveX 控件、运行库等。如果操作系统缺少了这些文件,或者某些文件版本不兼容,那么也会导致“找不到工程和库”的错误。需要安装或更新相应的支持文件。
工程文件已被损坏。
如果工程文件本身已经损坏或者出现了错误,那么也可能会导致 VB6.0 在打开或编译工程时出现“找不到工程和库”的错误。此时,可以尝试从备份文件中恢复工程,或者重新创建一个新的工程文件。
问题解决
按照分析结果进行问题解决,“项目”菜单下的“引用”,可以看到“丢失:Microsoft Data Environment Instance 1.0”
Microsoft Data Environment(简称“DataEnv”)是一种 Visual Basic 6.0 中非常方便的数据访问方式。它允许你在 Visual Basic 6.0 中通过可视化设计界面来创建和管理数据连接、命令和记录集等,而不需要编写大量的代码。
出现“丢失:Microsoft Data Environment Instance 1.0”的错误,可能是因为程序无法正确加载或初始化 DataEnv 实例。可能得原因是
DataEnv 功能没有正确安装后注册:可以尝试重新安装 DataEnv 组件,或者通过检查注册表来确保这些组件已经正确注册。
DataEnv 实例没有正确初始化:在创建 DataEnv 实例之前,需要先设置一些必要的属性和连接信息,例如数据库连接字符串、SQL 查询语句等。如果这些信息没有正确设置,那么程序就会无法正确初始化 DataEnv 实例,从而导致这个错误。
检查之后发现缺失了MSDERUN.DLL文件
1、首先下载文件
我是X64系统,下载地址:
地址: https://cn.dll-files.com/msderun.dll.html
2、放到默认路径下
将DLL放入系统盘:\Program Files\Common Files\Designer下。
X64系统,还需要将DLL放入 系统盘:\Windows\SysWOW64 (X86的话,一般是放入系统盘:\Windows\System32)
3、注册
搜索命令提示符–>更多–>以管理员身份运行
在管理员命令符窗口输入:regsvr32 +msderun.dll注册的位置
例如
regsvr32 C:\Windows\SysWOW64\msderun.dll
点击Enter键后弹出如下提示:
关掉cmd窗口,再次运行项目,问题解决。
2、 实时错误91,对象变量或with块变量未设置
这个问题非常经典,表示正在引用一个未设置或为空的对象变量。
问题分析
直译,正在使用一个对象变量之前没有进行实例化。
首先要确保在使用对象变量之前对其进行实例化。例如,如果使用了一个类的实例,确保使用 Set 关键字为该对象变量赋值,如:Set obj = New MyClass。
对象变量可能已经被释放或设置为 Nothing。
在某些情况下,会手动将对象变量设置为 Nothing 或者对象已经被释放。在使用对象之前,确保对象变量的有效性。可以通过检查对象变量是否为 Nothing 来验证对象是否已正确设置。
对象变量的作用域存在问题。
如果对象变量的作用域不正确,例如在子程序内定义的对象变量在其他地方引用,可能会导致该错误。确保对象变量在需要引用它的范围内正确声明和初始化。
问题解决
定位到错误位置
无效的文件 dsn,dsn文件错误,要不然是配置错误,要不然是文件本身有错误,先来看看引用dsn的地方
模块中写了这部分代码
Public Function ConnectString() As String
'returns a DB ConnectString
ConnectString = "FileDSN=student.dsn;UID=sa;PWD=123456"
End Function
写的貌似没问题,那就看看配置dsn文件有没有问题吧,这就引出了下一个问题,dsn文件是什么,怎么来的,有什么用
3、文件dsn配置问题
什么是dsn文件,内容是什么,作用是什么
DSN (Data Source Name) 文件是一种文件格式,通常用于存储数据库连接信息的配置文件。DSN 文件包含了访问数据库所需的驱动程序和连接信息,可以用于简化应用程序对数据库的连接过程。
下面就是dsn文件的内容,指明了访问数据库所需的驱动,用户名,数据库,服务器等
可以通过 ODBC (Open Database Connectivity) 来创建 DSN 文件。ODBC 是一种标准的数据库接口,它允许应用程序使用 SQL 语言来访问不同类型的数据库。通过 ODBC 驱动程序,应用程序可以与数据库建立连接,执行查询、更新、删除等操作。
创建 DSN 文件的主要作用是简化数据库连接的过程。在应用程序中,通过指定 DSN 文件路径和名称,即可访问相应的数据库。同时,DSN 文件也可以提高数据库连接的灵活性,如果需要更换数据库或者修改连接信息,只需要修改 DSN 文件即可,而不需要修改应用程序代码。
ODBC配置dsn文件
创建DSN 文件
1、打开ODBC数据源——>选择文件DSN——>单击添加
2、选择sql sever,单机下一步(选择连接数据库驱动)
3、创建新的数据源,输入student
student是直接输入的,输入之后会放到dsn文件默认文件夹之下(这里是个坑,后面会详细讲解)
4、点击下一步,点击完成
5、单击完成,连接服务器,可以选择本地,也可以复制自己的服务器名称
6、单击下一步,选择使用用户输入登录ID和密码的SQL Server验证。配置用户名密码
7、单击下一步,这里选择你要连接的是哪个数据库
8、最后直接单击完成,单击测试数据源。
测试成功
配置文件dsn默认路径
错误依然存在,问题出在dsn文件所放的位置,以及在模块中指定的位置,是否还记得上面那段连接数据库的代码
Public Function ConnectString() As String
'returns a DB ConnectString
ConnectString = "FileDSN=student.dsn;UID=sa;PWD=123456"
End Function
这里FileDSN=student.dsn,直接指定了文件,那么程序怎么就能找到这个文件的,总得有指定路径的地方
回看odbc配置页面
这里默认显示文档,dsn文件必须放到文档目录下,否则代码中不能直接写FileDSN=student.dsn,而是要加上绝对路径,比如,不放到文档下面,而是放到E:\training program目录下,那这里就要写成
Public Function ConnectString() As String
'returns a DB ConnectString
ConnectString = "FileDSN=E:\training program\student.dsn;UID=sa;PWD=123456"
End Function
程序才能找到dsn文件
或者把dsn文件的目录修改一下,上图中“设置目录”就是设置默认路径的
先选好要设置的位置,这里选择的是c盘的文档,然后点击设置目录,点击确定,就会弹出上图所示弹窗,默认路径设置好之后,再次运行程序,所有问题解决了。登录成功。
ODBC 32位和64位
我的电脑中有ODBC 32位和64位,配置的时候也是让我疑惑了半天,该配置哪个
其实,试了一下,在32里创建会同步到64里,在64里创建会同步到32里面。
在 Windows 操作系统中,32位和64位的应用程序使用的是不同的 ODBC 驱动程序。因此,在32位的 ODBC 管理器中创建的数据源只能在32位的应用程序中使用,在64位的 ODBC 管理器中创建的数据源只能在64位的应用程序中使用。
在其中一个 ODBC 管理器中创建一个数据源时,该数据源会自动在另一个 ODBC 管理器中创建一个相同的数据源。这是因为 Windows 会根据我的操作自动将数据源信息写入注册表中,不论是在32位还是64位的 ODBC 管理器中对其进行修改。
但是需要注意的是,不是所有的 ODBC 驱动程序都同时支持32位和64位的系统。有些驱动程序只支持一种架构,这时候就需要在相应的 ODBC 管理器中创建数据源了。
总之,系统会自动在32位和64位的 ODBC 管理器中同步创建数据源,但具体使用哪个数据源还取决于应用程序所在的运行环境。
总结
学习是个反复的过程,记是永远记不住的,忘是很正常的,但一定是成长性的学习,知识忘记了,或者操作忘记了,捡起来,再次学习的时间会越来越短,每次也都会有新的理解和收获,就像第一次学odbc,只是按照别人的步骤操作,鼓捣一天,配置成功了,却不知道为什么,后来再配置知道了dsn文件是什么,再下次知道了为什么如此配置,最后,懂得了原理,再不用看步骤,报错很容易定位,也很快的解决了,这就是成长性学习。