分享

VC access 写入 vc连接access数据库

 平安木易 2024-04-14 发布于安徽

VC连接数据库的基本步骤如下:
1、增加支持头文件,引用支持组件
    在stdafx.h的所有include后面加入如下代码

#include <icrsint.h> #include <basetsd.h> #include <ole2.h> #import 'c:\program files\common files\system\ado\msado15.dll' no_namespace rename('EOF','adoEOF')
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.


注意引用的动态库路径,它跟安装access时选的路径有关,不一定全是上面这个。
2、初始化组件
    有两种方式:一般可以用CoInitialize(NULL);来实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();来实现。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示: AfxOleInit();
    在使用组件指针之前初始化,也可以在App::InitInstance()中写入AfxOleInit();
3、实例指针

_ConnectionPtr m_pConnection('ADODB.Connection');
                                                                _RecordsetPtr m_pRecordset('ADODB.Recordset');
  • 1.
  • 2.


    1)、_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句
    2)、_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作。
    3)、CommandPtr智能指针,可以使用_ConnectionPtr或_RecordsetPtr来执行任务,定义输出参数,执行存储过程或SQL语句。 
也可以使用CreateInstance()来初始化:

_CommandPtr m_pCommand; m_pCommand.CreateInstance(__uuidof(Command)); m_pCommand->ActiveConnection = m_pConnection; // 将库连接赋于它 m_pCommand->CommandText = 'SELECT * FROM DemoTable'; // SQL语句 m_pRecordset = m_pCommand->Execute(NULL, NULL,adCmdText); // 执行SQL语句,返回记录集
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

——执行存储过程。执行存储过程的操作和上面执行SQL语句类似,不同点仅是CommandText参数中不再是SQL语句,而是存储过程的名字,如Demo。另一个不同点就是在Execute()中参数由adCmdText(执行SQL语句),改为adCmdStoredProc来执行存储过程。如果存储过程中存在输入、输出参数的话,需要使用到另一个智能指针_ParameterPtr来逐次设置要输入、输出的参数信息

4、打开数据库

在ADO操作中建议语句中要常用try...catch()来捕获错误信息

try                 
{	
	// 打开本地Access库Demo.mdb
	m_pConnection->Open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb','','',adModeUnknown);
        //如果数据库有密码,则为:m_pConnection->Open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=JyDB.mdb;Jet OLEDB:Database Password = jy_agt&pwd','','',adModeUnknown);注:密码处OLEDB:Database的冒号前后皆不能有空格,不然会连接失败
}
catch(_com_error e)
{
	AfxMessageBox('数据库连接失败,确认数据库Demo.mdb是否在当前路径下!');
	return FALSE;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

5、打开数据表及操作表中数据

try { m_pRecordset->Open('SELECT * FROM DemoTable', // 查询DemoTable表中所有字段 theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

获取数据库中的值:

_variant_t  var;
 CString testValue = '';
 try
 {
     if(!m_pRecordSet->BOF)
     {
        m_pRecordSet.MoveFirst();
     }
     else
     {
        AfxMessageBox('表内数据为空.');
     }
 //获取第一行ParamType列的数据
    var = m_pRecordSet.GetCollect('ParamType')
    if(var.vt != VT_NULL)
    {
       testValue = (LPCSTR)_bstr_t(var);
    }
 }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

6、关闭连接

关闭一个库连接。如果连接状态有效,则用Close方法关闭它并赋于它空值。代码如下所示:

if(m_pConnection->State) m_pConnection->Close(); m_pConnection= NULL; //或者用 m_pConnection.Release()也行,但注意不是->
  • 1.
  • 2.
  • 3.

7、其他

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多