由于代码冗余,我将常用的 ADOQuery 处理概括为一个自己的方法,该方法返回查询的 _RecordSet。现在,当我检查该方法中的查询结果时,它们检查正常。但是返回的_RecordSet 似乎为空或nil(异常:EOleException 'Item cannot be found in the collection to the specific name or ordinal.')从我收集的信息来看,我似乎需要返回查询的_RecordSet的克隆。到目前为止,我已经尝试使用
res := qr.Recordset.Clone(adLockUnspecified); Result := res;
,
TADOQuery.RecordSet._xClone()
方法
不成功,以及这些方法,其中没有一个有效(几个组件无法识别,我猜是版本差异)。
我用于查询的代码:
function queryDb(const s: WideString; const dc: boolean = true): _RecordSet;
var
ds: String;
conn: TADOConnection;
qr: TADOQuery;
res: _RecordSet;
begin
Result := nil;
conn := TADOConnection.Create(nil);
qr := TADOQuery.Create(nil);
try
ds := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ ExtractFilePath(Application.ExeName)
+ 'gdkp.mdb;Persist Security Info=False';
conn.ConnectionString := ds;
conn.LoginPrompt := false;
conn.Connected := true;
qr.Connection := conn;
if(dc = true)then begin
qr.DisableControls
end;
qr.SQL.Add(s);
qr.Open;
Result := qr.Recordset;
finally
conn.Free;
qr.Free;
end;
end;
之前是否有人克服过这个问题并知道合适的答案,或者可以引导我找到有用的内容?