当前位置:主页>销售管理软件> 列表

请多多帮忙 ado查询结果的复制问题

记账软件版1楼: 下面这段代码会报 cannot assign a tadoquery to a tdataset,为什么?
//Execute SQL Use
function ExecQuerySQL(strSQL:String; strLoginName:String; strFormID : String;
connADO:TADOConnection): TDataSet;
var
queADO: TADOQuery;
begin
queADO := TADOQuery.(Application.Owner);
Result := TDataSet.Create(Application.Owner);
queADO.Connection := connADO;
try
if not connADO.Connected then
connADO.Connected := True;
with queADO do
begin
Close;
SQL.Clear;
Parameters.Clear;
SQL.Add(strSQL);
Open;
Result.Assign(queADO.);
end;
except
end;
queADO.Free;
end;

2楼: 直接用下面的语句复制,将ADOQuery2已查询的数据复制到ADOQuery1:
ADOQuery1.clone(ADOQuery2); 如速达

3楼: 不行啊,这只是复制adoquery,但是得不到查询的结果集

4楼: 这个就是复制结果集的,看来楼主还没有搞清楚什么是结果集:
2.将_Recordset传给一个TAdoDataset的RecordSet属性即可。
var
ds:_Recordset;
ads:TAdoDataSet; {可以是放在窗体上的控件}
begin
ds := ExecuteQuery( str )
ads := TAdoDataSet.Create;
adsData.Recordset = dr;

5楼: 这个不是复制,是赋值。

6楼: Result.Assign(queADO.);这句有问题,queADO是TADOQuery,而Result是TDATASET不是同一种类怎么能Assign?
函数声明改为:function ExecQuerySQL(strSQL:String; strLoginName:String; strFormID : String;connADO:TADOConnection): TADOQuery;
RESULT赋值改为:Result := TADOQuery.Create(Application);
但如果只是要数据吃饭的那家伙的方法较好:ADOQuery1.clone(ADOQuery2);

记账软件版7楼: 不知道怎样说楼主才会明白,有点后悔进来,不过还是说多一次吧:
.recordset属性是封装了最底层的数据集,它的子属性还包括了所有操作数据集的功能
每个ADO控件都保留了.recordset属性,包括ADOQuery,ADOTable,ADODateSet等控件都
有这个属性,要复制数据集只需要传递.recordset属性即可,比返回DateSet类型要好,
因为它是原始数据接口,适用于每个控件,即使做成DLL,给VC,VB等其它程序调用也可以.

8楼: recordset就是结果集啊。。。。。。直接让一个adoquery的recordset等于另一个adoquery的recordset就行了


还有 楼主的这段代码是不是想执行一段sql然后获得他的返回结果啊,为什么不直接传个adoquery而非要动态创建个adoquery然后返回其结果集?

9楼: 同意楼上的,应该遵循谁创建谁释放的原则.
不推荐用对象作为返回值.可以传入一个对象,操作

10楼: 改一下你的那个过程:
function ExecQuerySQL(strSQL:String; strLoginName:String; strFormID : String;
connADO:TADOConnection;DataSet: TADOQuery): Boolean;
begin
Result := False;
DataSet.Connection := connADO;
try
if not connADO.Connected then
connADO.Connected := True;
with DataSet do
begin
Close;
SQL.Clear;
Parameters.Clear;
SQL.Add(strSQL);
Open;
end;
Result := True;
except
end;
end;

然后调用:
if not ExecQuerySQL(strSQL, ''sa'', ''sa'',ADOConnection1,ADOQuery1) then
showmessage(''执行失败!'');

11楼: 多人接受答案了。