2011年7月22日 星期五

關於用FTP當EDI通訊工具時的注意事項

1. 交換檔案備份, 不論收或是送, 在檔案交換的時候一定要留一個備份檔, 尤其當FTP主機端是在我們掌控的時候一定要要求產生或接收後把檔案放到\BAK 路徑下, 由於FTP 在大量檔案堆在同一路徑時會造成反應很慢的問題, 所以備份檔案最好能按年月放到特定資料夾下, 這樣在EDI測試的過程或是後續追查問題的時後對雙方而言都有很大的方便性


2. 因為FTP上檔案搬來搬去會看不出來檔案產生的時間, FTP檔名在制定時最好加入時間註記, 例如 OE_OEHKS11070735_20110707153618.xml


3. FTP 檔案傳送過程有可能會和對方接收讀取檔案時間交會的話, 要注意避免讀到不完全檔案的問題, 由於檔案上傳時, 一旦開始上傳,主機端就會產生檔案, 這時剛好主機端開始接收檔案時就會讀取到空檔 .這種問題兩個簡單的解決方案, 一是錯開讀取與上傳的時間, 如果上傳時間為不特定的話, 就要採取另一個方案...產生ack 檔 , 也就是讀取指示檔
例如
OE_OEHKS11070735_20110707153618.txt 45k
OE_OEHKS11070735_20110707153618.ack 0k
這種ack檔放個空檔就可以, 對讀取檔案的程式而言, 看到ack 檔才表示這個檔案已經傳送完成可以讀取

這問題一定要注意, 不然就等於一個不定時炸彈, 不知何時就會跑出奇怪的錯誤

2011年7月21日 星期四

程式結合excel 樞紐分析

要利用Excel 樞紐分析及樞紐分析圖的工具來接到數據可以用Excel 外接資料功能, 可以建立一個excel 樞紐分析, 但是資料來源是外部資料, 外部資料可以有機種模式 txt , excel , DB , XML ...等, excel 引用時有許多的選項, 但是我沒試出txt , xml 要如何使用因為不知怎樣的格式可以符合, 而且我希望可以直接利用cxGrid 元件匯出功能,就直接接到excel 報表, 所以採用外部資料是另一個excel 檔案的方式, 將來或許可以測試轉出為資料庫(access)的方式,這也許也是個不錯的選擇

外部資料為excel 具體方式如下, 先建立一個要分析資料用的excel A 當做資料來源, 然後建立另外一個excel B 做樞紐分析圖表, 只不過B 的資料來源是引用A, 再來的部分就比較簡單了, 利用程式把要被分析的資料匯出成A , 然後程式直接呼叫excel B 開啟就可以看到樞紐分析圖表了

沒錯,說起來挺快的, 不過這中間還有幾個問題要處理

首先, 當 B 被開啟時並不會刷新從A讀取的資料, 而是顯示最後一次使用的資料, 所以需要一個刷新資料的方式, 很顯然需要在excel 開啟的同時去執行"重新整理"這個按鈕, 這裡我想到的解決方式是用巨集去執行"重新整理"這個按鈕, 但是巨集如何在開啟時更新呢? 很簡單,只要把巨集命名為Auto_Open, 這個巨集便會在開啟時自動執行.

其次, 解決了excel B 的問題後, 還有A的問題, 由於A的資料室是每次都要重新匯出的, 匯出最快就是把A 砍掉在重新匯出另一個A, 但是由於B裡面引用資料路徑是固定寫在excel B 裡面的, 所以檔A的名稱和路徑是不能隨意變的, 這會導致同一個時間只能有一個A 存在, 也就是不能同時開啟兩個圖表B, 這目前並沒測出好的解決方式, 只能暫時這樣處理

最後,版本和自動巨集EXCEL安全性問題, 由於自動巨集需要安全性確認, 所以第一次執行時會跳出詢問訊息, 這是excel 安全管理, 這也是沒辦法的事

關於這套做法好處是, 用excel 樞紐分析當圖表工具是成本最低的, 不但很多人會製作和使用, 製作的速度也挺快的,基本上幾分鐘就能做出一個分析圖表, 隨著excel 版本不斷更新,樞紐分析圖表工具也越來越人性化, 功能越來越強大, 能夠借這工具力氣來做資料分析而不用自己去開發圖表, 感覺實在太好了

2011年7月11日 星期一

oracle date format

SYSDATE
2 --◎ 可得到目前系統的時間
3
4 ex.
5 select sysdate from dual;
6
7 sysdate
8 ----------
9 20-SEP-07
10
11 常用之日期格式
12
13 日期格式 說明
14 ------------------------------------------------------------------------
15 YYYY/MM/DD -- 年/月/日
16 YYYY -- 年(4位)
17 YYY -- 年(3位)
18 YY -- 年(2位)
19 MM -- 月份
20 DD -- 日期
21 D -- 星期
22 -- 星期日 = 1 星期一 = 2 星期二 = 3
23 -- 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7
24
25 DDD -- 一年之第幾天
26 WW -- 一年之第幾週
27 W -- 一月之第幾週
28 YYYY/MM/DD HH24:MI:SS -- 年/月/日 時(24小時制):分:秒
29 YYYY/MM/DD HH:MI:SS -- 年/月/日 時(非24小時制):分:秒
30 J -- Julian day,Bc 4712/01/01 為1
31 RR/MM/DD -- 公元2000問題
32             -- 00-49 = 下世紀;50-99 = 本世紀
33 ex.
34 select to_char(sysdate,'YYYY/MM/DD') FROM DUAL; -- 2007/09/20
35 select to_char(sysdate,'YYYY') FROM DUAL; -- 2007
36 select to_char(sysdate,'YYY') FROM DUAL; -- 007
37 select to_char(sysdate,'YY') FROM DUAL; -- 07
38 select to_char(sysdate,'MM') FROM DUAL; -- 09
39 select to_char(sysdate,'DD') FROM DUAL; -- 20
40 select to_char(sysdate,'D') FROM DUAL; -- 5
41 select to_char(sysdate,'DDD') FROM DUAL; -- 263
42 select to_char(sysdate,'WW') FROM DUAL; -- 38
43 select to_char(sysdate,'W') FROM DUAL; -- 3
44 select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') FROM DUAL; -- 2007/09/20 15:24:13
45 select to_char(sysdate,'YYYY/MM/DD HH:MI:SS') FROM DUAL; -- 2007/09/20 03:25:23
46 select to_char(sysdate,'J') FROM DUAL; -- 2454364
47 select to_char(sysdate,'RR/MM/DD') FROM DUAL; -- 07/09/20

2011年5月27日 星期五

如何變更 MSN 密碼

1. 先連線到 Windows Life --> http://home.live.com/

2. 點自己帳號

3. 變更密碼


2011年5月20日 星期五

How do I determine if a table has a primary key

Question: How do I determine if a table has a primary key and if it has one, how do I determine what columns are in the primary key?



Answer: You can retrieve primary key information with the following SQL statement:

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;

If you knew the table name that you were looking for, you could modify the SQL as follows:

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name = 'TABLE_NAME'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;

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下。
问题就会解决了。