C++连接Access数据库

#include <iostream>
using namespace std;
/*#import生成文件 msado15.tlh,默认是有namespace ADODB {}所有内容都包在这个名字空间中。
用了no_namespace则生成的头文件中没有namespace,所有内容是全局的,否则ADODB.Connection
rename的意思就是改名了,rename("EOF","adoEOF")将EOF改名为adoEOF,以免和C语言里的EOF重名*/
#import "c:\program files\common files\system\ado\msado15.dll"  no_namespace  rename ("EOF", "adoEOF")

void main()
{
	CoInitialize(NULL);         //初始化OLE/COM库环境
	//在引入ado并初始化成功com库后,就可以使用智能指针了
	_ConnectionPtr m_pConnection;  
	_RecordsetPtr m_pRecordset;  
	HRESULT hr;
    try
    {
		hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
   //     hr = m_pConnection.CreateInstance(__uuidof(Connection));//no_namespace的好处
		
        if(SUCCEEDED(hr))
        {            
            hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);          //access2003
//			hr = m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb","","",adModeUnknown);    //access2007
			printf("成功连接数据库\n");
        }
    }
    catch(_com_error e)///捕捉异常
    {       
       printf("连接数据库失败!\n");
	   return ;
    }
		m_pRecordset.CreateInstance(__uuidof(Recordset)); //实例化结果集对象   
	//执行sql语句   
		try  
		{   
			char sql[300];   
			memset(sql,0,300);   
			strcat(sql,"SELECT * FROM lyrtest");     
			m_pRecordset->Open(sql, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);   
		}   
		catch(_com_error* e)   
		{   
			wprintf(e->ErrorMessage());   
			if(m_pConnection->State)   
			{   
					m_pConnection->Close();   
					m_pConnection= NULL;   
			}
			CoUninitialize();
			return;   
		}   
		try  
		{      
			//若结果为空,结束   
			if(m_pRecordset->BOF)   
			{   
					printf("表内数据为空!");   
					if(m_pConnection->State)   
					{   
							m_pRecordset->Close();   
							m_pRecordset = NULL;   
							m_pConnection->Close();   
							m_pConnection= NULL;   
					}  
					CoUninitialize();
					return;   
			}   
			cout<<"---------------------------------"<<endl;
			cout<<"数据库的内容为:"<<endl;
			//游标定位到第一条记录
			m_pRecordset->MoveFirst(); 
			_variant_t var[2]; //从结果集中取出的数据放到var中
			char *t1[2]; 
			while(!m_pRecordset->adoEOF)
			{   
					var[0]= m_pRecordset->GetCollect("ID");   
					if(var[0].vt != VT_NULL)   
					{   
							t1[0] = _com_util::ConvertBSTRToString((_bstr_t)var[0]);   
					}   
					printf(t1[0]);
					printf("\t");
					var[1]= m_pRecordset->GetCollect("Name");   
					if(var[1].vt != VT_NULL)   
					{   
						t1[1] = _com_util::ConvertBSTRToString((_bstr_t)var[1]);   
					} 
					printf(t1[1]);
					printf("\n");   
					m_pRecordset->MoveNext();   
			}   
		}   
		catch(_com_error *e)   
		{   
			wprintf(e->ErrorMessage());   
		}   
	
		//退出程序时的处理   
		if(m_pConnection->State)
		{   
			m_pRecordset->Close();   
			m_pRecordset = NULL;   
			m_pConnection->Close();   
			m_pConnection= NULL;   
		} 
	CoUninitialize();		
	cout<<"---------------------------------"<<endl;
	return; 
}

下面是使用 C++Builder 连接 Access 数据库的步骤: 1.首先需要在工程中添加 Vcl.OleDB.hpp 头文件。这个头文件包含了连接数据库所需的类和方法。 2.在工程中添加 TADOConnection 和 TADOTable 控件。TADOConnection 控件用于连接数据库,TADOTable 控件用于操作数据表。 3.在 TADOConnection 控件中设置连接字符串,连接字符串的格式如下: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=database.mdb;Persist Security Info=False 其中,Provider 指定数据提供程序,Data Source 指定数据库文件的路径。 4.在 TADOTable 控件中设置 TableName 属性,指定要操作的数据表名。 5.在需要操作数据表的代码中,可以使用 TADOTable 控件的 Open、Close、Insert、Edit、Delete 等方法来实现对数据表的增删改查操作。 以下是一个简单的示例代码: ```c++ #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <Vcl.OleDB.hpp> #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=database.mdb;Persist Security Info=False"; ADOConnection1->Open(); ADOTable1->TableName = "Table1"; ADOTable1->Active = true; } void __fastcall TForm1::Button1Click(TObject *Sender) { ADOTable1->Insert(); ADOTable1->FieldByName("Name")->AsString = Edit1->Text; ADOTable1->FieldByName("Age")->AsInteger = StrToInt(Edit2->Text); ADOTable1->Post(); } void __fastcall TForm1::Button2Click(TObject *Sender) { ADOTable1->Delete(); } void __fastcall TForm1::Button3Click(TObject *Sender) { ADOTable1->Edit(); ADOTable1->FieldByName("Name")->AsString = Edit1->Text; ADOTable1->FieldByName("Age")->AsInteger = StrToInt(Edit2->Text); ADOTable1->Post(); } ``` 在这个示例代码中,我们使用了 TADOConnection 控件连接了名为 database.mdb 的 Access 数据库,并使用了 TADOTable 控件操作了 Table1 数据表。在按钮的 Click 事件中,我们可以使用 TADOTable 控件的 Insert、Delete、Edit、Post 方法实现对数据表的增删改查操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值