
midas
文章平均质量分 62
hnxxcxg
这个作者很懒,什么都没留下…
展开
-
TMemoryStream、String与OleVariant互转
TMemoryStream、String与OleVariant互转 //////////////////////////////////////////////////////////////////////////////////功能: STRING 的内容流化到 OLEVARIANT 中//参数://///////////////////////////////////转载 2009-07-20 09:33:00 · 2278 阅读 · 0 评论 -
datasnap 2010 利用心跳包清除TCP死连接
<br />Delphi2010中DataSnap,如果客户端异常掉线或拔掉网线,那么在服务端会留下一个TCP连接,这个连接会变成死连接(经过测试,如果windows的TCP保持连接禁用的话,三个小时该死连接还不消失)。如果大量客户端并发,出现的死TCP连接过多,服务器内存和端口将会增加,直到占满服务器的端口和耗尽内存为止。如果这样的话,服务器无法健壮稳定的运行。<br />大家可以另开线程来监控客户端连接,但是今天要给大家讲解的不是这个方法,而是使用TCP协议自带的心跳包功能解决这个问题。<br />大家转载 2011-02-04 15:09:00 · 2166 阅读 · 0 评论 -
datasnap 2010 利用JSON序列化和反序列化任何类型的对象
<br />先简单介绍下什么叫marshalling? marshalling有点类似于序列化,它指的是一个转换的过程。将一个对象用一种适当的数据格式保存或转换。它一般用于不同两个程序间的通信和数据交换。与之对应的Unmarshalling故名思意也就是类似于反序列化的过程。<br /> 那么2010中是如何支持Marshalling 的呢?举个小例子说明:<br />第一步:创建一个自定义的类<br /> TPerson = class<br /> F转载 2011-02-04 15:47:00 · 1355 阅读 · 1 评论 -
datasnap 2011 连接池
当开发人员开始创建Delphi的DataSnap应用时很常见的数据库连接定义方式是每个数据模块建立一个连接。这样做将产生大量的数据库连接,并产生很多问题。DelphiXe,提供了Session管理,更容易实现控制客户端连到服务器的数据库连接。客户端应用程序bu不会知道这些,服务器将完成所有的事情。当我们创建一个DataSnap服务器时,最好的做法就是定义一个服务器容器(数据模块),其中包含DataSnap服务器组件和注册所有的服务器应用程序所需的类。在这个容器中,我们将定义一个负责处理服务器的数据库连接的方转载 2011-02-04 21:41:00 · 2153 阅读 · 0 评论 -
datasnap 2011连接池,数据集对象池
数据集对象池unit ServerMethodsUnit1;interfaceuses SysUtils, Classes, DSServer, DB, Generics.Collections, DSService, Provider, ADODB;type TServerMethods1 = class(TDSServerModule) procedure DSServerModuleCreate(Sender: TObject); private { Private declara原创 2011-02-05 14:11:00 · 1892 阅读 · 0 评论 -
clientdataset 用法
<br />影响ClientDataSet处理速度的一个因素<br />TClientDataSet是Delphi开发数据库时一个非常好的控件。有很强大的功能。<br />我常常用ClientDataSet做MemoryDataSet来使用。还可以将ClientDataSet的数据保存为XML,这样就可以做简单的本地数据库使用。还有很多功能就不多说了。在使用ClientDataSet的过程中关于怎样提高处理速度这个问题,我就我个人的一点点体会和大家分享一下。<br /><br />通常情况下我们一般都是用<转载 2011-02-05 14:52:00 · 1479 阅读 · 0 评论 -
datasnap 2010 客户端如何调用服务端上自定义的方法
<br />使用dbexpress控件面板中的TSqlServerMethod控件来调用 <br />下面使用示例代码来说明:<br />服务器的自定义方法代码:<br />function TServerMethods1.inBeginSteam(inStream:widestring): boolean;<br />var<br /> mem:TStringstream;<br />begin<br /> try<br /> result:=False;<br /> if inStrea原创 2011-02-04 15:45:00 · 963 阅读 · 0 评论 -
tcp心跳机制
<br />對連接上來的連接,進行檢測,以防止客戶端異常關閉,或線路異常斷開,而服務器不知道,得到一個半連接這種情況。<br /><br />當然可以在協議裡加一個心跳包,然後服務器端定時檢測,過一段時間就去輪訓一次,看哪些連接超過多少時間沒有反應。超時就關閉。但這樣有點不爽,要自己寫代碼來完成。還要鎖定連接列表,代價挺大的。<br /><br />記得以前在網上看到可以用 TCP 的 KeepAlive 保活機制來做,但也看到人說沒有效果。我想定TCP協議的那此人,不會定一些無用的功能吧,但MSDN上卻沒转载 2011-02-08 17:09:00 · 1723 阅读 · 0 评论 -
代码设置TSQLCONNECTION参数
<br />function ConnRemoteSvr(cn:TSQLConnection;const hostname,UserName,password:string; const port:Integer):Boolean;<br />begin<br /> try<br /> cn.Close;<br /> cn.DriverName := 'DataSnap';<br /> cn.LoginPrompt :=False;<br /> Cn.ConnectionName := 'Data原创 2011-02-12 13:42:00 · 1595 阅读 · 0 评论 -
咏南多层开发控件FOR XE
基于DELPHI XE开发的应用服务器全插件式的客户端快速应用开发框架原创 2011-02-13 10:36:00 · 1884 阅读 · 1 评论 -
负载均衡策略
<br />所有的负载均衡产品都需要一定的负载均衡策略来实现,负载均衡策略也被称为负载均衡算法。目前,最常用的负载均衡算法主要有三种:轮循(Round-Robin)、最小连接数(Least Connections First)和快速响应优先(Faster Response Precedence)。<br />²轮循算法,就是将来自网络的请求依次分配给集群中的服务器进行处理。<br />²最小连接数算法,就是为集群中的每台服务器设置一个记数器,记录每个服务器当前的连接数,负载均衡系统总是选择当前连接数最少的服转载 2011-02-19 07:25:00 · 583 阅读 · 0 评论 -
Delta与XML相互转换
<br />大家都知道TClientDataSet的Delta属性保存数据集的变化,但是Delta是OleVariant类型的属性,这样如果用Delphi写Webservice,就有需要把它转成XML,特别是其他语言也要用这个Webservice的时候,因为如果Delta能和XML相互转换,Delta包的结构就是透明的了。而TClientDataSet却没有提供DeltaXML这样的属性,之前在网上找了一下,发现网上的都是把Delta赋给另一个TClientDataSet的Data,然后再通过XMLData转载 2011-02-21 11:16:00 · 633 阅读 · 0 评论 -
解析delta得到sql语句的函数
function TForm1.gensqls(AdoCon:TADOConnection; pdelta: OleVariant; const ptablename, pkeyfields: WideString): WideString; var i, j: integer; s1, s2: string; Cmdstr: string; FieldList, Keylist: TstringList; Cdsupdate: TClientDataSet; sqlstr: WideStri转载 2011-02-21 11:09:00 · 845 阅读 · 0 评论 -
SimpleObjectBroker
首先要设SimpleObjectBroker的loadBalanced的属性为True,并保证所有的应用服器已向SimpleObjectBroker注册,当客户端应用程序查觉原来的应用服器出现故障后立刻调用TSimpleObjectBroker的SetConnectedS转载 2011-10-10 21:18:30 · 818 阅读 · 0 评论 -
简单到不能再简单的连接池
unit AdoconnectPool;interfaceuses Classes, Windows, SyncObjs, SysUtils, ADODB;type TADOConnectionPool = class(TObject) privat原创 2011-10-14 22:02:37 · 1524 阅读 · 0 评论 -
ParamsToVariant and VariantToParams
function ParamsToVariant(Params: TParams; Macro, Compatible: Boolean): Variant;var I: Integer; Tmp: Variant;begin if (Params.Co原创 2011-10-05 22:16:09 · 562 阅读 · 0 评论 -
datasnap 2010 DataSnap服务端和客户端发布分发方法
<br />针对服务器和客户端软件,如何发布呢?经过研究发现,分发方法非常简单!<br />服务器发布方法:<br />1.在unit ServerMethodsUnit1单元中,添加uses MidasLib;(添加MidasLib的目的是省去发布Midas.dll)<br />2.我用的是火鸟数据库,只需拷贝dbxfb.dll和fbclient.dll<br />分发的服务器软件只需三个文件:你的服务器程序、dbxfb.dll 和 fbclient.dll<br />客户端发布方法:<br />1.在客转载 2011-02-04 15:01:00 · 948 阅读 · 0 评论 -
datasnap 2010 DataSnap服务器如何得到客户端的IP和端口
<br />作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。<br />在delphi2010中的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。现在把我整理的结果奉献给大家,免得大家在花时间研究这个。<br />另外,通过研究发现,DSConnectEvent转载 2011-02-04 14:57:00 · 1205 阅读 · 1 评论 -
Midas的三種調用遠程方法的方式
Midas的三種調用遠程方法的方式 1.晚綁定//使用 Late Binding … DCOMConnection1.AppServer.GetSystemInfo(vTime, vRDM, vThread);藉 由 TDCOMConnection( 或 是 TSocketConnection ,TCORBAConnection)的 AppServer 特性取转载 2009-06-17 09:24:00 · 533 阅读 · 0 评论 -
多層開發注重效率的注意點
多層開發注重效率的注意點 1.不同資料型態的傳遞負荷成本注意不要任意的使用 Variant,因為 Variant 雖然好用,但是相對上它使用的成本也非常的高。例如如果你使用 Variant 來代表整數的話,那麼整數本身只佔4 個位元組,但是使用 Variant 來代表它則需要 20 個位元組。當這樣的 Variant在網路上傳遞時是比直接傳遞整數來得緩慢。 2.減少原创 2009-06-17 10:40:00 · 359 阅读 · 0 评论 -
TDataSetProvider 元件的設定
TDataSetProvider 元件的設定 TDataSetProvider 元件的 UpdateMode 特性值會影響 TDataSetProvider 元件產生什麼樣的 SQL 敘述來更新資料。在內定上 TDataSetProvider 元件的UpdateMode 是 設 定 為 upWhereAll , 這 是 最 嚴 格 的 設 定 。由於在尋找資料時也必須比對原创 2009-06-17 10:55:00 · 717 阅读 · 0 评论 -
adoQuery对象池
// Writen by 咏南工作室(陈新光) 2009-6-26 14:31:26{ for example:var q: TADOQuery;begin Result := nil; q := g_adoquerypool.GetAdoQuery; if q begin q.Close; q.SQL.Clear; q.SQL.Text := sqlComm原创 2009-06-26 15:03:00 · 560 阅读 · 0 评论 -
数据库连接池类
// Writen by 咏南工作室(陈新光) 2009-6-26 11:58:17// 数据库连接池类// 使用ADO引擎,支持access, sqlServer, oracle三种数据库// 连接对象.tag = 正数 表示此连接对象处于非使用状态,否则反之// 所有时间单位均为秒unit UDataConnPool;{$HINTS OFF}{$WARNINGS OFF}interface原创 2009-06-26 13:57:00 · 793 阅读 · 0 评论 -
remobject 簡介
許多使用Web Services 開發系統的人都會有一個困擾,那就是效率不高,其原因很簡單,XML 本身屬於純文字型態,加上必須依賴XML Parser 剖析XML 文件,在傳輸與解譯上都是造成效率不彰的原因,這是Web Services 的先天限制,也是為了相容性所付出的代價。當然! 如果網路頻寬夠大,電腦速度夠快,這些都不是問題。但事實是目前的頻寬與電腦速度還不足以勝任,這使得Web Se原创 2009-06-23 15:56:00 · 547 阅读 · 0 评论 -
線程池
// Written by 詠南工作室(陳新光) 2009-06-28 11:13:44//線程池unit Ut_CustomThread;interfaceuses Classes, SysUtils, SyncObjs, Windows;Type //基本线程类 TBaseThread = class; //线程错误处理类 EThreadException = class(E原创 2009-06-28 15:06:00 · 480 阅读 · 0 评论 -
ado數據集對象流化與對象還原
通過網絡傳輸對象之前,必須要對對象進行串行化(流化)處理,然後發送串行化的流。當接收方根據接收到的流還原對象出來。function RecordsetToXML(const Recordset: _Recordset): string;var RS: Variant; Stream: TStringStream;begin Result := ; if Re原创 2009-10-19 10:55:00 · 508 阅读 · 0 评论 -
詠南應用開發框架研發完成
2009年利用業餘時間研發了一套應用開發框架,個人或團隊可以用來快速地開發各種管理軟件。1:多層開發,可在局域網絡或者互聯網絡發布產品。 2:插件框架,每个功能模块都是一个动态库(插件),可以轻松灵活地滿足客户的的二次开发。适合团队开发,能很好地保护公司產品代码的知识产权。3:支持用戶二次報表開發,用戶可以自定義各種單據的格式。4:通用的快速查詢和萬能組合查詢。原创 2010-03-08 17:22:00 · 1792 阅读 · 5 评论 -
Parameters转换为Variant数组
ClientDataSet的DataRequest方法把Variant数组上传触发服务器DataSetProvider的OnDataRequest事件,在OnDataRequest对上传的Variant数组进行解析//Parameters转换为Variant数组function ParametersToVariant(par:TParameters;ProcedureName:Variant): OleVariant;vartmpv:Variant;n,i:integer;begintmpv:=VarArr转载 2010-12-23 16:07:00 · 447 阅读 · 0 评论 -
adoquery.parameters流化
<br />unit WebAdoStream;<br />{****************************************************************<br /> 单元名称:WebAdoStream.pas<br /> 创建日期:2009-10-01<br /> 创建者 本模块改编于 New Midas VCL Library(1.00)的JxStream.pas<br /> 功能: <br />转载 2010-12-23 17:07:00 · 769 阅读 · 0 评论 -
datasnap 2010 简介
<br />有很多朋友认为,datasnap 2010 只可以与DBX 捆绑在一起,而如果是想用ADO的话,哪就得放弁DATASNAP 2010 了,这个想法是错误的,datasnap 2010 是调用了DBX 库中的一些相关的东西,也就是我们如果用ADO来连接目标库的话,哪么我们还是需要USES DBX相关的单元,但是这并不影响我们使用ADO<br /> <br />新版本也不是完全都如意,如果你还在用SQL SERVER 2000的话,哪么你想用DBX的话,你的客户端必需要装到sql server 20转载 2011-02-04 08:20:00 · 705 阅读 · 0 评论 -
DataSnap 2010 TDSServerClass中Lifecycle生命周期三种属性说明
Lifecycle 三种属性: Session、Invocation、Server如果乱用这三种属性,你的服务程序有可能崩溃,数据混乱,内存占用大,效率低等问题!下面我对这三种属性的使用环境逐一介绍:1. Session说明:这是delphi2010中默认属性,也是delphi推荐设置。Session会为每个来自客户端的链接,建立一个线程来实例化。实例化是什么概念呢?就是这个线程把所有你将要用到的类、函数等等都建立好了,等待你客户端直接使用。这个线程和实例化并不释放,直到客户端中断连接。如果有300个客户端转载 2011-02-04 14:44:00 · 437 阅读 · 0 评论 -
datasnap 2010 加强服务程序对访问者的控制能力
1)作为一个服务程序,如果不限制客户端访问数量,后果将是很可怕的。如果有人恶搞,服务器不堪重负,内存将耗尽,最终服务器将宕机。如何限制访问者的数量呢?我们可以设置一个变量,来记录来访者的数量,如果超过我们既定的数字,那么后续的连接服务器请求,都将被断掉。2)限制了访问数量,但是如果不做密码身份认证,无关的人员也将能登陆服务器!解决办法是客户端传入用户名和密码,如果用户名和密码不正确,连接将被挂断。在客户端的SQLConnection1中driver分类的username和password属性设置好用户名和密转载 2011-02-04 14:48:00 · 582 阅读 · 0 评论 -
datasnap 2010 为DataSnap系统服务程序添加描述
<br />这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了。<br />DataSnap有三种服务模式,其中Service Application方式建立的windows服务没有描述,描述部分是空的,感觉总是欠缺点什么。<br />现找到办法添加描述:<br />procedure TServerContainer2.ServiceAfterInstall(Sender: TService);<br />var<br /> reg: T转载 2011-02-04 14:53:00 · 388 阅读 · 0 评论 -
TField.ProviderFlags
TField.ProviderFlags,這對於組 SQL 來說至關重要!ProviderFlags 是 TProviderFlag 的集合,我們來看看 ProviderFlags 可以包含哪些元素 元素名稱 說明 備註 pfInUpdate INSE转载 2011-10-16 20:59:13 · 1084 阅读 · 1 评论