请大家帮忙看看下面的代码...

chen7872 2006-08-02 10:18:15
多层数据库开发
服务器端定义的方法如下:
STDMETHODIMP TLogin_ServerImpl::QueryGoodsData(BSTR ASQLText,
VARIANT* AData, long* AError)
{
*AError=0;
try
{
m_DataModule->ADOQuery1->Close();
m_DataModule->ADOQuery1->Connection = m_DataModule->ADOConnection1;
m_DataModule->ADOQuery1->SQL->Clear();
m_DataModule->ADOQuery1->SQL->Add(ASQLText);
m_DataModule->DataSetProvider1->DataSet = m_DataModule->ADOQuery1;
m_DataModule->ADOQuery1->Open();
*AData=m_DataModule->DataSetProvider1->Data;

SetComplete();
}
catch(...)
{
SetAbort();
*AError=1;
}
return S_OK;
}
客户端调用如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCOMILogin_Server objWS = CoLogin_Server::Create();
WideString sSQLCommand;
Variant SSResult;
sSQLCommand = ledtSQL->Text;
long nError=-1;
objWS->QueryGoodsData(sSQLCommand,(Variant)&SSResult,&nError);
if(nError==0)
{
ClientDataSet1->Data = SSResult;
}
else
{
ShowMessage(IntToStr(nError));
}
}
执行后nError还是为-1,好象没有执行的一样,请大家帮忙解决一下!谢谢!
...全文
277 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2006-09-16
  • 打赏
  • 举报
回复
TVariantT augments the Windows VARIANT structure, which represents arguments that are passed over an IDispatch interface. Like the VARIANT structure from which it descends, TVariantT carries its type information with it, so that a single class can be used to represent information of disparate types.
TVariant只是对VARIANT的封装,数据结构与VARIANT应该是一样的
Variant就不一样了,它是VCL的类,你的服务器和客户端定义不一样( VARIANT/Variant)所以会错
chen7872 2006-09-16
  • 打赏
  • 举报
回复
问题解决了,把VARIANT 改成TVariant就可以了.
chen7872 2006-08-02
  • 打赏
  • 举报
回复
COM组件都已经注册了。还有别的原因吗?
kangji 2006-08-02
  • 打赏
  • 举报
回复
基于COM的?
组建注册了没?
jaffy 2006-08-02
  • 打赏
  • 举报
回复
看了代码,感觉是没有执行,看看服务器的COM服务是否开了,并且要用代码证明的确是开了
chen7872 2006-08-02
  • 打赏
  • 举报
回复
在服务端我用BSTR类型可以调用,但是用Variant类型就不可以.
chen7872 2006-08-02
  • 打赏
  • 举报
回复
权限配置应该没有问题
kangji 2006-08-02
  • 打赏
  • 举报
回复
权限配置的对不对?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧