私の質問はショーンのものと同じです (リンク)
しかし、その質問には答えがないようです。
TADOStoredProc
パラメータを名前で渡すために使用できるツール以外のツールはありますか?
を使用することで可能であることがわかっていParameters.Refresh
ます。しかし、サーバーへの追加のラウンドトリップが発生するため、それを使用したくありません。
UniDACも試しましたが、パラメーターを名前で渡すこともできません。
設計時にプロシージャ名を追加すると、設計時にパラメータを確認することもできます (接続が必要になると思います)。そうすれば、すべての SQL をコードに入れる必要はなく、実行時にパラメーターをチェックする必要もありません。呼び出すプロシージャごとにフォームデータ モジュールに ADOStoredProc を配置するだけです。より適切な名前を付けることができ、多くのコードを節約できます。
もちろん、クエリとコマンドについても同じことが言えます。
または、コードからパラメーターを自分で追加することもできます。を使用して、パラメータを名前、タイプ、およびその他のプロパティとともに指定できますYourADOStoredProc.Parameters.Add
。
ADO コントロールを 1 つ以上のデータ モジュールに追加すると、アプリケーション全体から簡単に呼び出すことができます。メソッドを記述して呼び出しをラップすることもできます (そうすべきだと思います)。そうすれば、アプリケーション全体でパラメーターをいじる必要がなくなり、そのラッパー メソッドでパラメーターを構成できます。
procedure TYourDataModule.DeleteCustomer(CustomerId: Integer);
var
CustomerIdParam: TParameter;
begin
with YourDeleteCustomerADOStoredProc do
begin
CustomerIdParam := Parameters.FindParam('P_CUSTOMERID');
if CustomerIdParam = nil then
begin
CustomerIdParam := Parameters.AddParameter;
CustomerIdParam.Name := 'P_CUSTOMERID';
CustomerIdParam.DataType := ftInteger;
CustomerIdParam.Direction := pdInput;
//CustomerIdParam.Size := 40; // May be needed for strings;
end;
CustomerIdParam.Value := CustomerId;
ExecProc;
end;
end;
YourDataModule.DeleteCustomer(20)
そうすれば、パラメーターを気にすることなく、アプリケーション全体で呼び出すことができます。ただし、ご覧のとおり、少しコーディングが必要なため、設計時の構成の使用を再検討できます。それは本当に簡単です。