本人刚开始学三层,现求三层完整例子,功能各方面都有涉及, 有详细一点的文档。只供学习用,不作其他用途。如有好的,可另给分

解决方案 »

  1.   

    随便自己写个webservice然后去调用!
    少说也三层了!
      

  2.   

    不好意思,忘了留mail,
    各位大虾!
    我的mail是 [email protected]
    如比较大也没关系,可通过msn与我联系[email protected]
    先谢了!
      

  3.   


       我耶要 呵呵 我耶是学习中.....
       mail: [email protected]
                  谢谢啦
      

  4.   

    看看,Delphi自带的Demo就一清二楚了.
      

  5.   

    http://www.e-midas.cn/Soft_Show.asp?SoftID=8
    学习文档也在找个网站上找!
    兄弟我等着你的500分啊
      

  6.   

    我也在学习中要啊!
    我的msn:[email protected]
      

  7.   

    我的3层程序,可在客户端通过DCOM连接远程服务器执行任何SQL语句。支持两种,一种是数据查询的OPEN方式,一种是执行SQL语句(建立存储过程、视图、表,修改表)一、服务器unit MainP;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TMain = class(TForm)
        gbSQL: TGroupBox;
        memSQL: TMemo;
        gbOpr: TGroupBox;
        lbOpr: TListBox;
        procedure FormShow(Sender: TObject);
        procedure lbOprClick(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Main: TMain;implementationuses DmSrvP, PublicP;{$R *.DFM}procedure TMain.FormShow(Sender: TObject);
    begin
      lbOPR.Clear;
      memSQL.Clear;
      DmSrv.adoSrv.Connected := False;
      DmSrv.adoSrv.Connected := True;
    end;procedure TMain.lbOprClick(Sender: TObject);
    var
      ptrData: PMyOpr;begin
      if lbOpr.Items.Count < 1 then exit;
      if lbOpr.ItemIndex < 0 then exit;  ptrData := PMyOpr(lbOpr.Items.Objects[lbOpr.ItemIndex]);
      memSQL.Clear;
      memSQL.Lines.Add(ptrData^.OprSql);
    end;procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      DmSrv.adoSrv.Connected := False;
    end;end.unit DmSrvP;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, ADODB;type
      TDmSrv = class(TDataModule)
        adoSrv: TADOConnection;
        AdoQry: TADOQuery;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DmSrv: TDmSrv;implementation{$R *.DFM}end.unit RDmSrvP;interfaceuses
      Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
      DBClient, YliaoServer_TLB, StdVcl, Provider, Dialogs;type
      TRDmSrv = class(TRemoteDataModule, IRDmSrv)
        dspAdoQry: TDataSetProvider;
        function dspAdoQryDataRequest(Sender: TObject;
          Input: OleVariant): OleVariant;
      private
        { Private declarations }
      protected
        class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
      public
        { Public declarations }
      end;implementationuses DmSrvP, MainP, PublicP;{$R *.DFM}class procedure TRDmSrv.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
    begin
      if Register then
      begin
        inherited UpdateRegistry(Register, ClassID, ProgID);
        EnableSocketTransport(ClassID);
        EnableWebTransport(ClassID);
      end else
      begin
        DisableSocketTransport(ClassID);
        DisableWebTransport(ClassID);
        inherited UpdateRegistry(Register, ClassID, ProgID);
      end;
    end;function TRDmSrv.dspAdoQryDataRequest(Sender: TObject;
      Input: OleVariant): OleVariant;var  lsFlag,
      lsExec,
      lsSQL,
      lsSucc,
      lsStr: String;  ptrData: PMyOpr;
    begin
      Result := 'T';  lsStr := Trim(String(Input));
      lsFlag := UpperCase(Copy(lsStr,1,1));
      lsSQL := Copy(lsStr,2,length(lsStr)-1);
      lsSucc := '成功!';  if DmSrv.adoSrv.InTransaction then
        DmSrv.adoSrv.RollbackTrans;
      DmSrv.adoSrv.BeginTrans;  with DmSrv.AdoQry do
      begin
        Close;
        SQL.Clear;
        SQL.Add(lsSQL);
        if lsFlag='O' then
        begin
          lsExec := '查询';
          try
            Open;
          except
            Cancel;
            DmSrv.adoSrv.RollbackTrans;
            lsSucc := '失败!';
            Result := 'F';
          end;
        end
        else if lsFlag='E' then
        begin
          lsExec := '执行';
          try
            ExecSQL;
          except
            Cancel;
            DmSrv.adoSrv.RollbackTrans;
            lsSucc := '失败!';
            Result := 'F';
          end;
        end
        else
        begin
          lsExec := '未知操作';
          lsSQL := lsStr;
          lsSucc := '失败!';
          Result := 'F';
          DmSrv.adoSrv.RollbackTrans;
        end;    TRY
          DmSrv.adoSrv.CommitTrans;
        except
        end;    ptrData := new(PMyOpr);
        ptrData^.OprInfo := lsExec+' SQL代码 '+lsSucc;
        ptrData^.OprSql := lsSQL;
        Main.lbOpr.Items.AddObject(ptrData^.OprInfo, TObject(ptrData));    Main.memSQL.Clear;
        Main.memSQL.Lines.Add(ptrData^.OprSql);
      end;
    end;initialization
      TComponentFactory.Create(ComServer, TRDmSrv,
        Class_RDmSrv, ciMultiInstance, tmApartment);
    end.
      

  8.   

    unit PublicP;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      PMyOpr = ^TMyOpr;
      TMyOpr = record
        OprInfo,
        OprSql: String;
      end;implementationend.
      

  9.   

    二、客户端unit MainP;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Buttons;type
      TMain = class(TForm)
        rgEXEC: TRadioGroup;
        gbSQL: TGroupBox;
        btnEXEC: TBitBtn;
        btnQuit: TBitBtn;
        memSQL: TMemo;
        gbResult: TGroupBox;
        dbgResult: TDBGrid;
        dbnResult: TDBNavigator;
        lblTime: TLabel;
        procedure btnEXECClick(Sender: TObject);
        procedure btnQuitClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Main: TMain;implementationuses DmCliP;{$R *.DFM}procedure TMain.btnEXECClick(Sender: TObject);
    var
      NowTime: TDateTime;
      TimeStr,PassWord: String;
    begin
      if DmCli.DCOMConn.Connected = false then
      begin
        ShowMessage('  提示:尚未连接远程DCOM服务器!  ');
        exit;
      end;
      if Trim(memSQL.Text) = '' then
      begin
        ShowMessage('  提示:尚未输入启动操作代码(SQL)!  ');
        exit;
      end;  NowTime := Now;
      TimeStr := FormatDateTime('YYYY-MM-DD HH:NN:SS',NowTime);
      lblTime.Caption := TimeStr;
      PassWord := '';  if MessageDlg('  警告:确定启动本次操作吗?  ',mtConfirmation,[mbYes,mbNo],0) <> mrYes then exit;  if InputQuery('密码验证:','请输入密码验证你是否具备操作权限...',PassWord) = false then exit;  if PassWord <> FormatDateTime('DDMMYYYY.SSNNHH',NowTime) then
      begin
        ShowMessage('   信息:操作权限不足,不能启动操作!  ');
        exit;
      end;  DmCli.cdsDSet.Close;
      case rgExec.ItemIndex of
      0:
        begin
          IF DmCli.cdsDSet.DataRequest('O'+memSQL.Text) = 'T' then
          begin
            gbResult.Caption := '客户端执行结果(成功):';
            try
              DmCli.cdsDSet.Open;
            except
            end;
          end
          else
          begin
            gbResult.Caption := '客户端执行结果(失败):';
          end;
        end;
      1:
        begin
          IF DmCli.cdsDSet.DataRequest('E'+memSQL.Text) = 'T' then
          begin
            gbResult.Caption := '客户端执行结果(成功):';
            try
              DmCli.cdsDSet.Open;
            except
            end;
          end
          else
          begin
            gbResult.Caption := '客户端执行结果(失败):';
          end;
        end;
      end;end;procedure TMain.btnQuitClick(Sender: TObject);
    begin
      Close;
    end;procedure TMain.FormShow(Sender: TObject);
    begin
      memSQL.Clear;
      lblTime.Caption := '';  DmCli.DCOMConn.Connected := False;
      try
        DmCli.DCOMConn.Connected := True;
      except
        ShowMessage('  信息:无法连接远程DCOM服务器!  ');
        Close; 
        exit;
      end;
    end;procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      DmCli.DCOMConn.Connected := False;
    end;end.
    unit DmCliP;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, DBClient, MConnect;type
      TDmCli = class(TDataModule)
        DCOMConn: TDCOMConnection;
        cdsDSet: TClientDataSet;
        dsDSet: TDataSource;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      DmCli: TDmCli;implementation{$R *.DFM}end.
      

  10.   

    我的例子的层次:
     client
       --------com
       --------操作數據庫的Web Service
       --------統一數據管理的COM+
       --------數據庫
      

  11.   

    http://www.2ccc.com/article.asp?articleid=1309
    有个三层代码下载
      

  12.   

    to: risingsoft(一苇渡江) ,以及所有的人
    请教一下:
    var
      ptrData: PMyOpr;
    出现 undeclared identifier:'PMyOpr'的错误,
    请问这是怎么回事?
      

  13.   

    由于[email protected]给我退信了
    我重新发给你一份到[email protected]