读取数据库内容

我在网上想寻找一个使用 CDao* 类来从数据表读出或写入数据资料,但是我没有得到什么线索。现在自己完成了这个功能,从一个微软的 Access 文件( .MDB )文件中快速、动态、简便的创建 / 写入 / 读出数据 。我们的例子是一个基于对话框的程序。

设计我们的接口

为了建立我们的数据库接口,首先我们应该在工程的 StdAfx.h 文件中加入 afxdao.h 的声明。

我们将会用到两个类 CDaoDatabase CDaoRecordset ,在程序中需要用到这两个类的地方构造它们:
CDaoDatabase database;
CDaoRecordset recordset(&database);


创建我们的数据库文件

如果我们动态的创建一个 Access 文件,我们不需要使用 CDaoDatabase::Open() ,因为 Create() 函数将自动的为我们打开我们连接的数据库:
CString lpszFile = "C://Database.mdb";
database.Create(lpszFile);



打开一个已经存在的数据库文件

database.Open(lpszFile);

很好,现在我们已经成功的连接到了一个数据库中,接下来我们可以向数据表中写入数据了。这里先介绍一些数据表的结构,这对你将来从事数据库开发是有好处的。

一个数据表是一系列的数据单。你可以在一个数据库文件中使用多个数据表,每一个数据表由行 (rows) 和列 (columns) 组成。对应与一个行和列的值叫做字段( field )。下面是一个标准的数据表的图示:

现在让我们返回主题。我们首先需要在我们的数据库文件中创建一个数据表。怎么做呢 ? 我们通过创建一个 SQL 执行字符串来告诉我们的数据库实例来执行它,例如 :
CString SqlCmd = "CREATE TABLE MyTable
(Name VARCHAR(20),Age VARCHAR(3));";
database.Execute(SqlCmd);


上面的 SQL 命令在我们的数据库文件中创建了一个新的叫做 MyTable 的数据表。它有两列,一个是 Name ,一类是 Age Name 列的数据限制在 20 个字符, Age 列的数据限制在 3 个字符。很简单吧。

注意:在一个文件中不能创建同名数据表,除非你先通过使用正确的 SQL 字符串调用 Execute() 函数,删除这个表。

在新的数据表中加入数据

CDaoRecordset 实例打开我们的数据库,当我们第一次创建它时,我们将有一个 CDaoDatabase 实例的指针,现在他们都被连接了。为了打开我们的记录并写入数据,我们做下面的代码:
recordset.Open(AFX_DAO_USE_DEFAULT_TYPE,
"SELECT * FROM MyTable", 0);
database.Execute("INSERT INTO MyTable(Name);");
database.Execute("INSERT INTO MyTable(Age);");

recordset.AddNew();
recordset.SetFieldValue("Name","Chris");
recordset.SetFieldValue("Age","13");
recordset.Update();
recordset.MoveNext();
recordset.AddNew();
recordset.SetFieldValue("Name","Joe");
recordset.SetFieldValue("Age","20");
recordset.Update();


下面我们来具体说明一下上面代码的意义:
1.
我们使用 SQL 命令 SELECT * FROM MyTable 打开记录实例。这意味着打开函数将得到 MyTable 数据表中的所有可以访问的数据,不管是写或是读。
2.
使用 SQL 字符串调用 Execute() 来在数据表中加入两个新的列。
3.
调用 AddNew() ,允许我们加入一个新的数据
4.
两次调用 SetFieldValue ,分别为同一行三上的两列加入数据。
5.
调用 Update() 更新数据表的数据。
6.
调用 MoveNext() 把记录指针移向下一个空行,再重复上面的加入数据的方法。

以上就是全部的向数据表中加入数据的方法,下面我们介绍如何从数据表中读出数据。这部分也是相当简单且容易理解的。

CDaoRecordset::GetFieldValue()
函数有两个参数,一个是我们想得到数据的列的名称,它与记录指针的当前位置相对应,我们可以通过调用下面的函数自由的移动它:
::Seek();
::MoveFirst();
::MoveNext();
::MovePrev();
::MoveLast();


第二个参数是一个 COleVariant 实例, COleVariant 是一个基于 COM 的对象。我们的字段数据将被存储在这个对象中,但是把这个存储对象转换到我们可以识别的 CString 变量是我们所需要的,下面的代码就是来完成这个工作:
COleVariant olevar;

确认我们的 CDaoRecordset 实例已经被打开,我们调用

while(!recordset.IsEOF());
{
olevar.ChangeType(VT_BSTR, NULL);
recordset.GetFieldValue("Name",olevar);
CString strData = (LPCSTR)olevar.pbstrVal;
// Code for inserting data into a listbox, for example
recordset.MoveNext();
}


ChangeType()
方法把 COleVariant 实例转换到 BSTR (一种晦涩的字符串格式)。然后我们 pbstrValue 方法把格式转换为 CString ,我们可以在任何需要的地方使用它。这些可以重复使用知道到达数据表中记录的末尾。

相信以上的说明对你有所帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值