http://expert.csdn.net/Expert/topic/1278/1278475.xml?temp=.3958094刚才给我短消息的前辈 :   您好 ,您的方法是对的,关键在 调用时要显式的说明返回参数 。
   
   存储过程 :   CREATE proc dbo.getmoney 
     @name char(20),@theMoney Float output
   as
   begin
     select @theMoney = money  from one where name = @name
     --select @theMoney as Result //
   end   代码 :  with ADOQuery2 do
  begin
    Close ;
    Sql.Clear ;
    Sql.Add('declare @a char(20),@b int') ;
    Sql.Add('set @a = ''bbb''') ;
    Sql.Add('set @b = 0') ;
P:  Sql.Add('exec getmoney  @a, @b output') ;//
    Sql.Add('select @b as Result') ;
    Edit2.Text := Sql.Text ;
    Open ;
    Label1.Caption := FieldByName('result').AsString ;
  end;如果 P 行没有显式的写出 output ,则没有返回 。 谢谢您,原来一直没有发现,谢谢您--------------------------------------------------------------------------那个贴子我填了 100 ,只有 1  ?!  --------------------------------------------------------------------------深深的感谢在我刚刚走进工作的时候给了我很多帮助的论坛的各位朋友,深深的感谢在我焦头烂额之际给我援助和支持的 Copy_paster大哥,深深的感谢在这段时间给了许多关怀和帮助的所有的朋友,深深的感谢CSDN,深深的感谢网络 !程序天堂,我心飞翔......

解决方案 »

  1.   

    zsy_good(只要坚定不移的走下去,那一定会成功) : 猜你就是第一个,刚才就抢我分 :) ,其他朋友呢 ,大哥呢 ,快来呀
      

  2.   

    呵呵,我有没有来晚了!!!!GOGO
      

  3.   

    我在这里也谢谢copy_paste(木石三)大哥!记得在10月份的时候,帮了我好多问题!
      

  4.   

    To : l_xiaofeng(流水不腐)   :  客气了 :) 你帮过我好多的 :) To : Dear :) copy_paste(木石三)   :   可算来了 :),那是我为了证明 Query 可以自由操作表、视图、存储过程中遇到的一个问题 (操作存储过程时一直取不到返回参数,原来是没有加一个 output 的缘故) 。  您给我的帮助..........多了 :):) ,ok ,愿灌水 Happy ,天天 Happpy  :) To : blazingfire(烈焰) 这么小 ?:) 叫哥哥 !:) To All Thanks a lot ! Best Wish To You ! Merry Christmas !
      

  5.   

    楼上好,谢谢您对我的帮助,以后多指教
    ---------------------------------------------------
    大家看看
    对那个线程的贴子,我的代码,他要 256 个,怎么都不行,该怎么办 ?
    大哥也来呀
    ---------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;type
      TMyThread = class(TThread)
      private  protected
        procedure Execute; override; 
      public    constructor Create; virtual; 
      end;
    var
      Form1 : TForm1;
      HSem : THandle = 0 ;
    implementation{$R *.dfm}procedure TMyThread.Execute;
    var
      WaitReturn : DWord ;
    begin
      WaitReturn := WaitForSingleObject(HSem,INFINITE) ;
      Form1.Edit1.Text := DateTimeToStr(Now);
      ReleaseSemaphore(HSem, 1, Nil) 
    end;constructor TMyThread.Create;
    begin
      inherited Create(False);
      FreeOnTerminate := True;
    end;
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to 10 do //改小 ,100 时10多分钟后内存不足
      begin
        TMyThread.Create;
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      HSem := CreateSemaphore(Nil,10,10,Nil) ;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      CloseHandle(HSem) ;
    end;end.
      

  6.   

    源贴 :http://expert.csdn.net/Expert/topic/1277/1277886.xml?temp=.8602716是不是线程个数也有个限制 ? 他的是不是太多了 ?
      

  7.   

    procedure TMyThread.Execute;
    var
      WaitReturn : DWord ;
    begin
      WaitReturn := WaitForSingleObject(HSem,INFINITE) ;
      Form1.Edit1.Text := DateTimeToStr(Now);
      ReleaseSemaphore(HSem, 1, Nil) 
    end;
    看不懂你的线程想做什么
    还有
    Form1.Edit1.Text := DateTimeToStr(Now);
    会产生VCL组件的冲突,你又忘了访问VCL组件时要怎么做的吗?
      

  8.   

    线程数量当然有冲突,但不是到那么小的数量,我以前试过200个线程去连接SQLSERVER都没事,只是慢点而已。我也看不懂那贴主想做什么。
      

  9.   

    我记得呀:) 这次我试着用信号量同步它  大哥你调试一下试试还有我这么写也不行,怎么都到不能 For i := 0 to 256 do ------------------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls,SyncObjs;type
      TMyThread = class(TThread)
      private  protected
        procedure Execute; override; { 执行线程的方法 }
        Procedure GG ;
      public    constructor Create; virtual; { 线程构造器 }
      end;
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        MyThread : Array of TMyThread ;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1 : TForm1;
      Lock: TCriticalSection;
    implementation{$R *.dfm}procedure TMyThread.Execute;
    var
      WaitReturn : DWord ;
    begin
      FreeOnTerminate := True;
      Try
        Lock.Enter ;
        Synchronize(GG)
      Finally
        Lock.Leave ;
      End;
    end;constructor TMyThread.Create;
    begin
      inherited Create(False);
    end;procedure TMyThread.GG ;
    begin
      Form1.Edit1.Text := DateTimeToStr(Now) ;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
      I: Integer;
    begin
      SetLength(MyThread,256) ;
      for I := 0 to 255 do // Iterate
      begin
        MyThread[i] := TMyThread.Create ;
      end; // for
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Lock := TCriticalSection.Create;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Lock.Free ;
    end;end.
      

  10.   

    procedure TMyThread.Execute;
    var
      WaitReturn : DWord ;
    begin
      FreeOnTerminate := True;
      Try
        Lock.Enter ;
        Synchronize(GG)
      Finally
        Lock.Leave ;
      End;
    end;
    也不对吧,即使使用了Synchronize来同步方法GG,那就不需要Lock了,而且顺序不对啊。这样:  Lock.Enter ;
      Try
        GG
      Finally
        Lock.Leave ;
      End;
      

  11.   

    还有那你说的那个贴子,不应该是在OnTimer事件中创建线程,然后做什么做什么。而是先把线程都创建好,再线程中的循环中定时处理:procedure TMyThread.Execute;
    begin
      while not Terminated do
      begin
        // do you code.
        Sleep(10000); //等待10秒再继续,这也就得到Timer的效果了
      end;
    end;
      

  12.   

    zhuxiankun1980(虹雨)  : 您好 :0
      

  13.   

    大哥,这样不行 ,窗体刚出来错了-----------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls,SyncObjs;type
      TMyThread = class(TThread)
      private  protected
        procedure Execute; override;
        Procedure GG ;
      public    constructor Create; virtual; 
      end;
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        MyThread : Array of TMyThread ;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1 : TForm1;
      Lock: TCriticalSection;
    implementation{$R *.dfm}procedure TMyThread.Execute;
    var
      WaitReturn : DWord ;
    begin
      FreeOnTerminate := True;
      Lock.Enter ;
      Try
        GG
      Finally
        Lock.Leave ;
      End;
    end;constructor TMyThread.Create;
    begin
      inherited Create(False);
    end;procedure TMyThread.GG ;
    begin
      Form1.Edit1.Text := DateTimeToStr(Now) ;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
      I: Integer;
    begin
      SetLength(MyThread,256) ;
      for I := 0 to 255 do
      begin
        MyThread[i] := TMyThread.Create ;
      end; 
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Lock := TCriticalSection.Create;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Lock.Free ;
    end;end.
      

  14.   

    大哥对不起你是对得是我的错了,我 Delphi 坏掉了,什么都不行  重启后好了 我在试试
      

  15.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        FThreads: TList;
        procedure Start;
        procedure Stop;
        procedure ThreadOnTerminate(Sender: TObject);
      end;var
      Form1: TForm1;implementationuses SyncObjs;
    {$R *.dfm}type
      TMyThread = class(TThread)
      protected
        procedure Execute; override;
      end;var
      Lock: TCriticalSection = nil;procedure TMyThread.Execute;
    begin
      while not Terminated do
      begin
        Lock.Enter;
        try
          Form1.Edit1.Text := TimeToStr(Time);
        finally
          Lock.Leave;
        end;
        Sleep(100);
      end;
    end;procedure TForm1.Start;
    var
      I: Integer;
      Thread: TThread;
    begin
      Lock.Enter;
      try
        for I := 0 to 255 do
        begin
          Thread := TMyThread.Create(False);
          Thread.OnTerminate := ThreadOnTerminate;
          FThreads.Add(Thread);
        end;
      finally
        Lock.Leave;
      end;
    end;procedure TForm1.Stop;
    var
      I: Integer;
    begin
      Lock.Enter;
      try
        for I := FThreads.Count - 1 downto 0 do
          TThread(FThreads[I]).Terminate;
      finally
        Lock.Leave;
      end;
    end;procedure TForm1.ThreadOnTerminate(Sender: TObject);
    var
      Index: Integer;
    begin
      Lock.Enter;
      try
        Index := FThreads.IndexOf(Sender);
        if Index <> -1 then
          FThreads.Delete(Index);
      finally
        Lock.Leave;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Start;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Stop;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Lock := TCriticalSection.Create;
      FThreads := TList.Create;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Stop;
      // 别去Free那个Lock
    end;end.
      

  16.   

    还记得给我的读出 SysObject的信息的 ThreadPooler 中也用了一个TList来保存创建的线程 ---- 可以叫作链接池 吗 ?
      

  17.   

    TList只是一个保存指针的管理类来的,根据你的实现,你想叫它什么都没关系,主要是它对应的指针是什么东西。
      

  18.   

    Delphiandliu(liuliu)  :    您好,Copy_Paste 哥哥也不遗余力得帮过我 :)
      

  19.   

    To : 大哥
    放在 OnTimer 中还是不行,看来这个不能实现 。
    ---------------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        Timer1: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        FThreads: TList; 
        procedure Stop;
        procedure ThreadOnTerminate(Sender: TObject);    { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    implementation{$R *.dfm}
    uses SyncObjs;
    type
      TMyThread = class(TThread)
      protected
        procedure Execute; override;
      end;var
      Lock: TCriticalSection = nil;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Lock := TCriticalSection.Create;
      FThreads := TList.Create;
    end;procedure TMyThread.Execute;
    begin
      while not Terminated do
      begin
        Lock.Enter;  
        try
          Form1.Edit1.Text := TimeToStr(Time);
        finally
          Lock.Leave;
        end;
      end;
    end;{procedure TForm1.Start; 
    var
      I: Integer;
      Thread: TThread;
    begin
      Lock.Enter;  
      try
        for I := 0 to 255 do
        begin
          Thread := TMyThread.Create(False);
          Thread.OnTerminate := ThreadOnTerminate;
          FThreads.Add(Thread); 
        end;
      finally
        Lock.Leave;
      end;
    end; }procedure TForm1.Stop; 
    var
      I: Integer;
    begin
      Lock.Enter;  
      try
        for I := FThreads.Count - 1 downto 0 do
          TThread(FThreads[I]).Terminate;
      finally
        Lock.Leave;
      end;
    end;procedure TForm1.ThreadOnTerminate(Sender: TObject);
    var
      Index: Integer;
    begin
      Lock.Enter;     
      try
        Index := FThreads.IndexOf(Sender); 
        if Index <> -1 then
          FThreads.Delete(Index);  
      finally
        Lock.Leave;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Stop ;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Stop ;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
      I: Integer;
      Thread: TThread;
    begin
      Lock.Enter;  
      try
        for I := 0 to 255 do
        begin
          Thread := TMyThread.Create(False);
          Thread.OnTerminate := ThreadOnTerminate;
          FThreads.Add(Thread); 
        end;
      finally
        Lock.Leave;
      end;
    end;
    end.
      

  20.   

    都说不要放在Timer那里了,如果这样的话,很容易崩溃的,你的程序这样做。哪有这么多资源啊。
      

  21.   

    procedure TMyThread.Execute;
    var
      WaitReturn : DWord ;
    begin
      FreeOnTerminate := True;
      Try
        Lock.Enter ;
        Synchronize(GG)
      Finally
        Lock.Leave ;
      End;
    end;
    也不对吧,即使使用了Synchronize来同步方法GG,那就不需要Lock了,而且顺序不对啊。这样:  Lock.Enter ;
      Try
        GG
      Finally
        Lock.Leave ;
      End;
      

  22.   

         因本贴技术含量颇高,被“CSDN结贴联盟”收藏,版权所有归“CSDN结贴联盟”所有,未经许可不得转贴,如有发现,我们将采用法律手段,严查不贷。
                                法律首席顾问:Ghyghost
                                           2002-12-21
      

  23.   

    ghyghost(著名关心CSDN结贴率爱国主义人士代表) ( ) :  您好,真的假的?别吓我好不好 ?
      

  24.   

    Ghyghost
      我还有一些要不要啊,给版权得了,哦,你在跟CSDN的FAQ和精华区的抢贴子啊,呵呵。
      

  25.   

    他还说 “本贴作者有连带法律责任“ ,吓死我了 ,真是的,我还以为 FBI 了......
      

  26.   

    coolicelee 先生  :   抱歉 ,没有等到。 FBI 出现:) ,谢谢您的帮助 。
      

  27.   

    结贴了怎么底下没有得分列表呢 ?? 大哥 : 168 
    其它朋友 : Some 2 ,Some no, Sorry :)Thanks for your help , and continue helping me ,thank you !Wish you happy !Merry Christmas !