uses adoint;var RS: _Recordset;RS := TPassRsObj.GetData as _Recordset; if RS = Nil then ShowMessage('接口错误') else ShowMessage('获取_Recordset接口成功');
非常感谢liangpei2008的指点。我在ADODB.pas找到了解决方法。 也非常感谢unsigned ,结贴时没看到你到最后回复,所以没有给你分,真是不好意思。解决如下: var rs: _RecordSet; VarResult: OleVariant; begin VarResult := PassRsObj1.getdata; rs := IUnknown(VarResult) as _Recordset; while not rs.EOF do begin showmessage(rs.Fields[1].value); rs.MoveNext; end;
var
Test:_RecordSet;
begin
Test:=函数返回值(iDispatch) as _RecordSet;
end;
那是ms提供出的ADO接口,由各个厂商具体实现!
Delphi把其放入ADODB.pas中!
如果能看到函数实现,应该先看一下(很可能是一个中间层的接口函数,你可能看不到),函数的实现可能是function TestMethod: IDispatch;
var
adoDS:_Recordset;
begin
//创建adods
//做一些操作向Recordset中
result:= adoDS as IDispatch;
end;
你按照它的做数据操作不就行了
vc写的一个asp组件中的一个读取数据的函数。能不能将IDispatch转化为TClientdateSet可以接受的数据。
begin
Result := DefaultInterface.GetData;
end;
STDMETHODIMP CPassRsObj::GetData(LPDISPATCH *ppRecordset)
{
_RecordsetPtr pSet; ...... pSet->Clone(adLockOptimistic)->QueryInterface(IID_IDispatch, (void**) ppRecordset);
return S_OK;
}
adoint;var
RS: _Recordset;RS := TPassRsObj.GetData as _Recordset;
if RS = Nil then ShowMessage('接口错误')
else ShowMessage('获取_Recordset接口成功');
也非常感谢unsigned ,结贴时没看到你到最后回复,所以没有给你分,真是不好意思。解决如下:
var
rs: _RecordSet;
VarResult: OleVariant;
begin
VarResult := PassRsObj1.getdata;
rs := IUnknown(VarResult) as _Recordset;
while not rs.EOF do
begin
showmessage(rs.Fields[1].value);
rs.MoveNext;
end;