随笔分类 -  midas中间层

midas中间层的完整实现
摘要:咏南CS插件开发框架同时支持2层和3层开发了,是的一套代码既支持2层也能3层开发。 你要做的仅仅是在配置文件里面设置一个2层还是3层的开关控制一下。 对,就这么简单! 阅读全文
posted @ 2015-12-22 08:28 delphi中间件 阅读(1459) 评论(0) 推荐(0) 编辑
摘要:购买咏南DATASNAP中间件送CS插件开发框架和BS开发框架,CS、BS开发框架共享同一个中间件。价格从优! 中间件可供DELPHI6~DELPHI XE8开发的客户端调用! CS开发框架截图: BS开发框架截图: 阅读全文
posted @ 2015-04-17 14:19 delphi中间件 阅读(4916) 评论(1) 推荐(0) 编辑
摘要:使用OLEVARIANT可以序列任何类型的对象。下面的代码序列TDATASET。procedure TForm1.DatasetToVariant(var varResultSet: OleVariant; ADataset : TDataset);var m : Integer; nRecords, nColumns, nCurRec : Integer;begin nRecords := -1; nColumns := -1; try { Create the array... } nColumns := Max(0, ADataset.FieldCount-1); nRecords := 阅读全文
posted @ 2012-03-09 20:29 delphi中间件 阅读(1372) 评论(2) 推荐(0) 编辑
摘要:上传客户端的CLIENTDATASET.delta到服务器的clientdataset.data,服务端解析clientdataset的数据生成相应的SQL语句。相对于直接调用datasetprovider.applyupdates()方法提交数据而言,前者的可控性更强,对于某些要求灵活性很强的场合,前者可能是必须的提交方式。procedure TBaseService.ApplyUpdates(const Delta: OleVariant; TableName, KeyField: WideString);var Flag: Boolean;begin if VarIsNull(Delta 阅读全文
posted @ 2012-03-09 20:19 delphi中间件 阅读(5495) 评论(6) 推荐(0) 编辑
摘要:网上有一些讲以RAD方式设置主从表的演示,但是在实际当中不实用。function TsvrDM.ApplyUpdates(const ModuleId: WideString;sqlId:ShortInt; Delta0, Delta1, Delta2, Delta3: OleVariant): Shortint;const sql='Select * from %s where 1<>1'; var aData: array of OleVariant; i:integer; conn:TADOConnection; qry:TADOQuery; dsp:TDat 阅读全文
posted @ 2012-02-26 14:23 delphi中间件 阅读(2047) 评论(0) 推荐(1) 编辑
摘要:TCLIENTDATASET.DATA, TCLIENTDATASET.DELTA, TDATASETPROVIDER.DATA,它们的DATA属性的类型都是OLEVARIANT。中间层和客户端之间通过OLEVARIANT来传递数据集的数据。为了提高数据传输的效率,发送方在传输之前可以先压缩数据,然后把压缩的数据发送给接收方。接收方收到发送方送来的压缩数据,先进行数据解压。使用开源的ZLIB进行数据的压缩和解压。XE2已经自带此控件,需要引用system.zlib单元。原理:将OLEVARIANT数据流化,然后对流进行压缩,还原成OLEVARIANT以后再发送。procedure Stream 阅读全文
posted @ 2012-02-26 14:20 delphi中间件 阅读(1896) 评论(1) 推荐(1) 编辑
摘要:midas支持使用OLEVARIANT序列化对象,最新的DATASNAP支持使用OLEVARAINT和JSON来序列化对象。下面的代码演示OLEVARINAT序列化TPARAMS, TPARAMETERS对象。OLEVARIANT本质上是一个BYTE数组。还原TPARAMS对象procedure VariantToParams(input:OleVariant;par:TParams);// TParam 's property: fieldType, paramName, ParamType, value, size// paramType default value ptinput 阅读全文
posted @ 2012-02-26 14:04 delphi中间件 阅读(2065) 评论(0) 推荐(0) 编辑
摘要:最近在写一个基于XE2 DATASNAP的中间层,以前也写过基于DCOM的MIDAS中间层,看到网上一些同仁对中间层的提问。我摘录俩个典型的提问,如下:第一个提问:Midas三层程序,如何支持大量用户同时请求连接?系统结构: TClientDataSet -> TSocketServer -> scktsrvr.exe -> RemoteDataModule -> ADO 要求:允许500-1000个客户端同时“请求”连接,服务器和客户端均不能死掉。现状:在现有的程序中,只要同时“请求”连接的客户端达到一个较大的数量,例如80或100,应用服务器就停止响应了。客户端尝试 阅读全文
posted @ 2012-02-25 09:30 delphi中间件 阅读(5954) 评论(1) 推荐(1) 编辑
摘要:要深刻理解TclientDataSet的两个重要属性:Data、Delta要深刻理解并区分开Tfield的4个重要属性:Value、OldValue、CurValue、NewValueTField的事件触发顺序: 显示时触发:OnGetText 编辑时触发:OnSetText->OnValidate->OnChange (1) OnGetText事件是访问DisplayText或Text时触发。如果数据库中存储的值和要显示给用户看的值不一样,如数据库中存储的是bool型的值,要显示给用户“真”或“假”,可以在这个事件里进行处理。 (2) OnSetText事件是设置字段的值时触发。 阅读全文
posted @ 2012-02-21 20:24 delphi中间件 阅读(2170) 评论(0) 推荐(0) 编辑
摘要:TField.ProviderFlags,这对于组 SQL 来说至关重要!ProviderFlags 是 TProviderFlag 的集合,我们来看看 ProviderFlags 可以包含哪些元素 元素名称 说明 备注 pfInUpdate INSERT / UPDATE 要包含此字段 实际上会不会包含,要看字段值有没有变动而定 pfInWhere UPDATE / DELETE 时要加入 WHERE 实际上会不会加入 WHERE,要看字段值有没有变动而定 pfInKey UPDATE / DELETE 时要加入 WHERE,以及 DataSet 内数据的重复检查 一定会加入WHERE p. 阅读全文
posted @ 2012-02-20 23:10 delphi中间件 阅读(1900) 评论(0) 推荐(0) 编辑
摘要:中间层服务对象全部作成对象池,因此中间层负载能力非常强大。所有池中的对象都是针对事件而不是某一个客户端。当一个事件执行完成,它所使用的对象会立即放回池中,以等待其它事情发生时再使用。对象只有在事件发生的那一瞬间被占用,这样对象的使用效率是很高的。 阅读全文
posted @ 2012-01-15 17:28 delphi中间件 阅读(1222) 评论(0) 推荐(0) 编辑
摘要:unit MidServer_TLB;// ************************************************************************ //// WARNING // ------- // The types declared in this file were generated from data read from a // Type Library. If this type library is explicitly or indirectly (via // another type library referring to t 阅读全文
posted @ 2012-01-11 23:10 delphi中间件 阅读(1324) 评论(0) 推荐(0) 编辑
摘要:unit uMain;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TlHelp32, ExtCtrls, DB, DBClient, Grids, DBGrids, ADODB, Provider, AppEvnts;type TForm1 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; QryPooling: TADOQuery; DataSetProv 阅读全文
posted @ 2012-01-11 23:07 delphi中间件 阅读(795) 评论(0) 推荐(0) 编辑
摘要:unit uDM;interface{$WARN SYMBOL_PLATFORM OFF}uses SysUtils, Classes, Controls,DB, DBClient, MConnect, SConnect, Dialogs, Variants, ADODB, IniFiles, Forms, MidServer_TLB, uFun;type TSvrRec = record // socketConnection's property Address: string; Port: Integer; ServerName: string; end; Tdm = class 阅读全文
posted @ 2012-01-11 22:56 delphi中间件 阅读(899) 评论(0) 推荐(0) 编辑
摘要:unit uFun;interfaceuses SysUtils, Variants, db, adodb, Classes, EncdDecd;function ParametersToVariant(par:TParameters): OleVariant;procedure VariantToParameters(input:OleVariant;par:TParameters);function ParamsToVariant(par:TParams): OleVariant;procedure VariantToParams(input:OleVariant;par:TParams) 阅读全文
posted @ 2012-01-11 22:46 delphi中间件 阅读(771) 评论(0) 推荐(0) 编辑
摘要:unit uTestSvr;{$WARN SYMBOL_PLATFORM OFF}interfaceuses Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr, DBClient, MidServer_TLB, StdVcl, DB, ADODB, Provider, Variants, Forms, ThreadComLib;type TsvrDM = class(TRemoteDataModule, ITest) private { Private declarations } function G 阅读全文
posted @ 2012-01-11 22:44 delphi中间件 阅读(980) 评论(0) 推荐(0) 编辑
摘要:// TThreadedClassFactory.Create (ComServer, TsvrDM, CLASS_Test, // create com thread pooling// ciMultiInstance);unit ThreadComLib;{$IFDEF VER100}{$DEFINE D3}{$ENDIF}interfaceuses Windows, ActiveX, Classes, ComObj, Controls, ExtCtrls, Grids, Variants, VCLCom, forms ;{ General COM threading types }typ 阅读全文
posted @ 2012-01-11 22:42 delphi中间件 阅读(938) 评论(0) 推荐(0) 编辑
摘要:unit ProcPool;interfaceuses Classes, Windows, SysUtils, ADODB, forms;type TProcPool = class(TObject) private FObjList:TThreadList; FTimeout: Integer; FMaxCount: Integer; FSemaphore: Cardinal; function CreateNewInstance(List:TList): TADOStoredProc; function GetLock(List:TList;Index: Integer): Boolean 阅读全文
posted @ 2012-01-11 22:39 delphi中间件 阅读(661) 评论(0) 推荐(0) 编辑
摘要:unit DSPPool;interfaceuses Classes, Windows, SysUtils, Provider, forms;type TDSPPool = class(TObject) private FObjList:TThreadList; FTimeout: Integer; FMaxCount: Integer; FSemaphore: Cardinal; function CreateNewInstance(List:TList): TDatasetProvider; function GetLock(List:TList;Index: Integer): Bool 阅读全文
posted @ 2012-01-11 22:38 delphi中间件 阅读(1026) 评论(0) 推荐(0) 编辑
摘要:unit AdoqueryPool;interfaceuses Classes, Windows, SysUtils, ADODB, forms;type TADOQueryPool = class(TObject) private FObjList:TThreadList; FTimeout: Integer; FMaxCount: Integer; FSemaphore: Cardinal; function CreateNewInstance(List:TList): TADOQuery; function GetLock(List:TList;Index: Integer): Bool 阅读全文
posted @ 2012-01-11 22:37 delphi中间件 阅读(785) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示