上一页 1 ··· 139 140 141 142 143 144 145 146 147 ··· 196 下一页
摘要: 最小化到任务栏postmessage(Self.Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);最大化或还原procedure Tf_MainForm.RzToolButton1Click(Sender: TObject);var abd: TAppBarData;begin inherited; if WindowState=wsnormal then begin WindowState := wsMaximized; // BorderStyleÎ为 bsNone abd.cbSize := sizeof(abd); SHAppBarMessage(ABM 阅读全文
posted @ 2012-05-10 08:48 delphi中间件 阅读(4054) 评论(0) 推荐(1) 编辑
摘要: 新做的界面 阅读全文
posted @ 2012-05-07 15:06 delphi中间件 阅读(807) 评论(0) 推荐(0) 编辑
摘要: uses Datasnap.DSIntf设置ZLIB压缩等级(zcFastest表示最快的压缩速度) ZCompressStream(M, M0, zcFastest);获取压缩前和压缩后的数据包的体积 iTest := DataPacketSize(VarToDataPacket(aDsp[i].Data)); iB := GetTickCount; v[i] := CompressData(aDsp[i].Data); iTime := GetTickCount - iB; ShowMessage(IntToStr(iTime)); iTest := DataPacketSize(VarT 阅读全文
posted @ 2012-04-06 14:30 delphi中间件 阅读(1756) 评论(0) 推荐(0) 编辑
摘要: 1.代理服务器维护客户专用的应用服务器的表结构(此表规划了负载平衡, 每一个客户都有自己专用的应用服务器):用户编号, 用户密码, 应用服务器编号2.代理服务器维护应用服务器的表结构:应用服务器编号, 应用服务器名称, 应用服务器IP地址(域名), 应用服务器端口号3.代理服务器的IP地址和端口号必须对所有的客户端进行公开. 代理服务器必须有公网IP地址(域名). 各应用服务器也必须有公网IP地址(域名), 但只向代理服务器公开.4.代理服务器提供所有客户端调用的接口:Function GetAppServer(const UserId, Password: string): string;功 阅读全文
posted @ 2012-03-26 17:50 delphi中间件 阅读(798) 评论(0) 推荐(0) 编辑
摘要: 其实所有的死锁最深层的原因就是一个:资源竞争 表现一: 一个用户A 访问表A(锁住了表A),然后又访问表B 另一个用户B 访问表B(锁住了表B),然后企图访问表A 这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了 同样用户B要等用户A释放表A才能继续这就死锁了解决方法: 这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法 仔细分析你程序的逻辑, 1:尽量避免同时锁定两个资源 2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.表现二: 用户A读一条纪录,然后修改该条纪录 这是... 阅读全文
posted @ 2012-03-25 21:46 delphi中间件 阅读(878) 评论(0) 推荐(0) 编辑
摘要: 1. 安装SQL SERVER 2008 R2 NATIVE CLIENT, 注意区分CPU是32位还是64位的2. COPY XE2的MIDAS到C:\WINDOWS\SYSTEM32\, 低版本的MIDAS.DLL会报错: invalid package3. 命令行执行 REGSVR32 MIDAS.DLL 注册MIDAS, 必须是XE2的MIDAS.DLL4. 安装所必须的文件: dbxmss.dll, sqlncli10.dll, midas.dll, config.ini, server.exe5. midas.dll,倘若uses midaslib单元,发布时可以省却。6. 数据引 阅读全文
posted @ 2012-03-13 18:04 delphi中间件 阅读(1041) 评论(0) 推荐(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中间件 阅读(1370) 评论(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中间件 阅读(5490) 评论(6) 推荐(0) 编辑
摘要: procedure LogInfo(msg: string);// 功能: 服务端日志var p: PChar;begin try GetMem(p, (Length(msg) + 1) * sizeof(char)); Move(msg[1], p^, (Length(msg) + 1) * sizeof(char)); PostMessage(Application.MainForm.Handle, WM_LOG, integer(p), 0); except Exit; end;end;procedure Tf_MainForm.Log(var msg: TMessage);var p: 阅读全文
posted @ 2012-03-05 22:54 delphi中间件 阅读(908) 评论(0) 推荐(1) 编辑
摘要: 新的datasnap使用INDY10的线程池。不管你知不知道,DATASNAP都是使用线程池了,这和MIDAS不同,MIDAS默认是没有线程池的。跟踪INDY10线程池类TIdSchedulerOfThreadPool的代码:procedure TIdSchedulerOfThreadPool.Init;begin inherited Init; Assert(FThreadPool<>nil); if not IsDesignTime then begin if PoolSize > 0 then begin with FThreadPool.LockList do try 阅读全文
posted @ 2012-03-03 22:52 delphi中间件 阅读(3706) 评论(0) 推荐(0) 编辑
上一页 1 ··· 139 140 141 142 143 144 145 146 147 ··· 196 下一页