|
|
在编程中使用ADO操作中涉及到COM接口的一些东东,有些人知道ADO方便,但是在具体操作的时候可能对如何从COM接口中实现调用却不太理解,使得ADO的使用上存在一些问题。<br>
我在ADO Data Control控件和ADO RecordSet的通信中遇到了这样的问题!
我希望将ADO Data Control的导航功能于ADO Recordse建立关联,一般的,ADO Data Control 于DBGrid建立关联可以通过设置DBGrid的DataSource 属性来实现。如果将DBGrid中的滚动也反映到相应的编辑框中,比较笨的办法是从DBGrid中去获得Cell的信息,然后通过ADO Recordset获得相应的记录内容。其实在ADO Data Control中已经有一个正在操作的Recordset了,所以可以通过如下的事件实现直接调用。<br>
MessageType:WillMove
Parameter:
Long adReason ; 10: ADO Data Control从数据库中读出,此时也会涉及到记录的Move,这个是要过滤掉的; 13是数据记录的滚动
Long FAR* adStatus;
LPDISPATCH pRecordset; 这个变量由于是来自ADO Data Control的COM接口,所以直接使用比较困难,需要将其转化为ADO Recordset变量才好调用。<br>
void CDyeInfoDlg::OnWillMoveAdodc1(long adReason, long FAR* adStatus, LPDISPATCH pRecordset)
{
_variant_t varFld;
CADORecordset *m_pRS;
m_pRS = new CADORecordset();
pRecordset->QueryInterface(IID_IDispatch, (void **)m_pRS);
if( adReason != 10 )
{
//将给字段的信息直接设置到编辑框中,实现ADO Data Control 于编辑框的关联!
m_pRS->GetFieldValue("DyeID",varFld);
SetDlgItemText(IDC_DYEID, LPSTR(varFld));
}
}
|
|