- 博客(45)
- 收藏
- 关注
原创 pgdac和unidac插入效率究竟差多少?
pgdac和unidac都是http://www.devart.com公司出品的优秀控件。unidac对各种数据库通吃,pgdac是专用于postgreSQL数据库。既然都能用于pg数据库,那么他们究竟在效率上有什么差别呢。我的测试:同一台机器,同样的内容。插入10万条,每条语句
2011-07-26 06:50:30
3860
3
原创 postgreSQL数据库关于事务的几个要点
postgreSQL数据库 事务:1.postgreSQL数据库不支持事务嵌套,但是支持在当前事务里定义新保存点,用保存点来解决需要事务嵌套的地方。保存点可以嵌套。2.ROLLBACK TO SAVEPOINT 1)回滚所有指定保存点建立之后执行的命令(包括这之后还有保存点的命令
2011-07-25 16:36:02
2230
转载 ClientDataSet加上TDataSetProvider的数据保存问题
ClientDataSet加上TDataSetProvider的数据保存问题前台:D7或D2005; DBExpress连接组件:TSqlConnection,TSqlQuery ,TDataSetProvider,TClientDataSet;后台:SQL Server 200
2011-07-24 12:08:15
11619
原创 详解Variant 的相关函数
1.VarArrayCreate()和VarArrayOf()这两个常用就不说了2.VarArrayRedim()函数能修改variant数组的最高限。3.VarArrayDimCount()函数返回Variant数组的维数,4.VarArrayLowBound()和VarArr
2011-07-22 23:20:52
2684
原创 delphi修改默认打印机
uses WinSpool, ... ;procedure ChangeDefaultPrinter(const Name: string) ;var W2KSDP: function(pszPrinter: PChar): Boolean; stdcall; H: THandle; Size, Dummy: Cardinal; PI:
2011-06-10 20:59:00
4207
转载 用Delphi打印各类文档
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
2011-06-10 20:57:00
2496
原创 UNIGUI如何禁止关闭新窗口
<br />1.取消新窗体的systemmenu,目的是去掉窗体的关闭按钮X<br /> <br />2.在窗体加上新按钮,点击事件为<br />close;<br /> <br />3.在窗体的onclose实践中添加如下代码<br /> <br />action:=canone;//这句一定要放在messagedlg前面<br />messagedlg(xxxxxxx);<br />
2011-01-29 23:01:00
2859
原创 UNIGUI中如果获得Session情况
<br />在ServerModule单元中有如下属性,可以使用<br /> <br />ServerModule.UniServerModule.ServerStats.ActiveSessions<br />ServerModule.UniServerModule.ServerStats.MaxSessions<br />ServerModule.UniServerModule.ServerStats.BytesSent<br />ServerModule.UniServerModule.ServerS
2011-01-29 22:57:00
4207
原创 UNIGUI中控件类名的变化
<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
2011-01-29 22:54:00
2598
1
翻译 FieldByName速度优化
调用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
2011-01-23 08:13:00
3230
翻译 把字节数显示成kb或gb的函数
<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
2010-12-22 13:31:00
2039
原创 Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明
Lifecycle 三种属性: Session、Invocation、Server这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明。如果乱用这三种属性,你的服务程序有可能崩溃,数据混乱,内存占用大,效率低等问题!下面我对这三种属性的使用环境逐一介绍: 1. Session说明:这是delphi2010中默认属性,也是delphi推荐设置。Sess
2010-02-02 21:11:00
6721
9
翻译 让Windows2003为Firebird数据库保留3050端口
在某些的情况下您可能希望保留的端口的范围,以便程序或进程的请求随机端口将不会分配保留范围内的端口。当保留的端口范围时,仅在程序或特别请求保留范围内的端口的进程可以使用该端口。 Windows Server 2003 或 Windows XP 专业版启动注册表编辑器 (Regedit.exe)。 找到并单击以下注册表子项:HKEY_LOCAL_MACHINE/SY
2010-01-24 20:21:00
3335
原创 Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力
1)作为一个服务程序,如果不限制客户端访问数量,后果将是很可怕的。如果有人恶搞,服务器不堪重负,内存将耗尽,最终服务器将宕机。如何限制访问者的数量呢? 我们可以设置一个变量,来记录来访者的数量,如果超过我们既定的数字,那么后续的连接服务器请求,都将被断掉。 2)限制了访问数量,但是如果不做密码身份认证,无关的人员也将能登陆服务器!解决办法是客户端传入用户名和密码,如果用户名和密码不
2010-01-06 20:36:00
6578
4
原创 Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用
为了能让我们的服务程序更加稳定,有些细节问题必须解决。就如上一讲中提到的客户端拔掉网线,造成服务器上TCP变成死连接,如果死连接数量过多,对服务器能长期稳定运行是一个巨大的威胁。 另外,经过测试,如果服务器上有TCP死连接,那么服务程序连接数据库,也会产生那个一个死连接。这样的话,给数据库服务器也造成威胁。所以,服务器程序编写的好坏,直接影响系统的稳定性! 如何解决TCP死连接的问
2009-12-17 10:33:00
9162
4
原创 Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解
Delphi2010中DataSnap,如果客户端异常掉线或拔掉网线,那么在服务端会留下一个TCP连接,这个连接会变成死连接(经过测试,如果windows的TCP保持连接禁用的话,三个小时该死连接还不消失)。如果大量客户端并发,出现的死TCP连接过多,服务器内存和端口将会增加,直到占满服务器的端口和耗尽内存为止。如果这样的话,服务器无法健壮稳定的运行。 大家可以另开线程来监控客户端连接,但
2009-12-16 07:17:00
11748
4
原创 宝贝女儿快9个月了
宝贝女儿快9个月了,每天看到女儿的笑脸,内心充满了无比的幸福。女儿,父亲可以溺爱;男孩,父亲只能是深沉的爱!将我的溺爱毫无保留的表现出来,家有女儿,真是幸福!
2009-12-13 20:28:00
2001
2
原创 Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。 在delphi2010中的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。现在把我整理的结果
2009-12-12 10:03:00
8626
4
原创 Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法
这几天继续研究DataSnap技术。针对服务器和客户端软件,如何发布呢?经过研究发现,分发方法非常简单! 服务器发布方法:1.在unit ServerMethodsUnit1单元中,添加uses MidasLib;(添加MidasLib的目的是省去发布Midas.dll)2.我用的是火鸟数据库,只需拷贝dbxfb.dll和fbclient.dll 分发的服务器软件只需三
2009-12-09 11:14:00
8964
1
原创 Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了。DataSnap有三种服务模式,其中Service Application方式建立的windows服务没有描述,描述部分是空的,感觉总是欠缺点什么。现找到办法添加描述: procedure TServerContainer2.ServiceAfterInstall(
2009-12-05 10:40:00
6397
原创 delphi2010中DElphi class explorer妙用
delphi2010中view -> Delphi class explorer ,将显示所有类,包括全局变量,而且右键菜单还可以在已有类中新增 字段、属性、方法。但是没找到如何新建类,不行的话,就手工吧!
2009-11-19 22:13:00
1791
原创 Delphi2010中TResourceStream流使用
Resource可以是任意文件(图像、声音、office都可以),直接打包到编译的exe文件中,调用也非常方便 打开一个新的或已有的delphi工程 1.先在 Project->resources..添加一个图片,并更改名字为myfirst,类型为RT_RCDATA2.在窗体上方一个image和button3.button代码如下 procedure TForm
2009-11-19 22:01:00
6550
3
翻译 Firebird数据库版本差别
http://www.firebirdsql.org/index.php?op=guide&id=techspec Firebird Technical SpecificationsUpdated 2007-07-16 and subject to reviewDatabase Limits ItemFirebird 2.xFirebi
2009-11-19 19:18:00
2444
转载 将memo转化为JPG输出
unit s1;interfaceuses Windows, Messages, SysUtils, Graphics, Controls, Forms, StdCtrls, Classes;type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TO
2009-11-17 20:11:00
955
原创 ini文件还有64K的限制么?
今天用delphi2010和Delphi7测试了一下ini读写,已经没有64k的限制了,估计限制这事已经是老黄历了!
2009-11-17 16:50:00
1337
1
原创 关于Record类型RTTI反射的用途和方法
问题的引入:准备做一个多国语言软件,发现信息变量(都是字符串)数量庞大,如果简单的通过 “变量=readstring”从ini文件中获取的话,几百个变量就是几百行,这个工作量非常大,而且也不易维护。如果使用RTTI反射机制,未来变量变化时,赋值程序不用修改,只需修改变量结构,这是一劳永逸的做法。 注意:本例程使用delphi2010,delphi老版本不支持record类型
2009-11-17 01:01:00
3592
原创 statusbar学习(2)—在statusbar上显示图标和自动以颜色
procedure TForm2.FormCreate(Sender: TObject);begin StatusBar1.Panels[0].Style := psOwnerDraw; StatusBar1.Panels[1].Style := psOwnerDraw;end; procedure TForm2.StatusBar1DrawPanel(StatusBar: TStat
2009-11-13 22:18:00
3933
原创 编译变量$REGION用法
今天新学习了一个 编译变量$REGION,用于在delphi2006以后版本的折叠代码显示,非常方便。 procedure TForm2.Button1Click(Sender: TObject);var uStr: UnicodeString;begin{$REGION 显示uStr变量内容} uStr := ok; ShowMessage(uStr);{$ENDREGIO
2009-11-13 21:49:00
3858
1
转载 合并动态数组
procedure TForm2.btn1Click(Sender: TObject);var arr1, arr2: TBytes; len: Integer;begin SetLength(arr1, 3); SetLength(arr2, 3); arr1[0] := 65; arr1[1] := 66; arr1[2] := 67; arr2[0] := 68; ar
2009-11-13 20:09:00
2337
原创 关于delphi2010读取MySQL数据库TEXT类型乱码的解决方案
今天在测试delphi2010的DBExpress读取mysql数据库功能的时候,发现了一个问题: 我的mysql是5.1版本,字符集全部设置为utf8,使用delphi2010读取intger、tinyint、char、varchar等类型,中文显示正常。但是当读取text类型字段时候,出现乱码。如果将该字段更换为varchar,内容显示正常。这就奇怪了,我百思不得其解。 接着,
2009-11-11 15:48:00
5821
6
翻译 使用TWebBrowser组件保存网页为html和mht文件
一、保存为HTML文件uses ActiveX;...procedure WB_SaveAs_HTML(WB : TWebBrowser; const FileName : string) ;var PersistStream: IPersistStreamInit; Stream: IStream; FileStream: TFileStream;begin if not As
2009-11-09 10:44:00
4057
原创 URL 文件格式
URL文件实际上就是一个INI文件,结构也非常简单。大家可以打开记事本,建立一个txt文件,然后把扩展名改为*.url [InternetShortcut]URL=http://www.uufax.comWorkingDirectory=C:/WINDOWS/ShowCommand=7IconIndex=1IconFile=C:/WINDOWS/SYSTEM/url.dllModif
2009-11-09 10:00:00
6777
1
原创 如何知道鼠标点击的statusbar的位置
procedure TForm2.StatusBar1Click(Sender: TObject);var mpt: TPoint; x: integer; j: integer; panel: integer;begin if (StatusBar1.SimplePanel) OR (StatusBar1.Panels.Count = 0) then begin Memo1.L
2009-11-07 17:11:00
1327
原创 如何让BitBtn按钮显示icon图标
BitBtn按钮的Glyph属性只能使用bmp图片,如果想用icon做图片可以使用下面语句。在窗体上添加imagelist,然后在form的create函数中添加 ImageList1.GetBitmap(0, BitBtn1.Glyph);
2009-11-07 16:26:00
4540
原创 delphi执行一个外部程序,当外部程序结束后,delphi程序立即响应(续)
今天发现前一篇文章的例程多少有些毛病,在主程序中使用repeat循环来等待外部程序的关闭,这样这个程序占用cpu会是100%,所以加上一句sleep语句来释放cpu。但是这样做我也不太满意,毕竟用了repeat循环,显得程序很不专业。今天试了另一种方法,使用WaitForSingleObject函数,而不用repeat过程。但是也发现了一些问题。等我有时间在优化一下。 function
2009-11-06 20:32:00
1707
原创 让delphi2010操作界面回到delphi7模式
在使用delphi2010的过程中,很不习惯它的窗口在一个框框内,感觉很不方便,可能是因为使用delphi7很多年了,已经习惯了delphi7的版面。如何让delphi2010能有delphi7的版面布局呢?答案是肯定的,方法如下:1)在工具栏点右键,选择components 会看到delphi7中的组件显示面板2)tools > options > environment op
2009-11-06 19:22:00
5472
1
原创 delphi 2010 fastMM 内存泄露使用方法
Delphi2010集成了fastMM,这回大家调试程序是的时候可以方便地检查内存泄露了。使用方法如下:在project中,添加一行 ReportMemoryLeaksOnShutdown := DebugHookDebugHookprogram Project1;uses Forms, Unit1 in Unit1.pas { Form1 } ;{$R *.res}
2009-11-06 19:20:00
5981
原创 delphi2010打开后显示"displayNotification: 内存不够"解决办法
今天打开delphi 2010,提示"displayNotification: 内存不够",以前从来没碰到,经过研究发现时welcome page 产生的问题,正好对这个 welcome page页很反感,每次启动都出现。这次就干脆干掉它,禁止这个页面的办法如下:打开桌面或启动组中的 delphi2010图标的属性,在命令行后面加一个 -np"C:/Program Files/Embarc
2009-11-06 19:13:00
5041
1
原创 delphi执行一个外部程序,当外部程序结束后,delphi程序立即响应
我们经常能看到360安全卫士进行windows系统升级时,执行windows升级程序,当升级程序执行完成后,360马上弹出提示框。这样的程序是如何做到的呢?下述代码就能完成! procedure TForm1.Button1Click(Sender: TObject);var SEInfo: TShellExecuteInfo; ExitCode: DWORD; ExecuteF
2009-10-27 20:48:00
1387
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人