VB6基本数据库应用(四):数据的提取,新增和修改
列的第四篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9474661
数据的提取,新增和修改
由于在写第三章的时候没有充分考虑这一章的内容,所以第三章的打开表的代码不能适应这一章的需求(新增和修改这两项操作),所以第三章的代码要加上一些内容,在第三章最后,紫色字体标记的就是新加上去的。我为我没有充分考虑教程的延续性而道歉。
这一章的内容跟SQL没关系了,目前为止SQL的任务已经完成,就是为我们打开一个记录集。当然以后你会见识到他强大的能力。
先说一些界面怎么配置,提取出来的数据总是要显示的。为了简单,我将使用两个List并排在一起显示数据。一个List显示一个字段的内容,本来就只有StudnetID和StudentName两个字段,所以显示起来很方便,也容易理解。一步步来吧。当前的窗体我们没做过任何调整,我一直觉得默认的字体太小了,改一下,改成“小四”,如下图所示:
改完点击确定在开始布置控件,那么标准控件的字体会跟随窗体默认为小四(只有标准控件是这样,也就是VB已启动就有的控件,不包括ActiveX控件,因为ActiveX控件的内部实现方式不尽相同,可能没有设置和容器,即窗体同步)
放置Label1和Label2;ListBox1和ListBox2。如下图摆放:
分别修改Label1和Label2的Caption属性为“StudentID:"和”StudentName“。两个List就不动了。待会输出的时候是按照List1的第一行和List2的第一行在一起是一个记录,List1的第二行和List2的第二行在一起又是另一个记录这样看的。
在介绍了ADO的List1的Connection和Recordset对象之后,我继续介绍需要用到的第三个对象Field,由第一章的介绍我们知道这是字段对象,我们将通过它的Value属性取回当前记录的某一个字段的值,这就是实现的原理。
这个对象不需要像之前的那两个那样set xxx=new XXX来创建,因为这个对象和记录集是挂钩的,当Recordset对象成功调用Open之后,Recordset对象就会自行创建Fields(字段集)对象以及Field对象。可能大家要晕了,怎么又多一个Fields(字段集)对象??要记住整套ADO对象是等级式的,Connection到Recordset到Fields再到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语句强大的能力。本套教程未完,待续。
VB6基本数据库应用(四):数据的提取,新增和修改的更多相关文章
- django学习-10.django连接mysql数据库和创建数据表
1.django模型 Django对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django为这些数据库提供了统一的调用API. 我们可以根据自己 ...
- 孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数
孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 不同类型 ...
- 孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成
孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天经过反复折腾,最终基本上算 ...
- 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数
孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...
- VB6基本数据库应用(五):数据的查找与筛选
同系列的第五篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9633139 数据的查找与筛选 第4篇发布到现在已经过了4天,很抱歉,学 ...
- (十四)整合 ClickHouse数据库,实现数据高性能查询分析
整合 ClickHouse数据库,实现数据高性能查询分析 1.ClickHouse简介 1.1 数据分析能力 2.SpringBoot整个ClickHouse 2.1 核心依赖 2.2 配属数据源 2 ...
- [置顶] VB6基本数据库应用(三):连接数据库与SQL语句的Select语句初步
同系列的第三篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9455721 连接数据库与SQL语句的Select语句初步 ”前文再续, ...
- MySQL数据库解决大数据量存储问题
转载自:https://www.cnblogs.com/ryanzheng/p/8334915.html 提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如 ...
- 将Oracle数据库中的数据写入Excel
将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...
随机推荐
- javascript字符类型操作函数
//获取字符串的长度 String.prototype.getByteLength = function() { var bytes=0,i=0; for (; i<this.length; + ...
- php测试题整理(0519)
1.B/S架构和C/S架构: B/S架构是依托于浏览器的网络系统,C/S架构是基于客户端的. B/S架构: 随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放.互 ...
- java并发编程_基本模块构建
读<java并发编程实战>第五章学习记录:该章节主要介绍一些并发编程中一些基本的构建模块.如并发容器和并发工具类(闭锁和栅栏)以及一些需要注意的情况 并发容器 1. ConcurrentH ...
- JS 操作一个数据值
任何语言都有自己的操作数据的方法: Js也不例外,js有3种重要的方式来操作一个数据值. 1>复制它.例如把它赋给一个新的变量. 2>把它作为参数传递给一个函数或方法. 3>可以和其 ...
- Lintcode--002(两个字符串是变位词)
写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 您在真实的面试中是否遇到过这个题? 样例 给出 s = "abcd", ...
- python的pyc和pyo文件
python并非完全是解释性语言,它是有编译的,先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行,相对于py文件来说,编译成pyc和pyo本质上和py没有太大区别,只是对于这个模 ...
- cf C. Matrix
http://codeforces.com/contest/365/problem/C 构造出的矩阵中的长方形的和等于构成它的长的那些数字的和加上构成它的宽的那些数字的和. 也就是求这个字符串中的两个 ...
- 不管肉鸡,还是代理,CC识别就封杀!
这几天的心得,汇成代码. PYTHON版,我编的. #!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys,time import co ...
- 工厂方法模式 - OK
工厂方法模式(Factory Method),定义了一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到子类. 工厂方法模式在实现时,客户端需要决定实例化哪一个工厂来实现运 ...
- VS2010安装与测试编译问题(fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt)
由于第三方库的各种原因,与编译冲突问题,公司又决定把整个项目都统一改用VS2010来编译.所以我把我开发机上的VS2008卸载了,又重新安装了VS2010.无奈出现了COFF格式转换问题.搜索了下.完 ...