工控编程吧
标题:
289上位机VC MFC使用ADO实现表的字段操作
[打印本页]
作者:
qq263946146
时间:
2016-9-26 11:44
标题:
289上位机VC MFC使用ADO实现表的字段操作
(, 下载次数: 1)
上传
点击文件名下载附件
ADO实现表的字段操作
功能展示
在ADO编写数据库程序是对表字段的操作也是很常用的功能,我们当前例程实现对不同表的字段获取 功能,效果如图,程序运行时会初始化连接例程根目录的数据库文件,在组合框中选择不同的表名,再点击<显示已选择表字段>可以在列表框中显示出所选表的字段名;
要点提示
在ADO中可以直接使用Recordset对象的成员函数Open()打开记录集,Open 方法的原型为: HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection,
enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options )
1Source 是数据查询字符串 2ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个 _variant_t对象) 3CursorType光标类型
4LockType锁定类 型
5.option可以取以下值 adCmdText: 表明CommandText是文本命令 adCmdTable:表明CommandText是一个表名 adCmdProc:表明 CommandText是一个存储过程 adCmdUnknown:未知
更多类型可以查阅MSDN手册
从记录集中得到的值都是VARIANT类型,在VC提供有两方法转换:1.直接通过GetCollect(字段名)或m_pRecordset->Fields->GetItem(字段名)获得当前记录variant类型值,再进行转换为所需值;2通过映射返回的值同变量进行捆绑,以方便值类型的转换;
实现功能
1.新建基于对话框的应用程序
2.在App类的InitInstance()函数中添加代码AfxOleInit();//初始化COM,创建ADO连接等操作
3.在stdafx.h中加入ADO支持库
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")
4.在主对话框中添加连接对象指针 _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset;
在OnInitDialog()函数中进行初始化操作
CComboBox *pComboBox = (CComboBox *)GetDlgItem(IDC_COMBO1);
//组合框添加表名称
pComboBox->AddString("students");
pComboBox->AddString("news");
pComboBox->AddString("class");
pComboBox->SetCurSel(0);
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败!");
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
5.在程序退出函数OnDestroy()中进行关闭连接释放操作
void CGkbc8Dlg::OnDestroy()
{
CDialog::OnDestroy();
m_pConnection->Close();
m_pConnection.Release();
}
6.按照例程界面添加组合框IDC_COMBO1 ,列表框IDC_LIST1 ,按钮,关联按钮的点击函数
void CGkbc8Dlg::OnDisplay()
{
CListBox *pListBox = (CListBox *)GetDlgItem(IDC_LIST1);
pListBox->ResetContent();
CComboBox *pComboBox = (CComboBox *)GetDlgItem(IDC_COMBO1);
CString str,sCombo;
pComboBox->GetLBText(pComboBox->GetCurSel(),sCombo);
str.Format("SELECT * FROM %s",sCombo);
_bstr_t mStrSQL;
CString strColName;
BSTR bstrColName;
long ColCount,i;
//Field * field = NULL;
HRESULT hr;
Fields * fields = NULL;
LPCTSTR nameField; //LPCTSTR nameField;
//打开记录集,得到字段名,并将字段名信息添加到ListBox中
mStrSQL = str;//"SELECT * FROM students";
m_pRecordset->Open(mStrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
hr = m_pRecordset->get_Fields (&fields);
//得到记录集的字段集和
if(SUCCEEDED(hr))
fields->get_Count(&ColCount);
//得到记录集的字段集合中的字段的总个数
for(i=0;i<ColCount;i++)//
{
fields->Item
->get_Name(&bstrColName);
//得到记录集//中的字段名
strColName=bstrColName;
nameField = strColName;
pListBox->AddString(nameField);
}
if(SUCCEEDED(hr))
fields->Release();//释放指针
m_pRecordset->Close();
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/04fb69a7cd123e3a8006075689b053c1/0/0/w_19rstsx3c5.swf-albumId=6398171209-tvId=6398171209-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4