ODBC配置数据源及相关问题(“找不到工程和库”“实时错误91对象变量或with块变量未设置”等)

目录

  • 背景
  • 遇到的问题及解决步骤
    • 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文件是什么,再下次知道了为什么如此配置,最后,懂得了原理,再不用看步骤,报错很容易定位,也很快的解决了,这就是成长性学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/172523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用DHorse发布SpringBoot项目到K8S

前言 在介绍DHorse的操作之前,先来介绍一下使用k8s发布应用的步骤,以SpringBoot应用为例进行说明。 1.首先从代码仓库下载代码,比如GitLab; 2.接着进行构建,比如使用Maven; 3.如果要使用k8s作为编排&am…

实在智能出席山东省数据科学大会,构建产学研教数智创新生态

11月18日至19日,由山东大学、山东省科学技术协会、山东省大数据局主办的首届“山东省数据科学大会暨泰山科技论坛”在山东大学(中心校区)隆重召开,以“数聚慧能 科创未来”为主题,来自全国各地的高校、科研机构、企事业…

数据结构与算法之美学习笔记:24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?

目录 前言二叉查找树(Binary Search Tree)二叉查找树的时间复杂度分析解答开篇内容小结 前言 本节课程思维导图: 二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。我们之前说过,散列表也是支持…

idea中的sout、psvm快捷键输入,不要太好用了

目录 一、操作环境 二、psvm、sout 操作介绍 2.1 psvm,快捷生成main方法 2.2 sout,快捷生成打印方法 三、探索 psvm、sout 底层逻辑 一、操作环境 语言:Java 工具: 二、psvm、sout 操作介绍 2.1 psvm,快捷生成m…

SpringCloud原理-OpenFeign篇(三、FeignClient的动态代理原理)

文章目录 前言正文一、前戏,FeignClientFactoryBean入口方法的分析1.1 从BeanFactory入手1.2 AbstractBeanFactory#doGetBean(...)中对FactoryBean的处理1.3 结论 FactoryBean#getObject() 二、FeignClientFactoryBean实现的getObject()2.1 FeignClientFactoryBean#…

Flutter笔记:使用相机

Flutter笔记 使用相机 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134493373 【简介】本文介绍在 Fl…

用VS编译ROS包

扩展安装 在扩展中搜索并安装ROS、C、python、CMake和CMake Tools。 打开工作空间 文件→打开文件夹 新建功能包 右键src文件夹,选择新建功能包(通常是最后一条命令) 编译 如果需要新建终端的话,就点击下图中的加号 创建la…

Git 笔记之gitignore

解释为:git ignore 即,此类型的文件将会被忽略掉,从而不会进行管理 具体的模板可以从 GitHub 网站上来进行设置 GitHub - github/gitignore: A collection of useful .gitignore templates Common_gitignore: gitignoregithub开源项目&…

Spring-IOC-@Value和@PropertySource用法

1、Book.java PropertySource(value"classpath:配置文件地址") 替代 <context:property-placeholder location"配置文件地址"/> Value("${book.bid}") Value("${book.bname}") Value("${book.price}") <bean id&…

C++ STL -->string类

文章目录 STL什么是STL String类string类对象的构造方式string类对象的容量操作string类对象的访问及遍历操作string迭代器函数遍历类对象 stirng类对象的修改操作string类非成员函数 STL 什么是STL STL全称standard template libaray-标准模板库 是C标准库的重要组成部分 不…

枚举 小蓝的漆房

题目 思路 核心思想是枚举 首先利用set记录每一种颜色 然后依次从set取出一种颜色作为targetColor&#xff0c;遍历房子 如果当前房子的颜色和targetColor不相同&#xff0c;就以当前房子为起点&#xff0c;往后长度为k的区间都涂成targetColor&#xff0c;并且需要的天数递增…

华为云cce健康检查有什么用?配置需要注意什么?

华为云cce健康检查 如上图&#xff0c;华为云健康检查可用来探测cce的实例运行状态&#xff0c;必要时cce会自动重启实例&#xff0c;达到cce持续服务。 但是配置时需要注意一下几个方面&#xff0c;否则cce的状态总是有些不正常。 1、http探查比较友好。因为我们的在cce里面…

深入理解强化学习——马尔可夫决策过程:马尔可夫决策过程和马尔可夫过程/马尔可夫奖励过程的区别

分类目录&#xff1a;《深入理解强化学习》总目录 《深入理解强化学习——马尔可夫决策过程》系列前面的文章讨论到的马尔可夫过程和马尔可夫奖励过程都是自发改变的随机过程&#xff0c;而如果有一个外界的“刺激”来共同改变这个随机过程&#xff0c;就有了马尔可夫决策过程&…

【ctfshow】web入门-信息搜集-web11~20

【ctfshow】web入门-信息搜集-web11~17 web11_域名其实也可以隐藏信息&#xff0c;比如flag.ctfshow.com 就隐藏了一条信息web12_有时候网站上的公开信息&#xff0c;就是管理员常用密码web13_技术文档里面不要出现敏感信息&#xff0c;部署到生产环境后及时修改默认密码web14_…

构建和应用卡尔曼滤波器 (KF)--扩展卡尔曼滤波器 (EKF)

作为一名数据科学家&#xff0c;我们偶尔会遇到需要对趋势进行建模以预测未来值的情况。虽然人们倾向于关注基于统计或机器学习的算法&#xff0c;但我在这里提出一个不同的选择&#xff1a;卡尔曼滤波器&#xff08;KF&#xff09;。 1960 年代初期&#xff0c;Rudolf E. Kal…

低代码服务商,中小型数字化软件服务商的新出路

数字化时代大背景下&#xff0c;企业信息化向数字化转型成为所有企业发展的必由之路&#xff0c;企业在对业务模式、流程、组织形式、信息技术等方面进行重新定义时&#xff0c;软件必然参与价值创造的全过程&#xff0c;这势必驱使软件成为推动数字化转型的“引擎”&#xff0…

Motion Plan之搜索算法笔记

背景&#xff1a; 16-18年做过一阵子无人驾驶&#xff0c;那时候痴迷于移动规划&#xff1b;然而当时可学习的资料非常少&#xff0c;网上的论文也不算太多。基本就是Darpa的几十篇无人越野几次比赛的文章&#xff0c;基本没有成系统的文章和代码讲解实现。所以对移动规划的认…

React结合antd5实现整个表格编辑

通过react hooks 结合antd的table实现整个表格新增编辑。 引入组件依赖 import React, { useState } from react; import { Table, InputNumber, Button, Space, Input } from antd;定义数据 const originData [{ key: 1, name: 白银会员, value: 0, equity: 0, reward: 0…

PHP中isset() empty() is_null()的区别

在PHP中&#xff0c;isset()、empty()和is_null()是用于检查变量状态的三个不同的函数。它们分别用于检查变量是否已设置、是否为空以及是否为null。在本文中&#xff0c;我们将详细解释这三个函数的用法、区别和适当的使用场景。 isset(): isset()函数用于检查一个变量是否已…

MSTP配置示例

多生成树可以实现链路的防环、冗余备份、负载均衡功能 拓朴如下&#xff1a; 主要配置如下&#xff1a; [R1] interface GigabitEthernet0/0/1ip address 10.1.1.254 255.255.255.0 # interface GigabitEthernet0/0/2ip address 10.2.2.254 255.255.255.0 #[S1] interface …