<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SUNSTONE的Delphi笔记]]></title><description><![CDATA[计算机知识浩如烟海，记性不好，找个地方保存学习体会（转载需注明出处）]]></description><link>https://blog.csdn.net/sunstone</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; sunstone]]></copyright><item><title><![CDATA[pgdac和unidac插入效率究竟差多少？]]></title><link>https://blog.csdn.net/sunstone/article/details/6633557</link><guid>https://blog.csdn.net/sunstone/article/details/6633557</guid><author>sunstone</author><pubDate>Tue, 26 Jul 2011 06:50:30 +0800</pubDate><description><![CDATA[pgdac和unidac都是http://www.devart.com公司出品的优秀控件。unidac对各种数据库通吃，pgdac是专用于postgreSQL数据库。既然都能用于pg数据库，那么他们究竟在效率上有什么差别呢。我的测试：同一台机器，同样的内容。插入10万条，每条语句]]></description><category></category></item><item><title><![CDATA[postgreSQL数据库关于事务的几个要点]]></title><link>https://blog.csdn.net/sunstone/article/details/6632435</link><guid>https://blog.csdn.net/sunstone/article/details/6632435</guid><author>sunstone</author><pubDate>Mon, 25 Jul 2011 16:36:02 +0800</pubDate><description><![CDATA[postgreSQL数据库 事务：1.postgreSQL数据库不支持事务嵌套，但是支持在当前事务里定义新保存点，用保存点来解决需要事务嵌套的地方。保存点可以嵌套。2.ROLLBACK TO SAVEPOINT 1)回滚所有指定保存点建立之后执行的命令(包括这之后还有保存点的命令]]></description><category></category></item><item><title><![CDATA[ClientDataSet加上TDataSetProvider的数据保存问题]]></title><link>https://blog.csdn.net/sunstone/article/details/6629365</link><guid>https://blog.csdn.net/sunstone/article/details/6629365</guid><author>sunstone</author><pubDate>Sun, 24 Jul 2011 12:08:15 +0800</pubDate><description><![CDATA[ClientDataSet加上TDataSetProvider的数据保存问题前台：D7或D2005; DBExpress连接组件：TSqlConnection,TSqlQuery ,TDataSetProvider,TClientDataSet;后台：SQL Server 200]]></description><category></category></item><item><title><![CDATA[详解Variant 的相关函数]]></title><link>https://blog.csdn.net/sunstone/article/details/6627104</link><guid>https://blog.csdn.net/sunstone/article/details/6627104</guid><author>sunstone</author><pubDate>Fri, 22 Jul 2011 23:20:52 +0800</pubDate><description><![CDATA[1.VarArrayCreate()和VarArrayOf()这两个常用就不说了2.VarArrayRedim()函数能修改variant数组的最高限。3.VarArrayDimCount()函数返回Variant数组的维数，4.VarArrayLowBound()和VarArr]]></description><category></category></item><item><title><![CDATA[delphi修改默认打印机]]></title><link>https://blog.csdn.net/sunstone/article/details/6537253</link><guid>https://blog.csdn.net/sunstone/article/details/6537253</guid><author>sunstone</author><pubDate>Fri, 10 Jun 2011 20:59:00 +0800</pubDate><description><![CDATA[uses WinSpool, ... ;procedure ChangeDefaultPrinter(const Name: string) ;var    W2KSDP: function(pszPrinter: PChar): Boolean; stdcall;    H: THandle;    Size, Dummy: Cardinal; PI:]]></description><category></category></item><item><title><![CDATA[用Delphi打印各类文档]]></title><link>https://blog.csdn.net/sunstone/article/details/6537249</link><guid>https://blog.csdn.net/sunstone/article/details/6537249</guid><author>sunstone</author><pubDate>Fri, 10 Jun 2011 20:57:00 +0800</pubDate><description><![CDATA[ ShellExecute(Handle, print, PChar(c:/document.doc), nil, nil, SW_HIDE) ;Drop a TComboBox on a form. Name it "cboPrinter". Set Style to csDropDownLidtPut the next two lines in the fo]]></description><category></category></item><item><title><![CDATA[UNIGUI如何禁止关闭新窗口]]></title><link>https://blog.csdn.net/sunstone/article/details/6169286</link><guid>https://blog.csdn.net/sunstone/article/details/6169286</guid><author>sunstone</author><pubDate>Sat, 29 Jan 2011 23:01:00 +0800</pubDate><description><![CDATA[<br />1.取消新窗体的systemmenu，目的是去掉窗体的关闭按钮X<br /> <br />2.在窗体加上新按钮，点击事件为<br />close;<br /> <br />3.在窗体的onclose实践中添加如下代码<br /> <br />action:=canone;//这句一定要放在messagedlg前面<br />messagedlg(xxxxxxx);<br /> ]]></description><category></category></item><item><title><![CDATA[UNIGUI中如果获得Session情况]]></title><link>https://blog.csdn.net/sunstone/article/details/6169281</link><guid>https://blog.csdn.net/sunstone/article/details/6169281</guid><author>sunstone</author><pubDate>Sat, 29 Jan 2011 22:57:00 +0800</pubDate><description><![CDATA[<br />在ServerModule单元中有如下属性，可以使用<br /> <br />ServerModule.UniServerModule.ServerStats.ActiveSessions<br />ServerModule.UniServerModule.ServerStats.MaxSessions<br />ServerModule.UniServerModule.ServerStats.BytesSent<br />ServerModule.UniServerModule.ServerS]]></description><category></category></item><item><title><![CDATA[UNIGUI中控件类名的变化]]></title><link>https://blog.csdn.net/sunstone/article/details/6169279</link><guid>https://blog.csdn.net/sunstone/article/details/6169279</guid><author>sunstone</author><pubDate>Sat, 29 Jan 2011 22:54:00 +0800</pubDate><description><![CDATA[<br />今天一个朋友在使用UNIGUI碰到了问题，他要遍历窗体上的控件，然后根据类名进行相应控制。<br /> <br />原来的程序为：<br />procedure TMainForm.Fj_component;<br />var<br />  i: Integer;<br />begin<br />  for i := 0 to MainForm.ComponentCount - 1 do<br />  begin<br />    UniMemo1.Lines.Add(MainForm.Comp]]></description><category></category></item><item><title><![CDATA[FieldByName速度优化]]></title><link>https://blog.csdn.net/sunstone/article/details/6159433</link><guid>https://blog.csdn.net/sunstone/article/details/6159433</guid><author>sunstone</author><pubDate>Sun, 23 Jan 2011 08:13:00 +0800</pubDate><description><![CDATA[调用FieldByName主要是调用FindField，会在主循环引进n个新子循环下面优化比较好var  AField : TField;  begin  Assert(AdoQuery1.Active, 'Dataset is not active!');  try    AdoQuery1.DisableControls;    AField := AdoQuery1.FieldByName('MyFieldName');     AdoQuery1.First;    while not AdoQue]]></description><category></category></item><item><title><![CDATA[把字节数显示成kb或gb的函数]]></title><link>https://blog.csdn.net/sunstone/article/details/6091520</link><guid>https://blog.csdn.net/sunstone/article/details/6091520</guid><author>sunstone</author><pubDate>Wed, 22 Dec 2010 13:31:00 +0800</pubDate><description><![CDATA[<br />经常用到把字节数显示成kb或gb，函数如下<br /> <br />function FormatByteSize(const bytes: Longint): string;<br /> const<br />   B = 1; //byte<br />   KB = 1024 * B; //kilobyte<br />   MB = 1024 * KB; //megabyte<br />   GB = 1024 * MB; //gigabyte<br /> begin<br />   if ]]></description><category></category></item><item><title><![CDATA[Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明]]></title><link>https://blog.csdn.net/sunstone/article/details/5282666</link><guid>https://blog.csdn.net/sunstone/article/details/5282666</guid><author>sunstone</author><pubDate>Tue, 02 Feb 2010 21:11:00 +0800</pubDate><description><![CDATA[Lifecycle 三种属性： Session、Invocation、Server这三种属性都用在什么情况，有什么要注意的事项，Delphi2010中罕有说明。如果乱用这三种属性，你的服务程序有可能崩溃，数据混乱，内存占用大，效率低等问题！下面我对这三种属性的使用环境逐一介绍： 1. Session说明：这是delphi2010中默认属性，也是delphi推荐设置。Sess]]></description><category></category></item><item><title><![CDATA[让Windows2003为Firebird数据库保留3050端口]]></title><link>https://blog.csdn.net/sunstone/article/details/5251573</link><guid>https://blog.csdn.net/sunstone/article/details/5251573</guid><author>sunstone</author><pubDate>Sun, 24 Jan 2010 20:21:00 +0800</pubDate><description><![CDATA[在某些的情况下您可能希望保留的端口的范围，以便程序或进程的请求随机端口将不会分配保留范围内的端口。当保留的端口范围时，仅在程序或特别请求保留范围内的端口的进程可以使用该端口。 Windows Server 2003 或 Windows XP 专业版启动注册表编辑器 (Regedit.exe)。 找到并单击以下注册表子项：HKEY_LOCAL_MACHINE/SY]]></description><category></category></item><item><title><![CDATA[Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力]]></title><link>https://blog.csdn.net/sunstone/article/details/5145750</link><guid>https://blog.csdn.net/sunstone/article/details/5145750</guid><author>sunstone</author><pubDate>Wed, 06 Jan 2010 20:36:00 +0800</pubDate><description><![CDATA[1）作为一个服务程序，如果不限制客户端访问数量，后果将是很可怕的。如果有人恶搞，服务器不堪重负，内存将耗尽,最终服务器将宕机。如何限制访问者的数量呢？ 我们可以设置一个变量，来记录来访者的数量，如果超过我们既定的数字，那么后续的连接服务器请求，都将被断掉。 2）限制了访问数量，但是如果不做密码身份认证，无关的人员也将能登陆服务器！解决办法是客户端传入用户名和密码，如果用户名和密码不]]></description><category></category></item><item><title><![CDATA[Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用]]></title><link>https://blog.csdn.net/sunstone/article/details/5023718</link><guid>https://blog.csdn.net/sunstone/article/details/5023718</guid><author>sunstone</author><pubDate>Thu, 17 Dec 2009 10:33:00 +0800</pubDate><description><![CDATA[为了能让我们的服务程序更加稳定，有些细节问题必须解决。就如上一讲中提到的客户端拔掉网线，造成服务器上TCP变成死连接，如果死连接数量过多，对服务器能长期稳定运行是一个巨大的威胁。 另外，经过测试，如果服务器上有TCP死连接，那么服务程序连接数据库，也会产生那个一个死连接。这样的话，给数据库服务器也造成威胁。所以，服务器程序编写的好坏，直接影响系统的稳定性！ 如何解决TCP死连接的问]]></description><category></category></item><item><title><![CDATA[Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解]]></title><link>https://blog.csdn.net/sunstone/article/details/5016363</link><guid>https://blog.csdn.net/sunstone/article/details/5016363</guid><author>sunstone</author><pubDate>Wed, 16 Dec 2009 07:17:00 +0800</pubDate><description><![CDATA[Delphi2010中DataSnap，如果客户端异常掉线或拔掉网线，那么在服务端会留下一个TCP连接，这个连接会变成死连接（经过测试，如果windows的TCP保持连接禁用的话，三个小时该死连接还不消失）。如果大量客户端并发，出现的死TCP连接过多，服务器内存和端口将会增加，直到占满服务器的端口和耗尽内存为止。如果这样的话，服务器无法健壮稳定的运行。 大家可以另开线程来监控客户端连接，但]]></description><category></category></item><item><title><![CDATA[宝贝女儿快9个月了]]></title><link>https://blog.csdn.net/sunstone/article/details/4999440</link><guid>https://blog.csdn.net/sunstone/article/details/4999440</guid><author>sunstone</author><pubDate>Sun, 13 Dec 2009 20:28:00 +0800</pubDate><description><![CDATA[宝贝女儿快9个月了，每天看到女儿的笑脸，内心充满了无比的幸福。女儿，父亲可以溺爱；男孩，父亲只能是深沉的爱！将我的溺爱毫无保留的表现出来，家有女儿，真是幸福！]]></description><category></category></item><item><title><![CDATA[Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口]]></title><link>https://blog.csdn.net/sunstone/article/details/4990189</link><guid>https://blog.csdn.net/sunstone/article/details/4990189</guid><author>sunstone</author><pubDate>Sat, 12 Dec 2009 10:03:00 +0800</pubDate><description><![CDATA[作为一个服务器软件，必须做到对客户端强有力的控制，想要控制，就必须得到客户端的网络基本信息，比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端，比如终止某些客户端的连接、限制功能等等。 在delphi2010中的datasnap服务器如何获得客户端ip，的确花了我点时间，奇怪为什么这个功能不做的更人性化点呢，功能总是藏着掖着。还得让程序员像寻宝一样摸索，浪费时间。现在把我整理的结果]]></description><category></category></item><item><title><![CDATA[Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法]]></title><link>https://blog.csdn.net/sunstone/article/details/4970158</link><guid>https://blog.csdn.net/sunstone/article/details/4970158</guid><author>sunstone</author><pubDate>Wed, 09 Dec 2009 11:14:00 +0800</pubDate><description><![CDATA[这几天继续研究DataSnap技术。针对服务器和客户端软件，如何发布呢？经过研究发现，分发方法非常简单！ 服务器发布方法：1.在unit ServerMethodsUnit1单元中，添加uses MidasLib;（添加MidasLib的目的是省去发布Midas.dll）2.我用的是火鸟数据库，只需拷贝dbxfb.dll和fbclient.dll 分发的服务器软件只需三]]></description><category></category></item><item><title><![CDATA[Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述]]></title><link>https://blog.csdn.net/sunstone/article/details/4944779</link><guid>https://blog.csdn.net/sunstone/article/details/4944779</guid><author>sunstone</author><pubDate>Sat, 05 Dec 2009 10:40:00 +0800</pubDate><description><![CDATA[这几天一直在研究Delphi 2010的DataSnap，感觉功能真是很强大，现在足有理由证明Delphi7该下岗了。DataSnap有三种服务模式，其中Service Application方式建立的windows服务没有描述，描述部分是空的，感觉总是欠缺点什么。现找到办法添加描述： procedure TServerContainer2.ServiceAfterInstall(]]></description><category></category></item></channel></rss>