精华内容
下载资源
问答
  • VB VISDATA 数据库无法使用 3043错误 VB无法打开数据库
  • VB作为一个高效快捷的开发工具而言,在数据库开发上有着很好的表现。但是,对于很多初学者而言,入门时经常会看一些并非高效且封装得更加多的代码作为学习参考(如那种用什么控件、数据捆绑之类的范例代码),导致很...

    VB作为一个高效快捷的开发工具而言,在数据库开发上有着很好的表现。但是,对于很多初学者而言,入门时经常会看一些并非高效且封装得更加多的代码作为学习参考(如那种用什么控件、数据捆绑之类的范例代码),导致很多多初学者想深入时会更加茫然。其实,曾经很多用VB开发的数据库商用软件都不会用那种方法,因为弊病很多,效率也不高。先总结一下为什么说用数据控件效率不高。首先,作为数据库操作的对象而言,是不需要有用户界面的,完全可以在后来默默的查询数据供开发者在代码里任意使用,而控件,其实就是一个用窗口封装的代码模块,里面除了对接数据查询功能,还花了不少代码去搞窗口消息的处理和重绘之类的,当然除了浪费内存,还浪费CPU去处理那些窗口代码,与单纯的无界面后台操作数据库的方式而言,控件的效率肯定要打折扣,还有一个问题就是多窗口使用同一个数据库时,处理起来也很麻烦。再说说那种捆绑数据自动显示的弊病和问题吧。首先因为捆绑了数据源的控件都是自行去分析捆绑记录集的字段、类型、数据条数等,并根据数据源的触发事件将其需要显示的信息自动显示在数据表或输入框中,那么就意味着这些控件都有通过消息或管道进行侦听监控才触发的这些更新过程,这无形中又会浪费很多内存资源和CPU资源,效率肯定也会下降。再者就是灵活性差,因为他是根据记录集查询出来的内容变化整体输出或单条输出,而不是通过代码控制处理,碰到些想合并表格或做点表格表达式运算处理就有心无力了。所以,通常专业的商用软件很少有人会用这种数据控件或数据捆绑技术作为数据库操作的核心处理模式。那么我所谓的专业的商用软件具体用的是什么技术去实现这种数据库操作的呢?其实对于看了众多案例的初学者来说应该也可能见过,就是使用 ADO 对象,全称是 Microsoft ActiveX Data Objects,在VB引用里可以找到,不过你可能找到的有很多版本,如:

    具体选哪一个呢,其实都可以,保险点选个最低版本都兼容,当你勾选了一个ADO对象后选确定,然后点击“对象浏览器”按钮,然后再点开对象下拉列表,就可以看到一个新的对象 ADODB在你的工程中了,如:

    这时我们可以鼠标右键点击Form1窗口,在弹出的菜单选“查看代码”编辑些初始代码。

    而在编写代码前,我先介绍一下 ADO 对象,ADO 对象主要是负责与数据引擎对接的一个公共接口。其中比较常用的有两个部分,一个是链接对象 ADODB.Connection 和记录集 ADODB.Recordset,然后我再分别介绍一下这两个对象的一些功能和常用的方法与属性:

    ADODB.Connection 对象

    负责链接目标数据库(可以指定服务器、用户账号、密码、数据库名称、数据库文件地址等等信息与指定数据库连接),还可以直接在已连接数据库的对象上调用 Execute 方法执行 SQL 语句。

    常用的方法有:Open、Execute、Close,常用的属性有:State

    ADODB.Connection.Open 方法用来连接数据库
    ADODB.Connection.Execute 方法用来在已连接的数据库执行 SQL 语句
    ADODB.Connection.Close 方法可以关闭已连接的数据库
    ADODB.Connection.State 属性可以读取当前的连接状态
    当然,ADODB.Connection 还有其它很多方法、属性与事件,不过通常不常用,上面这些通常的程序够用了,如果想深入了解别的属性或方法,可以看看 VS6 的 MSDN 说明。

     

    ADODB.Recordset 对象

    负责利用以连接好的 ADODB.Connection 对查询出来的数据进行进一步的处理,所以 ADODB.Recordset 在使用是需要关联 ADODB.Connection 对象一起使用。

    常用的方法有:Open、MoveNext、Move、Close,常用的属性有:RecordCount、Fields、EOF等。

    当然像 AddNew、UpdateBatch、MoveFirst、MoveLast、MovePrevious、Delete 等等也是比较常用的,只是如果玩 SQL 语句进行创建、查询、插入、删除等操作,这些方法属性等都很少用到。

    ADODB.Recordset.Open 指定 ADODB.Connection 对象查询指定的 SQL语句
    ADODB.Recordset.MoveNext 将当前记录向下移动一条
    ADODB.Recordset.Move 将当前记录向上或向下移动到指定的条数,可以输入负数或正数
    ADODB.Recordset.Close 关闭查询结果
    ADODB.Recordset.RecordCount 取得已查询的数据条数(要得到数据条数不建议使用该属性,可以用SQL语句的Count聚合函数统计出数据结果,效率会更高)
    ADODB.Recordset.Fields 取得已查询的出的字段信息,包含字段名称、类型、数据等都可以读取或设置
    ADODB.Recordset.EOF 可以在死循环里判断是否移动到了数据结尾以结束死循环
     

    有了这两个对象后基本上就可以对数据库进行任何操作了,之后的关键就是去了解 SQL 语句了,不同的数据库在 SQL 语句的使用上会略有不同,但也是大同小异的,如 ACCESS的日期类型和MS SQLServer 的日期类型就有少许区别,ACCESS是用 #2019-12-06# 来指定日期,而 MS SQLServer 是用 '2019-12-06' 来指定日期等大同小异的区别。

    现在我们可以来看看具体的使用案例了:

    由于我们之前在工程里引用的 ADO 对象,所以我们可以在窗口代码里直接定义Connection与Recordset类型的变量,如:

    Private Sub Form_Load()
        Dim conn As Connection
        Dim rs As Recordset
    
    End Sub

    但是,VB的对象使用是需要初始化的,所以我们还需要为这两个对象变量进行初始化,过程如下:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
    End Sub

    接着我们需要先链接数据库,然后才能对数据库进行创建、查询、修改、插入、删除等操作,所以我们先来了解一下如何链接数据库。链接数据库之前有介绍,我们可以通过 Connection 的 Open 方法来连接数据库,具体格式是:

    对象.Open 字符串类型的连接语句,例如我们尝试链接一个存放在 d:\1.mdb 的 ACCESS 数据库,我们可以这样进行连接:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        
    End Sub
    

    但是,即使使用了 Open 方法尝试链接数据库也未必就能链接成功,因为可能文件被意外移动,文件被意外修改或是磁盘出现坏道什么的导致文件丢失,作为一个专业的软件不可能让一个不能确定的链接跑之后的程序的,所以需要对链接状态进行判断,确认链接状态不是关闭后才继续跑之后的程序,否则将提示错误做重新链接或退出程序之类的处理,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
    End Sub

    在开发这种 Open、Close 程序的时候,需要养成一个良好的习惯,就是当你写了 Open 之后,接着就想着在哪先写好 Close 过程,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    然后我们来进一步说一说 Connection 的 Execute 方法,通常 Execute 方法都是用作那种不需要返回,只需要执行一次SQL性操作的情况下使用,如:创建数据表、插入数据、修改数据、删除数据时使用,所以,接下来我们尝试在一个数据表中实现数据的插入、修改、删除等操作。例如我们 d:\1.mdb ACCESS数据库中有一个名为 user 的表,字段分别有 id、uid()、pwd、uname、sex,bd等,类型如图:

    然后我们尝试插入一条数据,代码如下:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 连接 ACCESS 数据库
        conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 插入数据 ----------
        conn.Execute "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES ('sk','123','人类',1,#2019-12-06#)"
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub

    然后我们先确保关掉 ACCESS 的情况下尝试运行程序,再用 ACCESS 打开数据库看看结果,发现数据已经插入成功了:

    但这时候我们会发现如果要同时插入多条数据SQL语句会很长,这时候还是直接在 Execute 方法后放字符串会很难管理字符串,所以我们可以在程序开头多定义一个字符串变量出来专门存储SQL语句,这样使用起来代码格式看起来会整洁很多:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 插入数据 ----------
        SQL = "INSERT INTO `user` ("
        SQL = SQL & "`uid`,"
        SQL = SQL & "`pwd`,"
        SQL = SQL & "`uname`,"
        SQL = SQL & "`sex`,"
        SQL = SQL & "`bd`"
        SQL = SQL & ") VALUES "
        SQL = SQL & "('sk','123','人类',1,#2019-12-06#)"
        
        conn.Execute SQL
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    然后我们再尝试一下删除所有数据

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 删除数据 ----------
        SQL = "DELETE FROM `user`"
        conn.Execute SQL
        
        '---------- 插入数据 ----------
        SQL = "INSERT INTO `user` ("
        SQL = SQL & "`uid`,"
        SQL = SQL & "`pwd`,"
        SQL = SQL & "`uname`,"
        SQL = SQL & "`sex`,"
        SQL = SQL & "`bd`"
        SQL = SQL & ") VALUES "
        SQL = SQL & "('sk','123','人类',1,#2019-12-06#)"
        conn.Execute SQL
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    这个时候我们再运行一次程序,会发现原先 ID 为 1 的数据变成了 ID 为 2 的数据,这是因为原来添加的那条 ID 为 1 的数据在程序一运行时就被无差别的清理掉了,然后这条 ID 为 2 数据是刚刚运行的程序才插入进去的。

    然后我们再尝试着同时加几条数据并尝试修改某条数据看看:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 删除数据 ----------
        SQL = "DELETE FROM `user`"
        conn.Execute SQL
        
        '---------- 插入数据 ----------
        SQL_INSERT = "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES "
        
        SQL = SQL_INSERT & "('sk','123','人类',1,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('ii','111','测试1',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('jjj','222','测试2',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('kk','333','测试3',0,#2019-12-06#)"
        conn.Execute SQL
        
        '---------- 修改数据 ----------
        ' 指定条件为 UID 为 jjj 的数据,将其 uname 改为 TestUserName, sex 改为 1
        SQL = "UPDATE `user` SET `uname`='TestUserName',`sex`=1 WHERE `uid`='jjj';"
        conn.Execute SQL
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub

    然后可以发现数据库添加了有4条数据, UID 为 jjj 的数据 uname 变成了 TestUserName:

    但老是这么用ACCESS来读数据也不是个办法,所以当我们了解了删除、插入、修改数据后,我们就来了解一下查询数据的方法了,让我们先按照步骤,先看看输入一个查询语句查询数据表的过程代码:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '---------- 删除数据 ----------
        SQL = "DELETE FROM `user`"
        conn.Execute SQL
        
        '---------- 插入数据 ----------
        SQL_INSERT = "INSERT INTO `user` (`uid`,`pwd`,`uname`,`sex`,`bd`) VALUES "
        
        SQL = SQL_INSERT & "('sk','123','人类',1,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('ii','111','测试1',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('jjj','222','测试2',0,#2019-12-06#)"
        conn.Execute SQL
        
        SQL = SQL_INSERT & "('kk','333','测试3',0,#2019-12-06#)"
        conn.Execute SQL
        
        '---------- 修改数据 ----------
        ' 指定条件为 UID 为 jjj 的数据,将其 uname 改为 TestUserName, sex 改为 1
        SQL = "UPDATE `user` SET `uname`='TestUserName',`sex`=1 WHERE `uid`='jjj';"
        conn.Execute SQL
        
        '---------- 查询数据 ----------
        SQL = "SELECT * FROM `user`"
        rs.Open SQL, conn, adOpenStatic, adLockReadOnly
        
        rs.Close
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
    End Sub
    

    看到查询语句部分很简单,就是记录集 rs 指定数据连接对象 conn 用已设置好的 SQL 语句查询并返回结果,然后记录集 rs 把存入相关属性或对象中,如把字段相关的结果存入记录集内的 Fields 对象中,当前是否是最后一条记录存到 EOF 属性中等等。所以这时候我们可以使用 RecordCount 属性的读取取得查询到的数据条数,这样就可以用 For 语句循环指定的次数,然后在每一次循环过程中向下移动一下数据就可以读取所有的数据并输出出来,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        Dim i As Long               ' 定义一个整数变量用作循环语句使用
        Dim str_out As String       ' 定义一个字符串变量用作输出文本用
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
        '---------- 查询数据 ----------
        str_out = ""
        SQL = "SELECT * FROM `user`"
        rs.Open SQL, conn, adOpenStatic, adLockReadOnly
        For i = 1 To rs.RecordCount
            If i > 1 Then
                str_out = str_out & vbCrLf
            End If
            str_out = str_out & rs!id & vbTab & rs!uname & vbTab & rs!uid & vbTab & rs!pwd
            If i < rs.RecordCount Then rs.MoveNext
        Next i
        rs.Close
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
        
        MsgBox str_out, 64, "数据"
        End
    End Sub
    

    也可以用 Do loop 这类死循环通过读取 EOF 属性来读取全部数据,如:

    Private Sub Form_Load()
        Dim conn As Connection      ' 定义数据连接对象变量
        Dim rs As Recordset         ' 定义记录集对象变量
        Dim SQL As String           ' 定义一个字符串变量用来存储 SQL 语句
        Dim SQL_INSERT As String    ' 定义一个字符串变量用来存储 SQL INSERT 语句
        Dim i As Long               ' 定义一个整数变量用作循环语句使用
        Dim str_out As String       ' 定义一个字符串变量用作输出文本用
        
        Set conn = New Connection   ' 初始化数据连接对象
        Set rs = New Recordset      ' 初始化记录集对象变量
        
        ' 设置数据库连接语句
        SQL = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\1.mdb"
        ' 连接 ACCESS 数据库
        conn.Open SQL
        If conn.State = 0 Then
            MsgBox "连接数据库失败,请您确定"
            End
        End If
        
        ' 已经正常连接数据库
        '...
        
        '---------- 查询数据 ----------
        str_out = ""
        SQL = "SELECT * FROM `user`"
        rs.Open SQL, conn, adOpenStatic, adLockReadOnly
        i = 1
        Do While Not rs.EOF
            If i > 1 Then
                str_out = str_out & vbCrLf
            End If
            str_out = str_out & rs!id & vbTab & rs!uname & vbTab & rs!uid & vbTab & rs!pwd
            i = i + 1
            If Not rs.EOF Then rs.MoveNext
        Loop
        rs.Close
        
        
        ' 完成所有数据操作关闭数据连接
        conn.Close
        
        MsgBox str_out, 64, "数据"
        End
    End Sub

    好了,这里就基本上算是能够插入、修改、删除、读取数据库了,如果想把查询的内容放到数据表内,可以用一些第三方表格控件来处理,通常都支持行列设置的,自己按行列设置表格数据,这样灵活性会很高,对于一些复杂的第三方表格控件来说,还支持合并表格,多表头的处理,用这种方法读写数据会快很多。

    展开全文
  • VB.NET数据库中插入数据

    千次阅读 2020-05-12 22:04:41
    本次继续,往数据库中添加数据,数据库仍然采用上一篇数据库联结中那个,本文只记录一下,通过VB.NET程序,往数据库中插入数据的步骤,至于原理自己掌握的水平有限,不过多深究,下面进入正题,开搞。 一、首先我们...

    本文记录一下如何通过VB.NET往数据中添加数据,所用数据库仍然用上节数据库联结那个,下图为设计的窗体应用程序,内容很简单,点击学生信息表,往这个表添加数据,点击学生成绩表往相应表添加数据。

    在这里插入图片描述
    图1
    二、接下来讲述代码部分,在这里先把完整代码晒出来,如下。

    Imports System.Data.OleDb
    Public Class Form1
        Dim odc1 As New OleDbConnection()  '数据库操作
        Dim odcommand As New OleDbCommand()
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            odc1.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=E:\博客\数据库联结\Database7.mdb"
            odc1.Open()
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Strxzyh As String
            Strxzyh = "insert into 学生信息表 (学号,姓名,性别) " & "values ('" & "2020512" & "','" & "小红" & "','" & "女" & "')"
            odcommand.CommandText = Strxzyh
            odcommand.Connection = odc1
            odcommand.ExecuteNonQuery()
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim Strxzyh As String
            Strxzyh = "insert into 学生成绩表 (学号,数学,语文,英语) " & "values ('" & "2020512" & "','" & "99" & "','" & "98" & "','" & "99" & "')"
            odcommand.CommandText = Strxzyh                                     '千万注意标点符号要用英文的!!!!切记切记
            odcommand.Connection = odc1
            odcommand.ExecuteNonQuery()
        End Sub
    End Class
    
       首先,程序最开头的   Imports System.Data.OleDb是第一步,只有引用了这个,下边的程序才能操作数据库,不引用的话,下边的操作会报错。接着又定义了两个odc1和odcommand,这两个作用,我自己理解为,一个数据库连接用,一个操作数据库用,也是不可缺少的。接着就需要连接数据库了,下边那句为连接数据库**odc1.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;data source=E:\博客\数据库联结\Database7.mdb"**,Microsoft.Jet.OLEDB.4.0;好像针对电脑系统的不同,好像还有其他的语句,我这是WIN10的64位,可以直接运行,也就没深究,接下来就是定义到,想要连接数据库的位置了,位置一定要写对,否则在打开数据库时,就会出现文件名无效的错误。
       接下来就是两个按钮的程序了,在写 Strxzyh = "insert into 学生成绩表 (学号,数学,语文,英语) " & "values ('" & "2020512" & "','" & "99" & "','" & "98" & "','" & "99" & "')"这段代码时,一定要是在英文输入法的前提下,标点符号也要英文的,若为中文的运行时会报错的,深有体会,切记!切记!切记!,设置完插入值后,剩下的三句是必须的,以上就是所有的过程。点击两个按钮后,结果如图2,图3.可以看到图3的联结字段插入了代码插入的数据。
    

    在这里插入图片描述
    图2在这里插入图片描述
    图3
    以上就是数据库中插入数据步骤,老规矩总结。
    1、首先引入 Imports System.Data.OleDb
    2、定义连接和传递命令的语句
    3、连接数据库
    4、插入数据
    好了,就这么多,如有不对请见谅,请指出,灰常感谢。

    展开全文
  • 简单易懂,不忍删章去节,作为引32313133353236313431303231363533e4b893e5b19e31333262373935子:Access数据库与ADODB编程入门即然已经了解了那些数据库中的基本概念,那么我们就只说说在VB中使用数据库编程首先有...

    展开全部

    引用前辈学习的资料,简单易懂,不忍删章去节,作为引32313133353236313431303231363533e4b893e5b19e31333262373935子:

    Access数据库与ADODB编程入门

    即然已经了解了那些数据库中的基本概念,那么我们就只说说在VB中使用数据库编程

    首先有一点要注意,数据库的使用与我们以往所使用的文本文件不同.例如我们使用文本文件,来记录各种有用的数据.那么大致有以下几步:

    读取文件--格式化数据--关闭文件--使用数据

    如果数据量较大,需要进行筛选,且存放数据的源文件可能不定时变更,那么我们可以用一个临时文件来存放有用的数据,

    这样可大大提高程序的效率.要[格式化数据]时,我们首先要进行筛选,然后还得进行分类,

    这样文件中的字符串才能被转换成有用的信息来供程序使用.这样一来,不用说,处理速度将大大减慢,

    而且就算你设计的数据格式比较科学,当数据量非常大时,文件的容量也会变的让普通计算机无法承受.

    相对文本文件来说数据库的使用也大致分为以下几步:

    打开数据库--查找数据--使用数据--关闭数据库

    从中可以看出,里面少了一步格式化数据,因为数据库本身在存储数据时,它就是按照一定的格式来进行存储的.

    其次是,数据库与文本文件返回数据的方法不同.如果把文本文件比作一个Textbox的话,

    那么数据库更像是一个ListBox.使用文本文件时我们需要从整个Textbox中取出有用的信息,

    并进行处理,而Listbox则可以根据需要返回特定的某一项.

    由于VB本身并不带有可以访问数据库的类,所以我们需要引用一个包含能访问数据库的类来使用数据库.

    这里我们采用ADODB,相比DAO和能访问数据库的API来说,它比DAO更灵活,更强大;而比起API,它更简单易用,更适合初学者.

    而Access数据库比起SQL,也相对简单了很多,且能够满足中小型应用程序的需要,所以我们在使用数据库时,选择了Access.

    就像使用文本文件来存储数据一样,我们需要先设计好数据结构,只不过在设计Access数据库的结构时,

    我们需要用到其它的程序来进行详细的规划.建议采用的程序是office中的Access或VB自带的VISDATA.

    当数据库设计好了以后,我们可以开始"数据库编程"了.

    首先,我们需要引用ADO.具体的方法是,在"工程"--"引用"中,找到"MicrosoftActiveXDataObject*.*Library",

    这里的"*.*"是指的时ADO的版本号,一般来说,应用程序或ActiveX控件都具有向下兼容性,所以我们尽可能选择比较新的版本.

    以确保程序在能识别旧版本Access的同时,也能识别较新版本的Access.

    然后我们需要在程序中创建一个对象.就好比我们在窗体上添加一个FileBox才能看到文件名一样,只有创建了ADO对象,

    我们才能够访问数据库.常用的对象有两个,Connection和Recordset.

    创建这两个对象的具体方法是:

    1.在引用后,使用New关键字,如

    PrivateConnAsNewADODB.Connection

    PrivateRecoAsNewADODB.Recordset

    2.在没引用时,用CreateObject创建对象:

    DimConn,Reco

    SetConn=CreateObject("ADODB.Connection")

    SetReco=CreateObject("ADODB.Recordset")

    创建了对象之后,下一步我们要做的就是打开数据库了.

    先看下面的代码,可以成功的打开数据库.

    Conn.open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\Main.mdb"

    这句代码打开了D盘中的Main.mdb这个数据库.

    Connection.Open方法的第一个参数是连接代码,它将传递给系统的数据库引擎.前半部分"Provider=Microsoft.Jet.OLEDB.4.0",

    它表示了数据库的类型.不同的数据库可能会不同.后半句"Source=d:\main.mdb"它表示了数据库所在的绝对路径.

    打开数据库之后,还要打开表.假如数据库中有一个表,表名为"Users",字段有两个,一个为用户名,一个为密码.那么看以下代码.

    1.想返回"Users"中,[用户名]为"去年烟花"的[密码]

    Recordset.open"Select密码FromUsersWhere用户名='去年烟花'",Connection,1,1

    之后我们就可以把用户输入的密码进行比较,看是否允许登录.

    IfRecordset.eofandRecordset.bofthen

    Msgbox"用户不存在!",16

    Else

    IfPassWord=Recordset("密码").valuethen

    msgbox"登录成功!",64

    Else

    msgbox"密码错误!",32

    EndIf

    EndIf

    Recordset.Close

    2.假设Admin已经成功登录系统,我们想把所有的用户名和密码都显示出来

    Recordset.open"Select*FromUsers",Connection,1,1

    这时,表已经被打开,我们就用以下代码把它显示出来.

    DowhlieNotRecordset.eof

    Print"用户名:"&Recordset("用户名").value&"密码:"&Recordset("密码").value

    Recordset.MoveNext

    Loop

    Recordset.Close

    由以上代码示例可以看出,打开表时,可以只打开其中的一个字段,也可以打开所有.第一个参数是SQL语句.

    Select[字段名]From表名[Where条件]

    这里的条件可以省略.且字段名也可以用"*"来代替所有字段.

    需要注意的是,如果你用(1)中的方法打开,那么(2)后面显示的代码就不能再用在(1)中.因为(1)里并没有打开[用户名]字段,

    所以这一句Recordset("密码")就没有值存在,还有可能出错.

    后面的条件,可以用"="、">"、"32".(这里假设[ID]为数字型.)

    这是打开的部分.第二个很重要的部分就是查询记录.

    数据库它并不是把所有记录全部放到一个变量中备用的.而是以"当前记录"的形式来返回一个值.所以我们想从中找到有用的信息,

    就必须要对信息进行定位/筛选.

    定位:

    移动到下一条Recordset.MoveNext

    移动到上一条Recordset.MovePrevious

    移动到最后一条Recordset.MoveLast

    移动到第一条Recordset.MoveFrist

    移动到某一条Recordset.MoveNumber

    筛选:

    Recordset.Find"条件"

    如:[用方法(2)打开表之后]

    PrivateSubCommand1_Click()

    Recordset.Find"用户名="&"text1.text"

    IfRecordset.Eof<>TrueThen

    Msgbox"该用户的密码是:"&Recordset("密码").value,64

    Else

    Msgbox"未找到该用户的资料!",16

    EndIf

    EndSub

    MoveNext只有当Eof不为True时,才可用,否则发生错误.而MovePrevious刚是Bof不为True时....

    而只要Eof和Bof中有一个不为真时,也就是说只要有一条记录时,它就可以使用.

    Find方法中的条件和Open时的第一个参数中的条件表述方法是完全一致的.当在已打开的记录集中,找不到该记录时,Eof为True.

    找到则当前的值就是符合条件的记录.

    第三个部分就是添加/修改/删除记录.

    修改记录很简单,先按以上的方法找到相关记录之后,给记录赋值就可以了.

    比如:[(修改密码)按方法(1)打开表之后]

    Recordset("密码").value="123456"

    Recordset.Updata

    需要注意的就是,在修改完成后,要调用Updata方法,这样修改才能生效.

    而添加记录则可以用以下代码来实现:

    Recordset.addnew

    Recordset("用户名").value="Admin"

    Recordset("密码").value="Admin"

    Recordset.Updata

    删除记录:

    Recordset.delete

    Recordset.uptata

    这里,先要调用Addnew方法,增加一条新记录,然后对这个新记录中的各字段赋值,最后再调用Updata方法.

    到这里就差不多了,最后说一下上面提到的几个方法.

    Recordset.OpenSQL语句,数据源,游标类型,打开方法

    SQL语句不用说了,就是Select那啥的,目的就是按要求从表中返回数据

    数据源就是一个打开之后的Connection对象.

    去他妈的游标类型,填1(即openkeyset)就可以了[偷笑ing]

    打开方法对应了几个常数,具体哪几个可以从对象浏览器里看.

    对应数值的意义:

    1只读2独占3可写4自已可写,别人可读

    Connection.open连接代码,服务器用户名,密码

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • VB数据库连接方式

    千次阅读 热门讨论 2015-08-13 20:04:07
    VB数据库的连接方式总的来说分为2种:有源连接、无源连接。其中的源指的是ODBC数据源。数据源类型可分为文件DSN、用户DSN\系统DSN三类。(OLE DB作为数据的提供者。)  有源连接:首先通过配置ODBC数据源。然后...

            VB与数据库的连接方式总的来说分为2种:有源连接、无源连接。其中的源指的是ODBC数据源。数据源类型可分为文件DSN、用户DSN\系统DSN三类。(OLE DB作为数据的提供者。)

           首先回顾一下微软的数据访问方式走过的几个阶段:

    ①ODBC(open Database Connectivity):是微软第一个使用SQL访问不同关系型数据库的访问技术。使用ODBC应用程序能够通过单一的命令操纵不同的数据库。而开发人员需要做的仅仅是针对不同的应用加入相应的ODBC驱动。

           ②DAO(Data Access Objects):不像ODBC那样是面向C和C++程序员的,它是微软提供给VB开发人员的一种简单地数据访问技术,用于操纵Access数据库。

           ③RDO(Remote Data Objects):在使用DAO访问不同的关系型数据库时,Jet引擎不得不在DAO和ODBC之间进行命令的转化,导致了性能的下降,而RDO的出现就顺理成章了。

           ④OLE DB:随着越来越多的数据以非关系型格式存储,需要一种新的架构来提供这种应用和数据源之间的无缝连接。基于COM(Component Object Model)的OLE DB应运而生。

           ⑤ADO(ActiveX Data Objects):基于OLE DB之上的ADO更简洁、更高级、更适合VB程序员,同时消除了OLE DB的多种弊端,取而代之是微软技术的发展趋势。

          有源连接:首先通过配置ODBC数据源。然后采用ADO访问ODBC数据源,完成数据库连接.格式如下:

           ConnectString = "FileDSN=student.dsn;UID=sa;PWD=1。(简单来说就是VB通过数据源来访问数据库。)

           无源连接:ADO对象具体格式如下:

            a.访问access数据库:

           "Provider=Microsoft.Jet.OLEDB.4.0;"&  "Data Source=" & App.Path & "\实例1.mdb;

             b.访问SQL Server数据库:

            Cnn3.Connectingstring="provider=Microfoft.Jet.OLEDB.4.0;DATASource=D:\数据库\实例1.mdb"

            无论是有源连接还是无源连接,在使用ADO对象使用前必须引用

            先简单介绍一下什么是ADO?ADO是建立在OLE DB之上的高级数据库访问技术,是对OLE DB的封装,微软为我们提供了丰富的COM组件(包括Activex)来访问各种数据库特点是简单易用,这也是为什么大多数数据库应用软件开发者选择ADO的重要原因。

            下面介绍一下ADO对象模型:

      ADO中共包含了7个对象,包括3个独立对象和依赖独立对象才能使用的4个非独立对象。(前三个:独立,后三个:非独立对象)

            Connection:连接对象,用于与数据库建立连接执行查询及进行事务处理。在连接时必须制定使用何种数据库OLE DB提供者。

            Command:命令对象,用于执行动作查询,比如创建/删除数据库。执行查询返回记录集、删除记录等操作。

            Recordset:记录集对象,保存来自基本表或命令对象返回的结果。使用记录集对象几乎可以完成所有的数据操作

            Field: 字段对象,依赖于记录集对象使用。可使用Fields集和来获得记录集中每个字段的信息。

            Parmeter:参数对象:依赖于命令对象使用,用于为查询参数提供数据。同时使用参数对象和命令对象,可使数据库对查询进行预编译。从而提高执行速度。

            Paroperty: 属性对象,每个连接对象、命令对象、记录集对象以及字段对象都有一个属性对象集和。使用属性对象可以访问特定对象的主要信息。例如获得数据库中表的名称。

            Error:错误对象,依赖连接对象使用。如果在访问数据库的过程中发生错误。这些错误的信息便保存到连接对象的Errors集和中。使用错误对象来定义处理相应错误的措施,避免应用程序在执行过程中意外终止。

            Connection对象的部分属性和方法如下

           ConnectionString属性:制定连接数据源的基本信息。

            Open方法:打开数据源连接。

            Close方法:关闭数据源连接。

            Recordset对象的部分属性和方法如下

           ActiveConnection 属性:代表数据源的活动连接。通常将其设置为已建立的Connection对象。

            Eof属性(end of file):测试当前记录位置是否位于记录集的最后一个记录之后,如果当前记录位于记录集的最后一个记录之后,Eof属性将返回True,否则返回False。

            Open方法:用于打开记录集。

            现在已经开始敲机房啦,但感觉有些敲不动,回来看看学过的知识,以前没有好好总结,所以现在重新回来审视一下自己学过的红皮书。

     

     

     

     


    展开全文
  • VB读写dbf格式数据库

    千次阅读 2019-07-10 17:43:49
    dbf曾经是最流行的数据库之一,上世纪末foxbase被微软收购,并入VS6.0,就是大名鼎鼎的FoxPro,然而,微软的亲儿子,小数据库有Access,大数据库有SQL Sever,所以就越来越不待见dbf了,直至2010年1月正式宣布停止...
  • 对于这个三个对象可以通过数据库调用的顺序进行串联,首先是建立连接,之后通过命令得到数据,最后将数据放到一个集合中。这个逻辑依然可以像之前的例子一样在生活找到映射,比如,与数据库中数据传输(发送和接受)...
  • 手把手教你编写VB小程序,以后可能会用的到哦!有二级VB基本基础即可!源代码请进群375116333联系群主!友情提醒:因为VB6.0是...特别说明 :以下所有源代码在win7 64位 和 win10 64位下,打开VB程序均可运行成功。...
  • 基于VB.Net的SQL数据库操作

    千次阅读 2018-07-23 18:01:30
    本人是根据自己的经历,将有基于VB.Net的数据库的操作整理如下,或许不是很完整,后面有机会再补充。现将代码里面的大概内容叙述一下: New(connectstr)方法是创建带参数的SQLDataBase的实例; UpdateSQL...
  • 接上一篇VB.NET数据库操作核心sdk-第02篇,继续讲解 1、数据库更新操作 因为我们对于数据库的不仅仅只是读取,还有回写,而且实际核心的一块更多的是插入和更新(删除一般涵盖在更新中)。 关于更新操作,以前最终...
  • VB6 数据库 基础 教程

    2021-01-19 08:15:20
    因为VB6不支持多态。ExecuteSQLr方法,此方法返回一个记录集,比如:select语法。ExecuteSQLn方法,此方法返回一个影响的行数,比如:insert语法,delete语法。这二个方法,先要判断一下前面的属性有没有赋值。接着...
  • Dimrs1AsNewADODB.Recordset'定义数据集对象DimcnnAsNewADODB.Connection'定义数据连接PrivateSubConnx()'数据库连接下面的123.mdb换成自己的数据库OnErrorResumeNextcnn.Open"Provider=Microsoft.Jet.OLEDB.4...
  • 关于vb中删除数据库记录的语句Sql = "select * from 班级信息where 姓名='" & Trim(Text1.Text) & "'"rsd.Open Sql, conn, adOpenStatic, adLockOptimisticYN = MsgBox("确定删除", vbYesNo)If YN = 6 ...
  • 我必须访问我的oracle DB(11g)来进行一些数据库设置(更新记录).我使用oracle.manageddataaccess.dll(引用myDBWrapper类库项目).我有下面的dlls(myDBWrapper是我创建的 – 存在问题的地方)我的连接字符串:Data ...
  • WINCC用VB读写数据库以及EXCEL导出

    千次阅读 多人点赞 2020-03-16 23:24:07
    本文主要是介绍WINCC7.4 用VB来读写SQL server数据库,网上有不少这类例子,实现功能的方法也很多,但是能完整介绍并且贴出所有编码的还是比较少,今天的这个例子,我会先把所有的内容先截图展示,然后再提供整个...
  • VB访问数据库的方法与原则1.VB访问数据库的原则 总则:具体问题具体分析,根据具体的环境、条件、要求而采用适当的方案 *代码的重用和运行的效率 例如:通过使用ODBC数据源连接数据库的方法,可在变换多种数据库...
  • 文章 double2li 2017-09-18 1207浏览量 DB-->Excel/Word[DLL] 使用vb 6.0+ADO 2.8写了一个把数据库中内容导出成Excel/word文档的DLL,使用tlbimp命令转换后也可以在vs 2003中使用[添加引用就可以了,上传的文件中...
  • VB6操作EXCEL导入数据库Private Function FunImpExcel(ByVal strFilePath As String) As Integer'Excel文件格式'第一行为表名,第二行为列名,其余行均为数据On Error GoTo hErrDim objConn As New ADODB.Connection...
  • 介绍VB访问数据库三种方法(DAO、RDO、ADO)中应用程序中处理运行错误的必要性,结合开发实践,给出了具体的出错处理的例子。
  • 1.数据库设计部分内容(1)系统功能分析【袋装咖啡网上销售系统】该咖啡进销系统的使用主要是客户和销售管理员。客户可以通过系统浏览咖啡信息,查询咖啡的余量,产生订单。销售管理员通过系统可以对客户信息、供应商...
  • 方法2:对于一些支持安全验证的数据库管理系统,如SQL可将系统用户定义为数据库用户,再设计登录对话框时使用输入的用户名和登录口令来连接数据库,让数据库管理系统完成验证.   技术要领 设置默认按钮:将命令按钮...
  • 如何用VB建立数据库

    千次阅读 2007-06-17 23:31:00
    但即便如此,数据库应用程序的开发仍然算得上是VB编程中的难点,这是因为你不仅要熟悉VB中关于数据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。所以我们先介绍一下数据库的基本知识,算是学习...
  • VB.NET与 sql数据库

    千次阅读 热门讨论 2014-09-30 19:38:56
    数据蕴含丰富的信息,数据就是资源。  不同的语言,由于各自的语法特点,对sql数据库的连接操作有些小区别。但有一点,那就是,对sql数据库的操作语句sql语句大体是一样...现将一些VB.NET中sql数据库的增、删、改、查
  • "错误" End Sub Public Sub 打印销售清单() Dim rptSQL As String rptSQL = "Select * from 销售清单表 where 销售单号='001'" 'SQL语句需要修改下 ReportDtl "销售单.grf", rptSQL, "销售单", False End Sub 代码...
  • VB打开Excel文件

    万次阅读 2014-03-05 17:12:41
    (1)vb打开Excel    用EXCEL对象读取EXCEL文件中数据.然后通过ADODB连接SQL进和导入  下面是EXCEL对象的详解 1 前言  做为一种简捷、系统的 Windows应用程序开发工具,VB具有强大的数据处理功能,提供了...
  • 首先有一点要注意,数据库的使用与我们以往所使用的文本文件不同.例如我们使用文本文件,来记录各种有用的数据.那么大致有以下几步:读取文件 -- 格式化数据 -- 关闭文件 -- 使用数据如果数据量较大,需要进行筛选,且...
  • VB6数据库编程的一点入门经验

    千次阅读 2006-06-07 17:29:00
    --飞利浦的软盘质量不错:)aphismail-job#yahoo.com.cn偶学VB有两三年的时间了,初学的时候,碰到不少困难,没少在BBS上提问,得到了不少帮助。现在还很多初学者像偶当初那样遇到了各种各样的困难,而且很多是偶...
  • 手把手教你编写VB小软件,以后可能会用的到哦!有二级VB基本基础即可!一、抽奖软件适用范围:活动抽奖、随机出题、俩俩PK抽签等等。所用软件:VB6.0和office中的access【推荐用2003】功能:1、将所有人员名单存放在...
  • vb连接oracle db方法

    2021-05-03 02:42:25
    vb连接oracle db方法'打开数据库Public Sub OpenOraDB()On Error GoTo ToExitOraDB_Open = FalseSet OraDB = New ADODB.ConnectionOraConstr = "Provider=OraOLEDB.Oracle.1;Password=" & strOraPWD & ";...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,022
精华内容 5,208
关键字:

vb打开数据库错误