回 帖 发 新 帖 刷新版面

主题:一个关于三层之间数据传递的问题,很简单,只因我太笨!

刚学三层,有一个问题:
应用层的远程数据模块中使用ADOConnection、ADOQuery、DataSetProvider三个组件各一个,客户端使用SocketConnection、ClientDataSet及相应的数据源和显示组件。为了检测应用层中的数据,我在应用层的Form1上添了一个DBGrid1组件用于显示ADOQuery1中的数据。
我的目的是在客户端发出指令,控制应用层提供指定条件的数据。一种方法
是使用ClientDataSet的CommandText属性,另一种方法是在应用层编写一个接口函数,在客户端调用它。
1 使用第1种方法时,向ClientDataSet的CommandText中写入的sql语句执行成功,客户端显示出select以后的数据,但是应用端的DBGrid1组件没有变化。
2 使用第2种方法时,接口函数为:
STDMETHODIMP TadoproImpl::remosql()
{
AnsiString sqlline="select * from cjwl01.dbf where xm like '李'";
try
{
adopro->ADOQuery1->Close();
adopro->ADOQuery1->SQL->Clear();
adopro->ADOQuery1->SQL->Add(sqlline);
adopro->ADOQuery1->ExecSQL();
adopro->ADOQuery1->Open();
adopro->DataSetProvider1->ResolveToDataSet=true;
}
catch(Exception &E)
{
//Form1->Edit1->Text=E.Message;
}
}
当客户端端调用这个函数后,应用层的DBGrid1显示为sql执行后的结果,而客户端的显示没有改变。给我的感觉就是应用层的数据没有传送过来。即使在客户端刷新ClientDataSet也无济于事,客户端显示的还是以前的内容。

回复列表 (共3个回复)

沙发

有人说可以在接口函数中使用一个[in,out]参数,VARIANT*类型,将select的结果由这个参数返回给客户端,但是具体应该怎样实现?

板凳

服务端需要 DataProvider 用了吗

3 楼

当然有这个DataProvider,只不过不知道怎样用它。

我来回复

您尚未登录,请登录后再回复。点此登录或注册