Tag Archives: Delphi

Delphi7 中使用ODAC存取图片

最近很少写技术贴,前几天协助王锋师兄解决了在delphi7中,使用ODAC组件存取图片的问题。事后,他整理了一个经验文档,争得他同意,我贴出来,以备以后查询之用。 说明:ODAC组件我不熟悉,在使用它存取图片的时候,特别注意sql的写法。 ODAC 组件支持 Oracle8 的 BLOB 和 CLOB 数据类型。你可以使用 TOraQuery 组件来获取 LOB 字段的值,BLOB 和 CLOB 数据类型通过 LOB 定位器(指定数据地址) 存储在表列中;实际的 BLOB 和 CLOB 数据存储在独立的表空间中。当存取 LOB 列时,返回的是定位器。要初始化 LOB 定位器,你必须使用 EMPTY_BLOB 或 EMPTY_CLOB Oracle 函数。要返回初始化后的定位器,应在同样的语句中使用 RETURNING 子句。ODAC 写 LOB 数据到 Oracle 且返回初始值字段,需使用:值参数. 对 ODAC 来说,在 LOB 操作中使用 ParamType 属性是非常重要的。如果 ParamType 是 ptInput , ODAC 写数据到服务器,如果 ParamType 是 [...]
Posted in 技术经验帖 | Tagged | Leave a comment

使用绑定变量和不使用绑定变量操作数据库

以下例子是在delphi中编程实现,数据库为oracle,具体的代码省略了,只说明情况。 1、不使用绑定变量 例子:删除同一张表的两条记录。 sql语句如下: (1)delete from t_englishscore_score where STUDENTNUM=’200431500123′ and LESSONNAME=’test’ and YEAR=’2005′ and TERM=’上’; (2)delete from t_englishscore_score where STUDENTNUM=’200431500123′ and LESSONNAME=’毕业设计’ and YEAR=’2007′ and TERM=’下’ 此时查询v$sqltext视图(它能够反映oracle 中share pool中的sql解析共享情况): ADDRESS HASH_VALUE SQL_ID COMMAND_TYPE PIECE SQL_TEXT 0000000173D47990 2193311325 1mhba361bqjkx 7 0 delete from t_englishscore_score where STUDENTNUM=’200431500123′ 0000000173D47990 2193311325 1mhba361bqjkx 7 1 and LESSONNAME=’test’ and YEAR=’2005′ and [...]
Posted in 技术经验帖 | Also tagged | Leave a comment

在PL/SQL中计算采用四舍五入和delphi 6中计算采用四舍五入之间的误差

有系统用户反映,在其中使用delphi6的程序中计算一个数值为2.64,但是在另外一个模块中,相同的参数,计算出来却是2.63,之间相差了0.01。一查,后者是调用oracle中存储过程实现的,而前者在delphi6中实现。 在 仔细分析原因后,发现delphi 6中使用roundto或者simpleroundto都不是我们通常说的四舍五入,前者是采用银行家的四舍五入,即四舍六入五奇偶,而 simpleroundto这个函数也令人有点琢磨不透,有些是四舍五入,有些不是,比如对于 simpleroundto(12.95,-1)=12.9。 而在PL/SQL中,一律保留了1位,四舍五入,所以两种方法一比较,最后累计,就出现了误差。 解决方法,可以自己编辑一个函数处理,也可以按照下面一个网友的解释进行处理: http://www.2ccc.com/idea.asp?articleid=1300 网友iamdream 以下是研究的结果(Delphi6): RoundTo(及Round)函数使用所谓“银行家舍入法”<Banker’s Rounding>(对于舍入位后为5的情况,则舍入位为偶数,则舍,为奇数,则入),而Format函数则为正常的四舍五入法,取例如下: 0.145 RoundTo(0.145, -2) = 0.14 0.145 Format(‘%8.2f’, 0.145) = 0.15 0.155 RoundTo(0.155, -2) = 0.16 0.155 Format(‘%8.2f’, 0.155) = 0.16 另在进行浮点数的运算时,可能会出现0.14499999999999的情况,此时的值按数学上要求实际应为0.145,如用以上方法舍入到小数点后两位时,均不能达到想要的效果。 另SimpleRoundTo比RoundTo更接近四舍五入法,但不完全是四舍五入,如对0.145用SimpleRoundTo(0.145, -2)舍入时仍为0.14; 如果后面还有小数,如0.1450000001,此时舍入,则三者均为0.15!对1.145,SimpleRoundTo舍入为1.15! 故而如用RoundTo来四舍五入,则可在舍入位后的第二位加上5,如0.145,则加上0.0005,此时成为0.1455,再舍入时,就为0.15了! 因此四舍五入取两位小数时,只要先加上0.0001,然后用RoundTo或SimpleRoundTo即可。
Posted in 技术经验帖 | Also tagged | Leave a comment

【fastreport使用】fastreport中显示表格和打印空白表格

8月19日 【fastreport使用】fastreport中显示表格和打印空白表格 1、 使数据显示在表格中:在数据的Band中,选择每一个“text”,设置其上下左右的边框;然后把每个“Text”排整齐即可。 2、 在页末尾打印空白表格行:添加一个child band,同时在该band中设置跟数据band中相应的text;再添加一个footer band,设置其高度为0,同时为该footer band的onbeforePrint事件添加代码如下: while Engine.freespace > 60 do Engine.showband(Child1); 如图1: 图1 表格显示和打印空白表格
Posted in 技术经验帖 | Tagged | Leave a comment
  • Self-introduction

    @Alipay,计算机专业。

    喜欢互联网,崇尚网络自由和开放,旗帜鲜明的反对妄图扼杀自由的行为。

    喜欢看电影,国产大片、科幻片和鬼片例外,以前比较偏好喜剧和港产警匪片,比如周星驰系列喜剧和银河映像出品的电影;看过无数好莱坞电影后,现在比较喜欢美国的独立小电影和法国风味的电影,诸如《杯酒人生》和《天使爱美丽》等。

    喜欢听的一些歌:魔岩三杰、汪峰、王菲的大部分,郑钧、许巍的一些,左小祖咒以及其它歌手的小部分。

    现在看书的时间比较少,其中大部分又花费在技术书籍上,以后坚持少上豆瓣,多看书。

    经常使用的网站或服务:Google以及它的很多服务、Twitter、虾米、豆瓣。