有一ADOQuery执行Open动作后会获取一个返回数据集我想做的:
在不涉及使用TDataSetProvider控件的基础上将ADOQuery中的数据集封装成一个OleVariant(经传输后此数据能直接赋给TClientDataSet使用)为什么有如此要求:
原来编写一个程序,采用三层结构,在局域网或VPN上应用没问题,现需通过外部广域网进行数据访问(动态IP,仅开了一个端口),但在中间层跟踪发现任何涉及TDataSetProvider的TClientDataset, TADOQuery等组件都无法Open(如将DataSetProvider.DataSet属性设为ADOQuery,则此ADOQuery将无法执行Open动作),将属性去除后就可以。疑问:是否DataSetProvider指向的查询组件会再开一个端口供查询用?
谢
在不涉及使用TDataSetProvider控件的基础上将ADOQuery中的数据集封装成一个OleVariant(经传输后此数据能直接赋给TClientDataSet使用)为什么有如此要求:
原来编写一个程序,采用三层结构,在局域网或VPN上应用没问题,现需通过外部广域网进行数据访问(动态IP,仅开了一个端口),但在中间层跟踪发现任何涉及TDataSetProvider的TClientDataset, TADOQuery等组件都无法Open(如将DataSetProvider.DataSet属性设为ADOQuery,则此ADOQuery将无法执行Open动作),将属性去除后就可以。疑问:是否DataSetProvider指向的查询组件会再开一个端口供查询用?
谢
tmpdsp.DataSet := nil; //此行无作用 如果在设计时设计了tmpdsp.DataSet = Q_tmp 即使赋了空值,以下的Q_tmp依然不可以Open
Q_tmp.SQL.Clear;
Q_tmp.SQL.Add(GetSQL(Params)); //生成SQL语句
Q_tmp.Open; //能打开并返回结果 tmpdsp.DataSet := Q_tmp; //执行此行的问题就来了 Q_tmp会自动Close 且tmpdsp.Data中无数据
......如何才能返回将Q_tmp查出的数据返回形如tmpdsp.Data数据 ???
begin
tmpdsp.DataSet = Q_tmp
Q_tmp.SQL.Clear;
Q_tmp.SQL.Add(GetSQL(Params));
//在此Q_tmp无需Open; dsp的data属性会帮你执行SQL并返回数据.
Result := tmpdsp.data;
end;