コードの冗長性のため、通常の ADOQuery 処理を独自のメソッドに一般化し、そのメソッドはクエリの _RecordSet を返します。今、そのメソッド内のクエリ結果をチェックすると、問題なくチェックアウトされます。しかし、返された _RecordSet は空または nil のようです (例外: EOleException 'アイテムが対応する名前または序数のコレクションに見つかりません。' ) 収集したものから、クエリの _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;
誰かが以前にこの問題を解決し、適切な答えを知っているか、役立つコンテンツに私を導くことができますか?