私はアプリケーションをBDEからADOに変換しています。Delphiでこれを行うにはどうすればいいですか?
BDEでは、クエリが開いていて、 "Sql.Clear"を呼び出した場合、自動的にデータセットが閉じられます。
ただし、TADOQueryでは例外が発生します。「閉じられたデータセットに対して操作を実行できません」。
従来のコードの多くは古いBDEの動作に依存しているため、以下の例のようなコードから多くのランタイムエラーが発生します。
".Close"コマンドが含まれるように、私のTADOCustomQueryクラスのSql.Clearメソッドをオーバーライドする必要があります。どうやってやるの?
".Clear"メソッドは、TWideStrings型のSQLプロパティにあります。私の本当の質問は、TADOQueryの子孫でTWideStrings.Clearメソッドをどのようにオーバーライドできますか?
私はSQLプロパティのこれで、既にカスタマイズさTADOQueryコンポーネントを持っています。ここでは
property SQL: TWideStrings read GetSQL write SetSQL;
は私がいる問題を実証するためのいくつかのコードです:もちろん
procedure TForm1.btnBDEDemoClick(Sender: TObject);
var
qryBDE: TQuery;
begin
//Both queries complete with no problem
qryBDE := TQuery.Create(nil);
try
with qryBDE do begin
DatabaseName := 'Test'; //BDE Alias
Sql.Clear;
Sql.Add('SELECT SYSDATE AS CURDAT FROM DUAL');
Open;
ShowMessage('the current date is: ' + FieldByName('CURDAT').AsString);
Sql.Clear; //<<<<<NO ERRORS, WORKS FINE
Sql.Add('SELECT SYSDATE-1 AS YESDAT FROM DUAL');
Open;
ShowMessage('And yesterday was: ' + FieldByName('YESDAT').AsString);
end; //with qryBDE
finally
FreeAndNil(qryBDE);
end; //try-finally
end;
procedure TForm1.btnADODemoClick(Sender: TObject);
const
c_ConnString = 'Provider=OraOLEDB.Oracle.1;Password=*;'+
'Persist Security Info=True;User ID=*;Data Source=*';
var
adoConn: TADOConnection;
qryADO: TADOQuery;
begin
//First query completes, but the second one FAILS
adoConn := TADOConnection.Create(nil);
qryADO := TADOQuery.Create(nil);
try
adoConn.ConnectionString := c_ConnString;
adoConn.Connected := True;
with qryADO do begin
Connection := adoConn;
Sql.Clear;
Sql.Add('SELECT SYSDATE AS CURDAT FROM DUAL');
Open;
ShowMessage('the current date is: ' + FieldByName('CURDAT').AsString);
Sql.Clear;//<<<<<<<<===========ERROR AT THIS LINE
Sql.Add('SELECT SYSDATE-1 AS YESDAT FROM DUAL');
Open;
ShowMessage('And yesterday was: ' + FieldByName('YESDAT').AsString);
end; //with qryADO
finally
FreeAndNil(qryADO);
FreeAndNil(adoConn);
end; //try-finally
end;
はい、私はそれを知っています...しかし、私はコード内の既存の場所の100sにこの行を追加することを避けることを望んでいます。 – JosephStyons