当前位置:首页 > 问答 > 正文

VB里怎么简单快速地从数据库拿数据,提取那些东西其实没那么难

(来源:VB爱好者社区《别怕,数据库查询就这么几招》)好的,那咱们就捞干的说,不说那些虚头巴脑的理论,在VB里,特别是用经典的VB6,从数据库拿数据,最常用、最直接的法子就是ADO配合SQL语句,你别看这俩词儿好像很专业,其实说白了,ADO就是个传话的,SQL就是你下的命令。

(来源:某老程序员经验谈《VB数据库操作三板斧》)你得确保你的VB项目里引用了ADO库,怎么引用呢?在VB6的开发环境里,点菜单栏的“工程”,再选“引用”,在弹出来的一大堆列表里,找到“Microsoft ActiveX Data Objects x.x Library”(x.x是版本号,选个2.0以上的就行),把它前面那个小框打上勾,这就好比你要打电话,得先确保手机有电有信号,引用这个库就是给你的VB程序“充电”、“连信号”。

(来源:同来源《VB数据库操作三板斧》)你要认识几个核心的“工具人”:

  1. Connection(连接):这家伙专门负责跟数据库建立联系,就像你要去朋友家拿东西,总得先敲开门,建立个连接吧。
  2. Recordset(记录集):这是最重要的东西,数据库里的数据拿过来之后,就放在这个“Recordset”对象里,你可以把它想象成一个临时的小表格,数据就一行一行地摆在里面,你后续的查看、修改、删除等操作,基本都是对着它来的。
  3. Command(命令):有时候用来更精细地执行SQL语句,特别是带参数的那种,刚开始简单操作的话,可以不用它,直接用Connection也能执行SQL。

(来源:新手教程《VB与Access数据库一日速成》)光有工具不行,你得知道怎么用,最基本的流程四步走:

第一步:连上数据库

假设你用的是Access数据库(.mdb文件),代码大概长这样:

VB里怎么简单快速地从数据库拿数据,提取那些东西其实没那么难

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\你的数据库路径\你的数据库名.mdb"
conn.Open

简单解释一下:第一行和第二行是声明并创建一个Connection对象,第三行是关键,它告诉VB:我要用Microsoft.Jet这个“驱动”(Provider)去连接一个Access数据库(Data Source),数据库文件在哪个位置你得写清楚,第四行conn.Open就是执行连接,相当于“开门!”。

第二步:下达命令(写SQL语句)

SQL就是你让数据库干什么事的“命令语言”,提取数据最核心的命令就是SELECT。 数据库里有张表叫“用户信息”,你想把里面所有人的“姓名”和“电话”都拿出来,SQL语句就写: "SELECT 姓名, 电话 FROM 用户信息" 如果你想找所有年龄大于18岁的人,那就加个条件: "SELECT * FROM 用户信息 WHERE 年龄 > 18" 这里的代表所有字段(列),WHERE后面就是条件。

(来源:VB爱好者社区《SQL其实就那几个单词》)你看,SQL没那么神秘吧?SELECT就是“选择”,FROM就是“从哪儿”,WHERE就是“哪里符合条件”,拼起来就是人话。

第三步:执行命令,把数据拿回来

VB里怎么简单快速地从数据库拿数据,提取那些东西其实没那么难

用上面创建好的Connection来执行这个SQL语句,结果会返回到一个Recordset对象里。

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "你的SQL语句", conn

rs.Open "SELECT 姓名, 电话 FROM 用户信息", conn 执行完这一句,查询到的所有“姓名”和“电话”就都装在rs这个记录集里了。

第四步:处理数据

数据拿回来了,怎么用呢?记录集有个“光标”的概念,一开始指在第一行数据之前。

  • rs.EOF来判断是不是到最后了(End Of File)。
  • rs.MoveNext把光标移到下一行。
  • rs.Fields("字段名")或者rs.Fields(索引号)来获取当前行某个字段的值。

通常我们用一个循环来读取所有数据:

VB里怎么简单快速地从数据库拿数据,提取那些东西其实没那么难

Do While Not rs.EOF
    ' 处理每一行数据
    MsgBox "姓名:" & rs.Fields("姓名") & ", 电话:" & rs.Fields("电话")
    rs.MoveNext ' 千万别忘了这一句,不然就死循环了!
Loop

第五步:打扫战场

用完的东西要关闭,好习惯:

rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing

(来源:某老程序员经验谈《VB数据库操作三板斧》)你看,整个过程就像派个伙计(Connection)去仓库(数据库),你给他一张纸条(SQL语句),让他把指定的货物(数据)搬到一个小推车(Recordset)里,然后你再从小推车里一件一件拿出来用(循环读取),用完了把推车还了,伙计也下班。

(来源:新手教程《VB与Access数据库一日速成》)再给你个更实际的例子,比如把数据直接显示在表格(MSHFlexGrid或MSFlexGrid控件)里,假设你已经在窗体上放了一个叫Grid1的MSHFlexGrid控件:

' ... 前面连接数据库和执行rs.Open的代码省略 ...
' 清空表格
Grid1.Clear
' 设置表格列头(假设查询结果是两列:姓名、电话)
Grid1.Rows = 1 ' 第一行是标题行
Grid1.Cols = 2
Grid1.TextMatrix(0, 0) = "姓名"
Grid1.TextMatrix(0, 1) = "电话"
' 把数据填充到表格
Dim i As Integer
i = 1
Do While Not rs.EOF
    Grid1.Rows = Grid1.Rows + 1 ' 增加一行
    Grid1.TextMatrix(i, 0) = rs.Fields("姓名")
    Grid1.TextMatrix(i, 1) = rs.Fields("电话")
    i = i + 1
    rs.MoveNext
Loop

这样,数据库里的数据就清清楚楚地显示在界面上了。

(来源:VB爱好者社区《别怕,数据库查询就这么几招》)核心就是:引用库 -> 连数据库 -> 写SQL -> 执行得到Recordset -> 循环处理Recordset -> 关闭连接,多写两遍,把这几步背下来,基本的数据库提取就完全没问题了,遇到问题别慌,十有八九是SQL语句写错了,或者路径不对连不上数据库,耐心检查一下就行。