[PostgreSQL]全角和半角字符转换函数

我们知道,客户许多时候录入数据时,并不注意输入法是否是全角模式,然后就造成输入的内容,有的是全角有的是半角,造成我们做分析统计时的不便,为此,编写相应的函数。当然这个过程应尽量在前台完成,但如果针对已经存在的数据,下面提供的两个函数就比较方便了。 1、全角转换为半角函数 [crayon-592cca9a1bd49330

[PostgreSQL]获取汉字拼音首字母函数

在度娘无语,谷哥失聪的情况下,不得已将自己原来写的一个获取汉字首字母的C++源码转换为了PostgreSQL(为什么要获取汉字首字母?苍天呀大地,自己想想去吧),在PostgreSQL 9.3中测试没有问题,数据库使用的是UTF-8编码。在这里分享出来,供大家参考: [crayon-592cca9a1c5cd56197

QWorkers更新-增加TQJobGroup.FreeAfterDone属性并修正了几个Bug

【更新内容】 1、增加TQJobGroup.FreeAfterDone属性,用于自动在分组作业中所有作业完成或超时时,自动销毁以避免内存泄露。 2、修正了TQJobGroup的最后一个作业执行完成时释放自己,如果同时调用了QWorkers.Clear时会产生死锁的问题。 3、修正了TQJobGroup中断作业执行时,没

QWorker中TQJobGroup的Run和WaitFor/MsgWaitFor中超时的区别

今天群里,恢弘问起这个事,我想有必要跟大家解释一下。 首先,我们考虑TQJobGroup的生命周期,它创建后,我们有可能希望它后台运行,而不是需我们等待它其中的作业都执行完成,但又希望它不要运行太长时间。此时,我们就不能调用WaitFor或MsgWaitFor,而应该直接在Run里指定超时值,这样子,在所有作业都完成或

关于加密那点事(二)

先说几个并不复杂的加密方式: 1、偏移 偏移是针每个字节的内容,增加一定的偏移,如原来的值是0x101112,我们每个字节加5,得到0x151617,这样的内容就和原来的内容不一样,就形成了一种偏移。而解密就是简单的转换回来就好。而如果为每个字节指定不同的偏移,把这些偏移当成密钥,按上面的算法,就会得到一个更加难以破解

关于加密那点事(一)

加密是程序中大家普遍关注的一个话题,从软件本身的反盗版到通讯过程中的数据加密,加密算法是绕不过去的槛。 所谓的加密就是将数据变为看起来杂乱,无法正常读取分析的一种算法。象《大秦帝国》里展示中国古代的三发一至,或者风语者中部族的古老语言,都是一种加密方式。但无论任何加密方式,最终要有一定的办法将其还原回原始内容,没有办法

QLog更新-修正了使用QLog后程序无法多启的问题

【问题描述】 QLog默认会创建与当前程序名称一致,扩展名为.log的日志文件,但你启动一个实例后,第二个实例会由于无法创建日志文件而出问题。新版修改这一行为,改为检测到这一行为时,将程序的新的日志按照 原始文件名_[当前进程ID]_n(n>=1)的方式来命名以避免冲突。 【严重程度】 中 【更新建议】 建议更新

QJson与QMsgPack中的RTTI调用演示

QJson和QMsgPack提供了对RTTI的支持,让你可以简洁方便的完成数据的转换存贮。因为QJson和QMsgPack在RTTI接口上是一致的,因此本文以QJson为例予以说明,如果要换成QMsgPack,只需要将类型声明换下就好:)。 1、记录类型 我们提供了FromRecord/ToRecord两个函数来完成记

QMsgPack更新-修正了FromRtti/ToRtti在处理TCollection类型时存在的问题

【问题描述】 由于FromRtti在处理TCollection类型的对象时,没有将对象类型改成数组,造成由于子结点没有名称而被提示:“对象 xxx 的第 n 个子结点名称未赋值,编码输出前必需赋值。”。 要重现问题,只需要简单的传递一个TCollection对象给FromRtti函数即可。 另外,对应的ToRtti函数

QJson更新-修正了FromRtti/ToRtti在处理TCollection类型时存在的问题

【问题描述】 由于FromRtti在处理TCollection类型的对象时,没有将对象类型改成数组,造成由于子结点没有名称而被提示:“对象 xxx 的第 n 个子结点名称未赋值,编码输出前必需赋值。”。 要重现问题,只需要简单的传递一个TCollection对象给FromRtti函数即可。 另外,对应的ToRtti函数

QMsgPack更新-新增两组函数

【更新内容】 1、XXXByName函数组,用于按类型XXX(Int、Float、Boolean、Float)来访问指定名称的子结点的值,如果相应的结点不存在,就返回指定的默认值。 2、XXXByPath函数组,用于按类型XXX(Int、Float、Boolean、Float)来访问指定路径的子结点的值,如果相应的路径

QWorker更新-修正了三处Bug并迁移For并行函数到TQWorkers

【更新内容】 1、 修正了LongtimeJob投寄长时间作业时,如果Post失败,返回值为0时,作业对象本身在Post中已经被释放,但却被再次释放的问题。问题发生在LongtimeJob函数。 2、 修正了重复作业设置扩展数据时,首次执行完作业后会被释放的问题。重复作业的扩展数据指针应一直保持到重复作业被取消才被释放

二分法查找——利用指数爆炸进行查找

1. 指数爆炸是什么? 有何威力? 假设现在有一第厚度1mm的纸,可以对折无数次。每对折1次,厚度便翻一番。已知地球距离月亮约有39万公里,请问对折多少次后厚度能超过地月距离呢?想想看,39万公里和1mm,差距何等苣大?肯定得对折个几百上千万次吧?好吧,我们来看看: 1mm对折1次变成2mm,再对折一次变成4mm……

Delphi 的 LiveBinding 小结

Delphi新提供了LiveBinding功能,实现了数据与显示的分离。LiveBinding是个好东西,但我们需要更详细的了解一下,才能更好的使用它。 1、什么样的控件能够使用LiveBinding功能绑定? 几乎所有的控件,它是基于RTTI信息的,所以,只要有RTTI信息的地方,理论上都可以。但是,实际上它类型于T