《VC语言6.0程序设计从入门到精通》第133章


isDesc = FALSE;

最后要将各控件和它们对应的变量关联起来,代码如下:
void CAdoTestView::DoDataExchange(CDataExchange* pDX )
·359 ·
…………………………………………………………Page 371……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通

CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdoTestView)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
DDX_Control(pDX; IDC_LISTBOX; m_strListBox);
DDX_Control(pDX; IDC_DATAGRID; m_strDataGrid);
DDX_Text(pDX; IDC_CONNECTION_STRING; m_strConnection);
DDX_Text(pDX; IDC_EXECUTE_STRING; m_strSQL);

(2 )编写各消息响应函数
前面已经说过,在编写 ADO 的程序时,要用 try 和 catch,否则 ADO 调用错误有可能使 
程序崩溃,一定要随时记得捕捉__error 例外以及其他错误。因此首先编写捕获例外时的 
处理函数。为类 CAdoTestView 添加 public 成员函数 void GenerateError(HRESULT hr; PWSTR
pwszDescription) ,代码如下:
void CAdoTestView::GenerateError(HRESULT hr; PWSTR pwszDescription )

CString m_strError;
m_strError。Format(〃Run…time error ’%d (%x)’〃; hr; hr);
m_strError += 〃nr〃;
m_strError += pwszDescription;
AfxMessageBox(m_strError);

接下来为各个按钮添加响应函数。首先为用来设定数据源的按钮添加响应函数:打开 
“ClassWizard ”对话框,在“Class name ”下拉菜单中选择 CAdoTestView,在 Object IDs 下 
拉列表中选择 IDC_SOURCE ,在“Messages ”下拉列表中选择 BN_CLICKED ,单击“Add
Function ”,采用默认的函数名,然后依次单击“OK ”和“Edit Code ”按钮,定位到函数 
CAdoTestView::OnSource(),代码如下:
void CAdoTestView::OnSource()

// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
HRESULT hr;
IDataSourceLocatorPtr m_dlPrompt = NULL;
_ConnectionPtr m_Conn = NULL;
//初始化
::CoInitialize(NULL);
·360 ·
…………………………………………………………Page 372……………………………………………………………
第 12 章 数据库开发
//创建 IDataSourceLocatorPtr 的实例
hr = m_dlPrompt。CreateInstance(__uuidof(DataLinks));
//弹出数据连接的对话框
m_Conn = m_dlPrompt…》PromptNew();
if (m_Conn!=NULL)

//将连接字符串复制到 m_strConnect 中
m_strConnection。Format(〃%s〃; (char*)m_Conn…》ConnectionString);
//将变量中的值保存到控件中
UpdateData(FALSE);


编写好设置数据源的代码,接下来该为“连接”按钮编写响应函数了。在编写此函数之 
前,先要编写数据库表名的函数。因为当连接成功时,在 List Box 控件中会显示出数据库中 
所有表的名称。为类 CAdoTestView 添加一个函数 void getTables() ,它是 public 的,用来显 
示表名。代码如下:
void CAdoTestView::getTables()

_bstr_t tablesNames;
CString kooky;
//先将 List Box 清空
m_ListBox。ResetContent();
//将控件中的值保存到变量中
UpdateData( TRUE);
try

//创建实例
m_Recordset。CreateInstance(__uuidof(Recordset));
// 以只读方式打开结果集,得到表名信息
m_Recordset = m_Connection…》OpenSchema (adSchemaTables;vtMissing;vtMissing);
//如果结果集没有结束
while (!m_Recordset…》adoEOF)

//得到表项的名字
tablesNames = m_Recordset…》GetCollect(〃TABLE_NAME〃);
kooky = (char*) tablesNames;
//如果是表项,则加到 ListBox 中
if (kooky。Left(4) != 〃MSys〃)
m_ListBox。AddString( kooky );
//移到下一个表项
·361 ·
…………………………………………………………Page 373……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
m_Recordset…》MoveNext();


//捕获例外__error
catch (__error &e)

GenerateError(e。Error(); e。Description());

//捕捉其他例外
catch(。。。) {}
//将变量中的值保存到控件中
UpdateData( FALSE );
//最后将结果集置为空
m_Recordset = NULL;

现在为“连接”按钮编写响应函数 。具体步骤与为“数据源”按钮添加响应函数的一致, 
只是 Object IDs 下拉列表中选择 Connect 按钮的 ID :IDC_CONNECT ,代码如下:
void CAdoTestView::OnConnect()

// TODO: Add your control notification handler code here
//更新变量值
UpdateData(TRUE);
try

//创建实例
m_Connection。CreateInstance(__uuidof(Connection));
//根据连接字符串开启数据连接
小说推荐
返回首页返回目录