VB6基本数据库应用(四):数据的提取,新增和修改

18 篇文章 2 订阅
16 篇文章 1 订阅

同系列的第四篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9474661


数据的提取,新增和修改

这一章的内容跟SQL没关系了,目前为止SQL的任务已经完成,就是为我们打开一个记录集。当然以后你会见识到他强大的能力。

 

先说一下界面怎么配置,提取出来的数据总是要显示的。为了简单,我将使用两个List并排在一起显示数据。一个List显示一个字段的内容,本来就只有StudnetIDStudentName两个字段,所以显示起来很方便,也容易理解。一步步来吧。当前的窗体我们没做过任何调整,我一直觉得默认的字体太小了,改一下,改成小四,如下图所示:

改完点击确定再开始布置控件,那么标准控件的字体会跟随窗体默认为小四(只有标准控件是这样,也就是VB已启动就有的控件,不包括ActiveX控件,因为ActiveX控件的内部实现方式不尽相同,可能没有设置和容器,即窗体同步)

放置Label1Label2ListBox1ListBox2。如下图摆放:


分别修改Label1Label2Caption属性为“StudentID"”StudentName“。两个List就不动了。待会输出的时候是按照List1的第一行和List2的第一行在一起是一个记录,List1的第二行和List2的第二行在一起又是另一个记录这样看的。

 

在介绍了ADOList1ConnectionRecordset对象之后,我继续介绍需要用到的第三个对象Field,由第一章的介绍我们知道这是字段对象,我们将通过它的Value属性取回当前记录的某一个字段的值,这就是实现的原理。

 

这个对象不需要像之前的那两个那样set xxx=new XXX来创建,因为这个对象和记录集是挂钩的,当Recordset对象成功调用Open之后,Recordset对象就会自行创建Fields(字段集)对象以及Field对象。可能大家要晕了,怎么又多一个Fields(字段集)对象??要记住整套ADO对象是等级式的,ConnectionRecordsetFields再到Field。之所以要出现一个Fields对象,是因为很明显,多数时候字段都不止一个,为了能够管理所有的字段,Fields对象就相当于管理者。我们通常都是使用字段名作为索引要求Fields对象返回对应的Field对象引用的。

 

既然我们明白了原理,那么多说无益,代码一来我表述的不清楚的就迎刃而解了。当前暂且不使用按钮神马的,还是在Load里写代码即可,接着以前的代码

VB代码开始:

 '数据的提取
List1.AddItem rec.Fields("StudentID").Value
    'Fields对象,括号里的是索引(Index),索引填写的内容为字段的名称
    'Item属性是Fields对象的默认属性,他的一个参数就是Index
    'Fields("Student")表示一个Field对象
    'Fields("Student")等价于
    'rec.Fields.Item ("Student")或
    'rec.Fields! ("Student")
    '!表示默认属性

    
List2.AddItem rec.Fields("StudentName").Value

VB代码结束:

代码运行的结果如图:


和当初数据库的内容对比一下:


没错,第一行确实是这个。那么其他呢??实际上Recordset对象提供Move,MoveFirst,MoveLast,MoveNext,MovePrevious方法来让我们来回移动记录,分别是让我们指定的条目,第一条,最后一条,下一条或上一条成为当前的记录。这样我们就很方便了。同时,Recordset对象提供EOF属性让我们判断当前记录是否已经是最后一条记录了,当Eof为True时即为最后一条记录。这样我们稍微修改一下代码就能让全部的记录显示出来,将上面的代码修改如下:

VB代码开始:

'数据的提取
Do Until rec.EOF = True
    List1.AddItem rec.Fields("StudentID").Value
        'Fields对象,括号里的是索引(Index),索引填写的内容为字段的名称
        'Item属性是Fields对象的默认属性,他的一个参数就是Index
        'Fields("Student")表示一个Field对象
        'Fields("Student")等价于
        'Fields.Item ("Student")或
        'Fields! ("Student")
        '!表示默认属性,是默认属性的缺省表示法,对所有的对象都适用,但不建议使用

        
    List2.AddItem rec.Fields("StudentName").Value
    '移动下一条记录为当前记录

    rec.MoveNext
Loop

VB代码结束

这样就能全部显示出来了,结果如下:


当我们做好了显示。我们就必须考虑一下怎么新增,之所以不说怎么编辑,这是因为编辑和新增很像,少个语句而已。来说怎么新增吧。


新增的原理先说一下。就是调用Recordset对象的AddNew属性,然后通过给Field的Value属性赋值,然后调用Recordset对象的Updata方法就可以更新了。要更新,当前就不能再仅用List和Label了,加点东西吧,在List1和List2下面各加一个文本框,分别就对应StudentID和StudentName的数据,然后加一个CommandButton,改Caption为“新建”。改好的界面如下:


知道了原理,我们直接出代码吧,在新建按钮的Click事件中添加如下代码:

VB代码开始:

Private Sub Command1_Click()
'指示当前为新建模式
rec.AddNew
'为Field的Value赋值以确定新的纪录的各个字段的内容
rec.Fields("StudentID").Value = Text1.Text
rec.Fields("StudentName").Value = Text2.Text
'更新表
rec.Update


'----------------------------
'下面代码让新增的数据显示出来
'----------------------------
'移动最后一条记录为当前记录

rec.MoveLast
'在List中添加当前新增的记录
List1.AddItem rec.Fields("StudentID").Value
List2.AddItem rec.Fields("StudentName").Value
End Sub

VB代码结束

在Text1输入156443(其实可以是随便的数字,多少位都可以,量你不会超过308位,也就是StudentID字段所设置Double类型所支持的1.79769313486231*(10^308) 的正值这个数量级) ,在Text2输入霍金(其实也是随便什么都可以的),然后单击“新建”,结果如图:


在“下面代码让新增的数据显示出来”这句注释的后面,是让新增的数据显示在两个List上的代码,新增的数据总是在最后一条记录的,所以我使用MoveLast语句移到最后就可以了。实际上在新增之后能够立即调用MoveLast语句移到最后一条记录然后读取出来显示,这也说明了Updata方法之后数据就已经保存了,不需要额外的保存。


而至于编辑,那就简单了,仅仅是比新增少了一个AddNew方法的调用。通过Recordset对象提供的Move,MoveFirst,MoveLast,MoveNext,MovePrevious方法来移动记录到当前记录,然后直接为Field的Value属性赋值,然后和新增一样调用Update方法就可以了。这里就不再赘述。


下一章将讲述如何筛选数据初步,届时我们将再次体会到SQL:Select语句强大的能力。本套教程未完,待续。  

下一章:数据的查找与筛选 http://blog.csdn.net/jiluoxingren/article/details/9739069


  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
基于VB6自主研发的轻量级数据库查询客户端工具,启动速度较快,所占资源较小。 附源码,对初学数据库编程的童鞋有所裨益! 1、支持SQLServer、Oracle、Sybase、DB2数据库平台 2、单句执行:可以提交单一的SQL语句给服务器执行。 3、多句一次执行:可以将多个SQL语句用空格或换行的方式进行隔离,程序会一次性提交给数据库服务器执行。(前提条件是语法通过) 4、多句依次执行:可以将多个SQL语句用分号‘;’隔开,程序会逐句提交。 5、执行指定的SQL语句:可以在SQL编辑框中选中部分语句执行,在SQL命令框中通过鼠标连续单击3次可以选择当前行。 6、在事务中执行SQL语句:将执行按钮上方的Trans 框选中,那么程序对于每次提交的SQL语句都是放在事务中执行的,执行不成功程序会进行回滚操作。程序默认不进行事务处理,因为有些语句不能在事务中执行。 版本修订记录: V3.6.0 16:08 2012/6/18 --支持DB2数据库平台,要求客户端安装 DB2 Run-Time Client Lite。 --支持数据库名的记忆功能。 V3.5.11 14:36 2012-5-12 --支持连接非缺省端口号的SQL Server平台。 V3.5.10 8:54 2009/12/22 --将OUT标签更名为Output。 V3.5.9 10:48 2009/8/19 --修订Bug:在Vista或Win7系统下主界面部分被遮盖显示不全的问题。 V3.5.8 --修订Bug:执行的存储过程没有返回结果集,在导出Excel时出现运行时错误。 V3.5.7 --界面标题栏增加当前连接数据库信息。 --修订死循环Bug,死3次后退出执行。 --修订最末语句分号后面跟若干回车符执行死循环的Bug。 V3.5.6 --还是使用TextBox控件作为SQL命令的输入框,RichTextBox控件的滚动条功能不太好用; --使用字符算法实现了双击SQL命令框选中当前行的功能(TextBox控件本身不支持)。 --修订了窗体在Resize时的Bug。 V3.5.5 --使用RichTextBox控件代替原有的TextBox控件SQL命令输入框(支持双击选中整行功能)。 --使用‘;’和‘回车换行’符号联合作为SQL命令逐个提交的分割标志符。 V3.5.4 --修订SQL日志文件记录错误的Bug。 V3.5.3 --修订系统未安装任何打印机的情况下导出Excel失败的Bug(设置打印页面横向时失败)。 V3.5.2 --修订运行目录没有可写权限导致记录日志失败无法提交SQL语句的Bug。 V3.5.0 --新增记录SQL语句日志的功能。 V3.4.0 --新增导出查询结果集到Excel文档的功能。 V3.3.4 --修改了窗体内部控件自动放缩的控制算法; --修改数据显示窗口支持滚轮鼠标的上下左右翻滚操作。 V3.3.0 --修改了连接ORACLE的连接字符串,要求客户端安装ODAC组件(OLEDB); --数据库下拉列表默认上次选择的数据项。 V2.0.0 --支持Sybase平台,要求客户端安装Sybase OLEDB组件; V1.0.0 --支持SQL Server平台,安装包中自带ADO组件。
VB6中,可以使用DAO数据库对象来进行数据库的更改记录操作。 首先,我们需要在代码中引入DAO数据库对象所在的库文件(一般是Microsoft DAO 3.6 Object Library),然后创建一个DAO工作空间对象、数据库对象和记录集对象。 以下是一个简单的示例代码,演示如何使用VB6和DAO数据库对象来更改数据库记录: ```vb Dim db As DAO.Database Dim rs As DAO.Recordset ' 创建DAO工作空间对象 Dim ws As DAO.Workspace Set ws = DBEngine.Workspaces(0) ' 打开数据库 Set db = ws.OpenDatabase("C:\your_database_path\your_database.mdb") ' 打开需要修改数据表的记录集 Set rs = db.OpenRecordset("your_table_name", dbOpenDynaset) ' 查找需要更改的记录 rs.FindFirst "ID = 1" ' 假设要更改ID为1的记录 ' 当找到记录时,可以更改记录的字段值 If Not rs.NoMatch Then rs.Edit ' 进入编辑模式 rs!Field1 = "New Value 1" ' 将Field1字段的值更改为"New Value 1" rs!Field2 = "New Value 2" ' 将Field2字段的值更改为"New Value 2" rs.Update ' 保存更改 End If ' 关闭记录集和数据库对象 rs.Close db.Close ' 释放内存 Set rs = Nothing Set db = Nothing ``` 该示例中,我们首先创建了一个DAO工作空间对象(ws),然后打开了需要进行更改的数据库文件(db)。接着,打开了一个记录集对象(rs),并使用`FindFirst`方法查找到ID为1的记录。当找到记录后,我们进入了编辑模式(`rs.Edit`),修改了记录的字段值,并通过`rs.Update`保存了更改。 最后,我们关闭了记录集和数据库对象,释放内存。 需要注意的是,以上仅是一个简单的示例代码,实际操作中可能需要根据数据库中的具体设计进行相应的修改

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值