关于建立多层数据库应用的问题 (100分)

  • 主题发起人 主题发起人 mzyang
  • 开始时间 开始时间
M

mzyang

Unregistered / Unconfirmed
GUEST, unregistred user!
本人近日正在学习建立多层数据库,在书上见到如下语句(我用bcb5):
STDMETHODIMP TSQLDdataServerImpl::get_sqlQuery(IProviderPtr* Value)
{
try
{
_di_IProvider IProv=m_DataModule->ADOConnection1->Provider;
IProv->AddRef();
*Value=IProv;
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_ISQLDdataServer);
}
return S_OK;
};
这是在远程数据模板上增加的一个只读属性sqlQuery的只读度方法get_sqlQuery
其作用是捕捉客户端的数据查询
其中m_DataModule是一个指向远程数据模板的指针
DBServerQuery是ADOQuery控件
对这段语句我有如下问题不明望各位富翁解答:
1、_di_IProvider 的作用是什么?是个什么东西?一种数据类型?
2、该句在编译时出现如下错误提示
E2316 'Provider' is not a member of 'TADOQuery'
如果Provider却不是TADOQuery的成员(我自己反复查询过Provider的确不是
TADOQuery的成员,也不是TQuery的成员),那我正在看的参考书作者错了??!!
后来我将DBServerQuery改为ADOConnection1:
_di_IProvider IProv=m_DataModule->ADOConnection1->Provider;
编译时用出现如下错误
E2034 Cannot convert 'WideString' to '_di_IProvider'

我靠!一片茫然!![:(!][:(!][:(!][:(!][:(!][:(!]
 
沟通用的!!!
 
这个什么书啊,要这么复杂吗
 
_di_IProvider应该这个类型IProviderPtr,但我DELPHI中没找到!
 
CB中是可以的,不过delphi我不知道。
我可以告诉你一个更好的,
服务器中:在...IMP.cpp中加一个函数:
OleVariant __fastcall TChemical::ChemProviderDataRequest(TObject *Sender,
OleVariant &Input)
{
int i;
AnsiString SqlString=(WideString)Input;
ChemQuery->Close();
ChemQuery->SQL->Clear();
ChemQuery->SQL->Add(SqlString);
ChemQuery->Prepare();
ChemQuery->Open();
return ChemProvider->GetRecords(-1,i,grReset);
}
//---------------------------------------------------------------------------
客户端:
ClientDataSet1->Data = ClientDataSet1->DataRequest(AnsiString("Select * From Chem.dbf where ORDERID='"+Value+"'"));
OK,就行了。
 
多人接受答案了。
 
后退
顶部