0

我的问题与肖恩的(链接)相同

但是,这个问题似乎没有答案。

是否有其他工具TADOStoredProc可用于按名称传递参数?

我知道使用Parameters.Refresh. 但我不想使用它,因为它会额外往返服务器。

我也尝试过UniDAC,但也无法按名称传递参数。

4

1 回答 1

2

如果您在设计时添加过程名称,您还可以在设计时检查参数(我认为您需要一个连接)。这样,您不必将所有 SQL 都放入代码中,也不必在运行时检查参数。只需在要调用的每个过程的表单数据模块上放置一个 ADOStoredProc 。你可以给它们起一个更合理的名字,你可以节省很多代码。

当然,查询和命令也是如此。

或者,您可以自己添加代码中的参数。您可以使用 指定参数及其名称、类型和其他属性YourADOStoredProc.Parameters.Add

如果您将 ADO 控件添加到一个或多个数据模块,您可以轻松地从整个应用程序中调用它们。您甚至可以编写方法(我认为您应该)来包装调用。这样,您不必在整个应用程序中处理参数,并且在该包装方法中,您可以配置参数:

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 回答