0

私の質問はショーンのものと同じです (リンク)

しかし、その質問には答えがないようです。

TADOStoredProcパラメータを名前で渡すために使用できるツール以外のツールはありますか?

を使用することで可能であることがわかっていParameters.Refreshます。しかし、サーバーへの追加のラウンドトリップが発生するため、それを使用したくありません。

UniDACも試しましたが、パラメーターを名前で渡すこともできません。

4

1 に答える 1

2

設計時にプロシージャ名を追加すると、設計時にパラメータを確認することもできます (接続が必要になると思います)。そうすれば、すべての 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)そうすれば、パラメーターを気にすることなく、アプリケーション全体で呼び出すことができます。ただし、ご覧のとおり、少しコーディングが必要なため、設計時の構成の使用を再検討できます。それは本当に簡単です。

于 2012-09-26T07:08:01.687 に答える