上一页 1 ··· 137 138 139 140 141 142 143 144 145 ··· 197 下一页
摘要: OleVariant的本质OleVariant,COM的一种数据类型。MIDAS基于COM之上构建的,自然使用OleVariant作为数据序列格式。延续到现在最新的DATASNAP仍然支持它。TClientDataset.data,TClientDataset.delta,这俩个属性的类型都是OleVariant。OleVariant可以是string,integer,float...这个大家都知道,但它也可以是array of OleVariant,这个可能有人不知道了。明白了这点就是datasnap中间件主从表数据同步的关键。var a: TServerMethods1Client; .. 阅读全文
posted @ 2013-01-30 11:49 delphi中间件 阅读(7912) 评论(0) 推荐(0) 编辑
摘要: DATASNAP中间件使用巢状对象提交数据非常方便,巢状对象会自动生成更新的SQL语句,无需我们手工拼写,只需类似如下的一行代码即可搞定。dm.dspQuery.ApplyUpdates(v, 0, ErrCount);但是,有时候却会报错。一种原因是数据表结构设计时使用了数据库保留的字段名引起的。比如SQL SERVER数据库如果某表结构使用status的字段名,因为status是SQL SERVER的保留字。而巢状对象自动生成的SQL语句不会用[status]把status包起来,导致sql server保留字错误。如何解决?设计数据表结构的时候,字段名要避免使用数据库的保留字。二种原因是 阅读全文
posted @ 2013-01-30 11:40 delphi中间件 阅读(805) 评论(0) 推荐(0) 编辑
摘要: 如果WINDOWS系统的短日期格式为“yyyy/m/d”,执行下面的代码会报错:2013-01-29 00:00:00不是合法的日期procedure TFrmQuerySale.FormShow(Sender: TObject);varsDate: string;begininherited;// 默认查当天的销售数据sDate := FormatDateTime('yyyy-mm-dd', Now);DateTimePicker1.DateTime := StrToDateTime(sDate + ' 00:00:00');DateTimePicker2.D 阅读全文
posted @ 2013-01-30 11:26 delphi中间件 阅读(10570) 评论(0) 推荐(1) 编辑
摘要: 最近做了个断网收银的项目,服务端使用SQL SERVER数据库,收银机使用ACCESS数据库。做了个中间件来同步数据。哪些数据需要同步?新增的数据修改过的数据删除的数据(删除只是置删除标志位,可以视为修改过的数据进行处理)需要同步的数据表统一预留俩个用于数据同步的字段:字段名:CreateDate,数据类型:TDateTime,新增数据的时间戳;字段名:ModifyDate,数据类型:TDateTime,修改过的数据的时间戳。倘若需要同步的数据表内的数据小,可以不使用时间戳,而在每次同步数据之前,先删除表内的所有数据,然后再插入同步的数据。如此编程最为简单,但必须是同步数据较小的情况下。数据同 阅读全文
posted @ 2013-01-30 11:17 delphi中间件 阅读(2191) 评论(1) 推荐(0) 编辑
摘要: 如果通讯协议使用TCP/IP,客户端同中间件之间的SOCKET连接是非常有讲究的。应该视应用场合巧妙地使用短连接搭配长连接的方式。纯粹地使用长连接或者纯粹地使用短连接,往往不大合理。如果长时间让一个SOCKET长连接休闲,这无疑是对中间件资源的浪费,如果这种休闲的长连接数量非常多,可能会影响中间件的性能。光靠中间件通过发心跳包自动断开长时间休闲的连接,其实这是中间件对此类事件的最后一道防线。如果远程方程都做成短连接,也不大好,例如一些远程方法成块地执行,如果执行一个远程方法先同中间件建立SOCKET连接,执行完以后立即断开连接,这样就不好。因为建立SOCKET连接比较地耗时,一些远程方法成块地 阅读全文
posted @ 2013-01-10 21:08 delphi中间件 阅读(3813) 评论(1) 推荐(0) 编辑
摘要: type TOutBufPassThrough = record // 用于USB接口打印机开钱箱 // 调用windows.extEscape可以直接用extEscape(handle, PASSTHROUGH, sizeOf(outBuf), @outBuf, 0, nil)向设备发送esc命令 阅读全文
posted @ 2013-01-05 17:38 delphi中间件 阅读(1052) 评论(0) 推荐(0) 编辑
摘要: 客户端登录的时候,自动同中间件校对时间。procedure TdmCommonFun.setLocalDateTime(Value: TDateTime);var lSystemDateTime: TSystemTime;begin DateTimeToSystemTime(Value, lSystemDateTime); SetLocalTime(lSystemDateTime);end; 阅读全文
posted @ 2013-01-05 17:36 delphi中间件 阅读(630) 评论(0) 推荐(0) 编辑
摘要: function TdmCommonFun.GetIdeSerialNumber: AnsiString; stdcall;const IDENTIFY_BUFFER_SIZE = 512;type TIDERegs = packed record bFeaturesReg: Byte; // Used for specifying SMART "commands". bSectorCountReg: Byte; // IDE sector count register bSectorNumberReg: Byte; // IDE sector number registe 阅读全文
posted @ 2013-01-05 17:35 delphi中间件 阅读(876) 评论(0) 推荐(0) 编辑
摘要: procedure TFrmMain.btnUpdateFilesClick(Sender: TObject);begin try if Assigned(gEXEmm) then FreeAndNil(gEXEmm); if Assigned(gINImm) then FreeAndNil(gIN 阅读全文
posted @ 2012-12-29 22:24 delphi中间件 阅读(793) 评论(0) 推荐(0) 编辑
摘要: DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的。但是很多人发现好像大小稍微大点就工作不正常了。DataSnap默认的缓存大小是32k 所以如果流的大小超过这个大小就会被自动分成多个包,这就是传递大量数据的基础,如果一次性发送就可能受到内存的限制。当传递大量数据时获取到的大小是-1,所以如果还是按照一般的方法来读取流的数据就会有问题了。由于流的数据是原始数据包发送,所以在不对数据包压缩加密的情况下,传递速度是和其它方式没有多大区别的。0102030405060708091011121314151617181920212223// FS是一个文件流function TM 阅读全文
posted @ 2012-11-23 21:48 delphi中间件 阅读(2127) 评论(0) 推荐(1) 编辑
上一页 1 ··· 137 138 139 140 141 142 143 144 145 ··· 197 下一页