星期日, 5月 31, 2009

試用e管家的心得

總是習慣性的到了最後關頭才報稅,在上傳完資料後報稅程式提醒我可以上網訂閱一些政府部門的資訊!當有新資訊時會主動通知你(國家考試資訊、車牌資訊、停車費用通知、水費、電話費、職缺媒合...等),可以提供的資訊看起來有很多,就用嚐鮮的角度來試用看看。

網址為 : 我的貼身e管家 http://msg.nat.gov.tw/index.aspx

試用的心得如下
1.網頁資料與 http://easy-life.1111.com.tw/ 相同,且由ff3的狀態列資訊看來,大半的網頁也是由此網址提供,不知道註冊後的資料1111是否也會取得一份?
2.註冊還蠻方便的,有類似精靈的方式一步步完成
3.可以自行選提要提供的資訊,通過msn alter或email通知你
4.設定訂閱資訊的功能應有bug,己輸完的資料在點選"送出"時,己輸入的身份證號或車牌等資訊會部份不見,要重打重送好幾次才能完成
5.剛開始使用時,沒注意到第四點的"送出"(儲存功能),以為只要一直"新增一筆"資料庫即會寫入,離開網頁也沒提醒未儲存

看完網站內提供的功能是蠻多的,但心中有一個很大的疑慮,一則是試用心得第一點提到的事項,另一件事情就是安全。當註冊的提醒事項越多時,系統中儲存的個人資訊就越完整,例如你要提醒有新增的停車費那就要輸入車牌,要提醒電信費用就要輸入電話,萬一那天詐騙集團或有心人士取得這些資訊,那後果真是難以想像!

星期五, 5月 29, 2009

CodeGear 釋出 Delphi and C++Builder 2009 Update 4(DataBase Pack Update)

今天看到CODEGEAR同時釋出了UPDATE3跟UPDATE4(DB),看了一下FIXED的清單應是有包含CDS.LOCATE無法正確找到中文資料的問題!


但試了一下真的是很失望..因為問題依然存在! 照這樣子的速度不知道何時才能購買且升級到2009!

星期三, 5月 27, 2009

Fixed Delphi 2009 TClientDataSet locate method (filter) at widestring problem

I have fixed "Clientdataset can't locate TWideStringField" problem!

I find then problem at TExprParser! You solve the problem Step by Step .

  • Add a new class inheritance from TClienDataSet

  • override Locate Method!

function TBearClientDataSet.Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean;
begin
 DoBeforeScroll;
 Result := LocateRecord2(KeyFields, KeyValues, Options, True);
 if Result then
 begin
  Resync([rmExact, rmCenter]);
  DoAfterScroll;
 end;
end;

  • Add private LocateRecord2--Copy From LocateRecord and Change TExprParser to TExprParser2
  • Write TExprParser2

Some Code..

function TFilterExpr2.PutConstant(Node: PExprNode): Integer;
begin
 Result := 0;
 case Node^.FDataType of
  ftString, ftFixedChar, ftGuid: Result := PutConstAnsiStr(AnsiString(Node^.FData));
  ftWideString, ftFixedWideChar: Result := PutConstUnicodeStr(UnicodeString(Node^.FData));
..
end.


function TFilterExpr2.PutConstAnsiStr(const Value: AnsiString): Integer;
var
Str: AnsiString;
Buffer: array[0..255] of Byte;
begin
 if Length(Value) >= SizeOf(Buffer) then Str := Copy(Value, 1, SizeOf(Buffer) - 1)
 else Str := Value;
 FDataSet.Translate(PAnsiChar(Str), PAnsiChar(@Buffer), True);
 Result := PutConstNode(ftString, @Buffer, Length(Str) + 1);
end;

function TFilterExpr2.PutConstUnicodeStr(const Value: UnicodeString): Integer;
var buffer: array of word; Len : Integer;
begin
  Len := Length(Value);
 SetLength(buffer, Len + 1);
 buffer[0] := Len * 2;
 if Value <> '' then Move(Value[1], Buffer[1], Len*2);
 Result := PutConstNode(TFieldType(ftUnknown), @buffer[0], (Len+1)*2);
 SetNodeOp(Result, 0, $1007);
end;

星期三, 5月 20, 2009

ADO的Persist Security Info與MaxRecord

記錄最近遇到的二件事情
1.某段程式在xp上運行都正常.但在vista上使用到一半時會突然發生"資料庫"登入發生錯誤
2.程式中取出資料均只有1筆(改變DATASET的MaxRecord為0也沒作用)


發生的經過為
事件1.
追查後發現程式中有一段程式會將connection物件中斷再重連,而重連時並沒有再改變connectionstring的內容!在檢查原有的connectionstring時發現並沒有加上Persist Security Info的設定值,導致在vista環境下password在connect中斷後,會自動從連接字串中去除,將Persist Security Info設成ture再加入connectionstring即排除。
ado的環境下,當沒有指定此值預設應都為true,也就是本來應就會保留一些有關安全性的資訊!但不知道為什麼vista上的行為跟xp不同,也由此可證vista真的比較安全! 安全到搞死人啦!!

可以參考微軟msdn中ado.net中相關的說明

事件2.
程式莫名奇妙查詢後的資料均只有一筆,追查後原來是MaxRecord在執行過像 select top 1後,此值會被寫入1,導致後續的查詢只有一筆,試著在改變commandtext時也順便吧maxrecord設成0,那是否能改善上述的問題呢? 答案是否定的@@(在debug環境修改此值結果也是一樣),最後的解法為(dataset):CLOSE; MaxRecord = 0; Connection = nil; Connection = 原有的連結; 即排除問題!

星期五, 5月 15, 2009

Google Friend Connect 又可以用在自家的 Blogger (blogspot)上了

前陣子中斷了關聯,只能在BLOGGER中加入"追蹤者”,無法像早期申請的人員可以使用全功能的功能!

隨後出現了一堆文章教你怎麼暴力使用,或是借早期己經認證過的blog來驗證,但現在不用這麼麻煩了!

我原本也都沒有任何的驗證通過,但今天點開了friend connect時發覺很神奇的又連結回來了!可以在上頭直接直接產生對應blog的gadgets!順便在上方加入了一條功能列!

照片如下

Google Friend Connect

歡迎大家把我加為朋友 ^^

星期二, 5月 12, 2009

受不了Delphi 2009 的 TClientDataSet

在初接觸到程式設計時,那時對於Delphi 5的Midas架構覺得很驚奇,3-Tier、離線模式、Load Balance等功能,都讓我在中歷資策會學習期間,每一天,每一晚都過得很充實!當時的生活真的是累了就睡,起床就學,寫到這就想起好多美好時光,也要感謝很多老師,尤其是教Delphi的DoDo(miss 黃)、連sir,還有一位用課外自己時間教java的王Sir!

在出了社會接觸的幾個產品,多多少少都會用到CDS,尤其是拿來當一些資料的暫存特別好用,可以用資料庫的方式進行一些必要的操作。但一直以來都覺得它的速度實在不快,以往嚐試著用fastmm或是試著自行pack data等方式來改善,但成效總是有限!


在經歷近二年.NET的洗禮,最近又重新接觸MIDAS後,終於有了新的結果!首先以本機進行測試,從PROVIDER餵資料給CDS,這段時間花了9成五以上的時間,有了這樣子的體認,即可以有個初步的方向,即丟掉笨重的data結構。在重新檢視了專案中CDS的用法,發覺有大半的程式只是用來捉取資料(查詢,觀看)取回來的資料並不需要進行編修後再更新,也就是不用保有原cds的資料結構,只要想辦法手動"序列化(serialization)"這段不需要編修的Data資料,讓他到CLINET時可以正確還原到能夠檢視即可!經由這樣子的調整與改變,在有較大量資料的查詢下,速度至少快了將近一半!


寫到好像問題都解決了,沒有什麼受不了的!但試用了d2009後,又發覺cds二個問題

  1. Locate中文會不正常
  2. aggregates中 使用像 min(field1) 此時若field1是widestring會不正常.但string是正常的
說起來這二點應都是改成unicode後才改壞的,爬了一下文發覺也有蠻多人反應這樣子的問題! 而在 ktop上看到一則很久前的帖子發覺或許這個問題己經存在很久.只是之前都沒遇過而己!真希望update4(or 10)能快出來,此二點就先不管了,日後需要正面衝突使用時再來傷腦子了