⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverdm.pas

📁 Direct Oracle Access 非常好的Oracle数据库直接访问组件包 支持个版本的Delphi及C++ Builder 有源码
💻 PAS
字号:
// Direct Oracle Access - Server
// Allround Automations
// support@allroundautomations.nl
// http://www.allroundautomations.nl
//
// This application demonstrates:
// - The Server part of a 3 Tier application
// - The use of the TOracleProvider component

// This is the Remote Data Module
// You can add additional TOracleProvider components to this unit and
// register them by a right click on the component and selecting Export...

unit ServerDM;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComServ, ComObj, VCLCom, StdVcl, BdeProv, DataBkr, Server_TLB, Provider,
  OracleProvider, Db, OracleData, Oracle, ServerUnit;

type
  TRemoteDM = class(TDataModule, IRemoteDM)
    OracleSession: TOracleSession;
    OracleLogon: TOracleLogon;
    DeptDataSet: TOracleDataSet;
    EmpDataSet: TOracleDataSet;
    DeptProvider: TOracleProvider;
    EmpProvider: TOracleProvider;
    procedure RemoteDMCreate(Sender: TObject);
    procedure AfterQuery(Sender: TOracleDataSet);
    procedure AfterPost(DataSet: TDataSet);
    procedure TranslateMessage(Sender: TOracleDataSet;
      ErrorCode: Integer; const ConstraintName: String; Action: Char;
      var Msg: String);
    procedure RemoteDMDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    function Get_EmpProvider: IProvider; safecall;
    function Get_DeptProvider: IProvider; safecall;
  end;

var
  RemoteDM: TRemoteDM;
  // Remember the used username/password & database
  DefaultUsername: string = '';
  DefaultPassword: string = '';
  DefaultDatabase: string = '';

implementation

{$R *.DFM}

function TRemoteDM.Get_EmpProvider: IProvider;
begin
  Result := EmpProvider.Provider;
end;

function TRemoteDM.Get_DeptProvider: IProvider;
begin
  Result := DeptProvider.Provider;
end;

// LogOn when the Datamodule is created
procedure TRemoteDM.RemoteDMCreate(Sender: TObject);
begin
  Log('DM Created');
  UpdateStatusLine(+1);
  if not OracleSession.Connected then
  begin
    OracleSession.LogonUsername := DefaultUsername;
    OracleSession.LogonPassword := DefaultPassword;
    OracleSession.LogonDatabase := DefaultDatabase;
    OracleLogon.Execute;
    // Remember usename/password so the next one will connect without the dialog
    DefaultUsername := OracleSession.LogonUsername;
    DefaultPassword := OracleSession.LogonPassword;
    DefaultDatabase := OracleSession.LogonDatabase;
    if OracleSession.Connected then Log('Connected as ' + DefaultUsername);
  end;
end;

// Decrement the count if the DM is destroyed
procedure TRemoteDM.RemoteDMDestroy(Sender: TObject);
begin
  Log('DM Destroyed');
  UpdateStatusLine(-1);
end;

// Log if a query is executed
procedure TRemoteDM.AfterQuery(Sender: TOracleDataSet);
begin
  Log(Sender.Name + ' Query');
end;

// Log if the dataset is posted
procedure TRemoteDM.AfterPost(DataSet: TDataSet);
begin
  Log(DataSet.Name + ' Post');
end;

// Log any errors
procedure TRemoteDM.TranslateMessage(Sender: TOracleDataSet;
  ErrorCode: Integer; const ConstraintName: String; Action: Char;
  var Msg: String);
begin
  Log(Sender.Name + ' ' + Msg);
end;

initialization
  TComponentFactory.Create(ComServer, TRemoteDM,
    Class_RemoteDM, ciMultiInstance);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -