2011年3月22日 星期二

CR9 該死的錯誤

Crystal report 在使用 Cross-tab 的時候, 裡面統計資料可以使用 % 方式做統計 ,但使用百分比方式做統計的時後, 萬一統計資料值加總= 0 會產生問題(沒任何錯誤訊息) 就直接卡在資料筆數都跑完後的白色畫面, 資料跑不出來,也結束不了 , 這是CRYSTAL REPORT 裏面本身的function 錯誤, 不是user 撰寫的fomula 錯誤, 所以不會有任何錯誤提示或警告....

解決方式 : 把被統計的資料比如說 Amount 則寫 IF (AMOUNT) = THEN 0.00001 ELSE AMOUNT ,用一個極小值代替避過 除 0公式問題

2011年3月1日 星期二

日期元件只顯示"星"的問題

使DevExpress日期控件正确显示

TdxGridDatePopup是DevExpress组件中日期显示的一个组件,DevExperss是一个很强大的控件,但在中文Windows中,日期控件会出现一个问

题:无论星期几都只是显示“星”字。

原因:
出现这个问题并不是DevExpress公司的程序代码有问题,只是不同的语言版本中,系统提供的日期函数中返回的格式或文字有所不同。
DevExpress公司是用ShortDayNames数组取得星期几的。
ShortDayNames: array[1..7] of string;
ShortDayNames是一个String数组,共有七个元素,分别对应星期一到七的字符串,在英文Windows中,它的值为[‘Sunday’,‘Monday’...],在中

文Windows中,它的值为[‘星期一‘,‘星期二‘...]。
DevExpress是想返回英文的第一个字母,如Sunday,返回的是S,所以她用了S := {$IFDEF

DELPHI3}WideString{$ENDIF}(ShortDayNames[J])[1]来取得,但在中文Windows中,就会返回”星“,问题就出在这里。

修改方法:
打开{Programe Files}Developer Express IncExpressInplaceEditorsDelphi 5SourcedxGrDate.pas,查找
S := {$IFDEF DELPHI3}WideString{$ENDIF}(ShortDayNames[J])[1],
然后修改为
S := {$IFDEF DELPHI3}WideString{$ENDIF}(ShortDayNames[J])[3]。
重新编译dxGrDate.pas(你可以把dxGrDate.pas加到一个Project中,重新编译你的Project,dxGrDate.pas就会重新编译),然后把相关的dxGrDate.Dcu复制到..\LIB下。
问题就会解决了。