工控编程吧
标题: 上位机通过ADO动态创建数据源mdb文件与连接数据库 [打印本页]
作者: qq263946146 时间: 2017-6-2 15:42
标题: 上位机通过ADO动态创建数据源mdb文件与连接数据库
使用微软ADO开发数据库步骤
一.引入ADO库。
ADO库收入的代码在后续编程中不常更改,可以放在stdafx.h预编译头文件中
代码如下:
#import "C:\\Program Files\\CommonFiles\\System\\ado\\msado15.dll"no_namespace \
rename("EOF","adoEOF")rename("BOF","adoBOF")
#importo为预处理指令 ,让程序在编译过程中引入 ADO动态库msado15.dll,此文件随系统安装在C:\\Program Files\\Common Files\\System\\ado\\。
no_namespace表示不使用命名空间。
rename("EOF","adoEOF")表示把ADO库中用到的EOF改成adoEOF,防止在我们编写程序中,命名冲突;
rename("BOF","adoBOF")与rename("EOF","adoEOF")同样的功能.
斜杠\表示换行输入,让全部代码在编程软件上可见;
二.初始化与连接ADO库
程序初始化时调用函数::CoInitialize(NULL);初始化ADO所需的COM环境。
程序退出时调用函数::CoUninitialize();清除COM环境资源;
定义Connection对象的智能指针变量_ConnectionPtrm_pConnect;再调用4.CreateInstance实例化对象m_pConnect.CreateInstance(__uuidof(Connection));
__uuidof关键字用于将Connection转换为其对应的CLSID;
调用Connection的成员函数open连接数据库。
try {
_bstr_t strConnect ="
rovider=Microsoft Access Driver(*.mdc)
assword=123;UserID=456;DataSource=789.mdb; "; m_pConnect->Open(strConnect,"","",-1);
}
catch (_com_error e){
AfxMessageBox(e.ErrorMessage());
}
Open的具体介绍可以MSDN搜索Open Method (Connection - ADO);
上面代码中strConnect是连接字符串,通过MSDN可找到具体使用介绍;
Password=123;UserID=456;是访问数据库的用户名与密码;
Open函数原形connection.Open ConnectionString, UserID, Password, Options;
ConnectionString 可选,字符串,包含连接信息。参阅 连接字符串属性可获得有效设置的详细信息。
UserID 可选,字符串,包含建立连接时所使用用户名。
Password 可选,字符串,包含建立连接时所使用密码。
Options 可选,ConnectOptionEnum 值。决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回。可以是如下某个常量;
Sourceoo为数据库。这里使用try,catch,来处理异常,如果不处理,ADO的异常可能会使程序崩溃。
其中数据源DataSource,在这里可以是mdb文件。这种数据文件可以事先由外部程序创建,也可以通过代码动态创建
strcpy(cPath,sPath);
sPath.Format("
rovider='Microsoft.JET.OLEDB.4.0';DataSource='%s'",cPath); _bstr_t strcnn = sPath;
ADOX::_CatalogPtr pCat;
pCat.CreateInstance(__uuidof(ADOX::Catalog));
pCat->Create(strcnn);
下面为例程关键代码:
- #import "C:\\Program Files\\Common Files\\System\\ado\\msadox.dll" \
- rename("EOF","adoEOF") rename("BOF","adoBOF")
- #import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll"no_namespace \
- rename("EOF","adoEOF") rename("BOF","adoBOF")
- #include <io.h>
复制代码
- void CADO::CreateMDB()
- {
- char cPath[MAX_PATH];
- GetModuleFileName(NULL,cPath,MAX_PATH);
- CString sPath(cPath);
- sPath=sPath.Left(sPath.ReverseFind('\\'));
- sPath +="\\data\\Test.mdb";
- if(!_access(sPath,0))
- return;//文件已存在
- ////创建MDB文件
- strcpy(cPath,sPath);
- sPath.Format("Provider='Microsoft.JET.OLEDB.4.0';Data Source='%s'",cPath);
- _bstr_t strcnn = sPath;
- ADOX::_CatalogPtr pCat;
- pCat.CreateInstance(__uuidof(ADOX::Catalog));
- pCat->Create(strcnn);
- //在MDB文件内创建用户与密码
- /* ADOX::_UserPtr pUser;
- pUser.CreateInstance(__uuidof(ADOX::User));
- pUser->PutName("gkbc8");
- pUser->ChangePassword("", "gkbc8Password");
- pCat->Users->Append(_variant_t((IDispatch *)pUser), "");
- pCat->Groups->Append("Accounting"); //创建用户组
- pUser->Groups->Append("Accounting"); //归属到用户组*/
- ////在MDB文件内创建表格
- ADOX::_TablePtr pTable;
- pTable.CreateInstance(__uuidof(ADOX::Table));
- pTable->PutName("NewTable");
- pTable->Columns->Append("Column1",ADOX::adInteger,0);
- pTable->Columns->Append("Column2",ADOX::adInteger,0);
- pTable->Columns->Append("Column3",ADOX::adVarWChar,50);
- pCat->Tables->Append( pTable.GetInterfacePtr() );
- pTable =NULL;
- pCat =NULL;
- }
- CADO::CADO()
- {
- ::CoInitialize(NULL);
- m_pConnect.CreateInstance(__uuidof(Connection));
- try {
- CreateMDB();
- m_pConnect->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= data\\Test.mdb","","",adModeUnknown);
- }
- catch (_com_error e){
- AfxMessageBox(e.ErrorMessage());
- }
- }
- CADO::~CADO()
- {
- if(m_pConnect->State)
- m_pConnect->Close();
- m_pConnect= NULL;
- ::CoUninitialize();
- }
复制代码