SQL :
===========================================
CREATE PROCEDURE dbo.my_quserproject
  @qUsername Char(15) 
AS
IF @qUsername IS NULL
BEGIN
  RAISERROR('Username is empty!',14,1)
  RETURN
ENDSELECT a.proj_name FROM tb_proj a, (SELECT c.proj_id FROM tb_userproj c JOIN tb_user d ON c.[user_id] = d.[user_id] WHERE d.[user_name] = @qUsername) b
WHERE a.proj_id = b.proj_id
GO
=========================================================Delphi(server):
=========================================================
procedure Tworkser.Quserproj(const UName: WideString);
begin
  adosp_1.Close;
  adosp_1.ProcedureName := 'my_quserproject';
  adosp_1.Parameters.AddParameter.Name := '@qUsername';
  adosp_1.Parameters.ParamValues['@qUsername'] := UName;
  adosp_1.Prepared;
  adosp_1.ExecProc;
end;=========================================================Client
=========================================================
  with DM1 do
  begin
    Cds_1.Close;
    DcomC_1.AppServer.Quserproj(str_login_name);
    Cds_1.Open;
    dbgrid1.DataSource := ds_1;
=========================================================
dbgrid1 显示为空,sql里可以返回:
==========================================================
proj_name       
--------------- 
HW
Srvate
DDesign
Metek(所影响的行数为 4 行)
============================================================我想在ListBox中列出值该怎么写啊!

解决方案 »

  1.   

    用 “EXEC 存储过程名”,当然,调用就用QUERY一类的,,就可以返回值
      

  2.   

    Delphi(server):
    =========================================================
    procedure Tworkser.Quserproj(const UName: WideString);
    begin
      adosp_1.Close;
      adosp_1.ProcedureName := 'my_quserproject';
      adosp_1.Parameters.AddParameter.Name := '@qUsername';
      adosp_1.Parameters.ParamValues['@qUsername'] := UName;
      adosp_1.Prepared;
      adosp_1.Open;//返回结果集用Open
    end;=========================================================可为什么还是不行!我试过在APPSERVER上改用EXEC 可在Client上还是得不到
      

  3.   

    不是说存储过程的效率高吗?如果有很复杂的查询不是很慢的吗?
    在请教:改成ADOQUERY后如何把结果集加到ListBox中
    这样写对不?反正现在报错
    ==============================================
    for I := 0 To clientdataset1.recordcount -1 do
      ListBox1.Items.Add(clientdataset1.DataSetField.FieldValues[I]);
      

  4.   

    for I := 0 To clientdataset1.recordcount -1 do
      begin
        ListBox1.Items.Add(clientdataset1.fieldByName('XX').AsString);
        clientdataset1.Next;
      end
      

  5.   

    我真傻,线搭错了!呵呵
    可第一个问题用ADOstorproc,能不能帮忙解决!
      

  6.   

    你的服务器没有返回结果,给你看看我写的一个列子:
    function TYxCy_SupplySystemMain.SSExec(const ASPName, ProName: WideString;
      ArrPara, ArrValue: OleVariant; out RetOut: WideString): OleVariant;
    Var
      i:Integer;
      AspExec : TADOStoredProc;
      AspDSP : TDataSetProvider;
    begin
    try
      RetOut := '';
      AspExec := FindComponent('ASP_'+ASPName) as TADOStoredProc;
      AspDSP := FindComponent('DSP_'+ASPName) as TDataSetProvider;
      AspExec.Connection := ASP_Exec.Connection;
      with AspExec,Parameters do
      begin
        Close;
        ProcedureName := ProName;
        Refresh;
        for i:=0 to 99 do
        begin
          try VarToStr(ArrPara[i]);
            ParamByName(ArrPara[i]).Value := ArrValue[i];
          except
            break;
          end;
        end;
        Result := AspDSP.Data;
        RetOut := Parameters.ParamByName('@vc_ErrMsg').Value;
        AspExec.Close;
      end;
      SetComplete;
    except
      Result := '应用服务器发生错误';
      SetAbort;
    end;
    end;
      

  7.   

    客户端调用:
      with BatchSelDM,AppExec,CDS_BatchSel_Exec do
      begin
        Data := SSExec('Exec','PTBP_StockSel;1',VarArrayOf(['@dt_BegDate','@dt_EndDate']),VarArrayOf([bsDE_Beg.Text,bsDE_End.Text]),EmptyWideStr);
      end;
      

  8.   

    to wozhuchuanwei(单身一卒) 
    谢谢你的回复!
    你的CODE我不太能看懂,但我会努力看一下!可以的话,你可以看我上面贴的Code有什么问题,可以帮我指一下吗?
      

  9.   

    Delphi(server):
    =========================================================
    procedure Tworkser.Quserproj(const UName: WideString);
    begin
      adosp_1.Close;
      adosp_1.ProcedureName := 'my_quserproject';
      adosp_1.Parameters.AddParameter.Name := '@qUsername';
      adosp_1.Parameters.ParamValues['@qUsername'] := UName;
      adosp_1.Prepared;
      adosp_1.ExecProc;
    end;申明成一个函数
    function Tworkser.Quserproj(const UName: WideString);OleVariant;
    begin
      adosp_1.Close;
      adosp_1.ProcedureName := 'my_quserproject';
      adosp_1.Refresh;
      adosp_1.Parameters.AddParameter.Name := '@qUsername';
      adosp_1.Parameters.ParamValues['@qUsername'] := UName;
      adosp_1.Prepared;
      adosp_1.ExecProc;
      Result := adosp_1.Data;
    end
      

  10.   

    Client
    =========================================================
      with DM1 do
      begin
        Cds_1.Close;
        DcomC_1.AppServer.Quserproj(str_login_name);
        Cds_1.Open;
        dbgrid1.DataSource := ds_1;
    =========================================================
    改为:
    Client
    =========================================================
      with DM1,ClientDataSet1 do
      begin
        Date := DcomC_1.AppServer.Quserproj(str_login_name);
      end;
    =========================================================以上两段请自己测试