手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

关于VisiBroker For Delphi的使用2

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

var

I: Integer;

begin

FCSect.Enter;

try

for I := 0 to Length(FModules) - 1 do

if FModules[I].Module = DataModule then

FModules[I].InUse := False;

ReleaseSemaphore(FSemaphore, 1, nil);

finally

FCSect.Leave;

end;

end;

function TModulePooler.GetModule: TDataModule;

var

I: Integer;

begin

Result := nil;

if WaitForSingleObject(FSemaphore, 5000) = WAIT_TIMEOUT then

raise Exception.Create('Server too busy');

FCSect.Enter;

try

if Length(FModules) = 0 then

begin

SetLength(FModules, PoolSize);

for I := 0 to PoolSize - 1 do

begin

FModules[I].InUse := False;

FModules[I].Module := FModuleClass.Create(Application);

end;

end;

for I := 0 to Length(FModules) - 1 do

if not FModules[I].InUse then

begin

FModules[I].InUse := True;

Result := FModules[I].Module;

Break;

end;

finally

FCSect.Leave;

end;

//检查曾经是否连接

if not Assigned(Result) then

raise Exception.Create('Pool is out of capacity');

end;

initialization

ModulePooler := TModulePooler.Create;

finalization

ModulePooler.Free;

end.

//本单元是一个通用的方法单元,当然您也可以采用其他的方法来完成这样的一个功能

//DataModule单元

unit dmEmployee;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Db, DBTables, Provider;

type

TdmEmploy = class(TDataModule)

Session1: TSession;

EmployeeDatabase: TDatabase;

qryEmployee: TQuery;

proEmployee: TDataSetProvider;

private

{ Private declarations }

public

{ Public declarations }

end;

var

dmEmploy: TdmEmploy;

implementation

{$R *.DFM}

end.

//服务器的主单元

unit ServerMain;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, DBGrids, Db, DBTables, StdCtrls, Corba, Employee_I, Employee_C,

Employee_S, Employee_Impl;

type

TForm1 = class(TForm)

Label1: TLabel;

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

procedure CorbaInit;

public

{ Public declarations }

hitcount : integer;

end;

var

Form1: TForm1;

myDBServer : Employee;

implementation

{$R *.DFM}

procedure TForm1.CorbaInit;

begin

CorbaInitialize;

myDBServer := TEmployeeSkeleton.Create('myServer', TEmployee.Create);

Boa.ObjIsReady( myDBServer as _Object );

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

CorbaInit;

end;

end.

//客户端程序

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Grids, Corba, Employee_i, Employee_c, Db, DBClient, ExtCtrls,

DBCtrls, DBGrids;

type

TForm1 = class(TForm)

Button1: TButton;

DBGrid1: TDBGrid;

cdsEmployee: TClientDataSet;

DataSource1: TDataSource;

edtEmployeeName: TEdit;

Memo1: TMemo;

Label1: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

myEmployee : Employee;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

myEmployee := TEmployeeHelper.bind;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

cdsEmployee.Data := myEmployee.getEmployeesByName(edtEmployeeName.Text);

cdsEmployee.Open;

end;

end.

我想大家应该可以看得懂上面的程序,如果看不懂也不要紧,下一次我将围绕这个实例展开一系列的问题描述并会同时于COM /MIDAS进行比较说明,为了让大家留下一个思维的空间我在这里就不多说了。还是那一句话下次再见!


作者:赵普昉

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!