【问题标题】:Return value of stored functions in MyDACMyDAC 中存储函数的返回值
【发布时间】:2010-09-13 20:33:29
【问题描述】:

我正在使用Devart's MyDac 和 MySQL Server 5.0.41。这是文档中有关使用TMyConnection.ExecProc 执行存储过程的部分:

注意:与存储过程不同,存储函数返回的结果值是通过 RESULT 参数在内部获得的。您将不再需要在 Params 数组中提供匿名值来描述函数的结果。存储的函数结果是从 Params[0] 索引属性或使用 ParamByName('RESULT') 方法调用获得的。

他们还举例说明了如何执行存储的函数:

aStringVariable1 := TMyConnection.ExecProc('StoredFunctionName',['Param1','Param2']); aStringVariable2 := TMyConnection.ParamByName('Result').AsString;

按照这些示例,我对存储函数的执行在变量aStringVariable2 中返回Param1。在查询浏览器中执行函数返回正确的结果。任何有关使用TMyConnectionTMyStoredProc 在 MyDAC 中执行存储功能的正确方法的指针将不胜感激。

提前致谢。

【问题讨论】:

    标签: mysql delphi mydac


    【解决方案1】:

    这是我们用来调用存储过程的代码——希望对你有帮助

    function TDbControl.DatabaseStoredProc(FConnectionsAddr: integer; SpName: string;var Params: TDAParams): boolean;
    var
      MyStoredProc: TMyStoredProc;
      PramsTxt: String;
      Idx, Idx2: Integer;
    begin
      result := False;
      MyStoredProc := nil;
      try
        try
          MyStoredProc := TMyStoredProc.Create(nil);
          MyStoredProc.Connection := TMyConnection(FConnectionsAddr);
          MyStoredProc.StoredProcName := SpName;
          MyStoredProc.ParamCheck := False;
          if assigned(Params) then
          begin
            for Idx := 0 to Params.Count - 1 do
            begin
                MyStoredProc.ParamByName(Params[Idx].Name).DataType := Params[Idx].DataType;
                MyStoredProc.ParamByName(Params[Idx].Name).Value := Params[Idx].Value;
            end;
          end;
          MyStoredProc.Execute;
          if assigned(Params) then
          begin
            for Idx := 0 to Params.Count - 1 do
            begin
             if (Params[Idx].ParamType =  ptOutput ) then
                Params[Idx].Value := MyStoredProc.ParamByName(Params[Idx].Name).Value;
            end;
          end;
          result := True;
        except
          on E: Exception do
          begin
            PramsTxt := '';
            if assigned(Params) then
            begin
              for Idx2 := 0 to Params.Count - 1 do
              begin
                PramsTxt := PramsTxt + Params.Items[Idx2].Name + '=' + Params[Idx2].AsString + ',';
              end;
            end;
            LogText(FConnectionsAddr, 'DatabaseStoredProc Err:' + E.Message + '  SpName:' + SpName + '  Prams:' + PramsTxt);
            raise ;
          end;
        end;
      finally
        FreeAndNil(MyStoredProc);
      end;
    end;
    

    【讨论】:

    • 我希望不需要用商业数据访问库编写这样的代码。 MyDAC 不是为此内置了一些东西吗?
    • @oodesigner,MyDAC 构建功能是我要问的,似乎它没有一种简单的方法来处理存储的函数。我已经能够通过一个函数调用来调用没有OUT 参数的存储函数,我问了一个问题,想知道是否有类似的方法可以对没有参数的存储函数或过程执行相同的操作。 @Charles,这行得通。谢谢
    • 没有OUT参数且没有存储函数的存储过程
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多