全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1383
推到 Plurk!
推到 Facebook!

BDP的分發問題

尚未結案
Lord Rabbit
一般會員


發表:3
回覆:25
積分:10
註冊:2003-10-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-16 23:17:32 IP:221.169.xxx.xxx 未訂閱
之前在開發一個產品時,發現BDP有個問題: connection string,在design time設定好,加入在執行時期自系統登錄或xml/ini設定檔讀取使用者設定connection string的code,把程式編譯好,加寫資料庫連線設定程式,一起包裝成分發用的安裝檔,然後...... 當使用者把分發用的安裝檔跑過,程式都安裝好了,資料庫連線設定好,程式一跑,程式卻丟exception了:它在InitializeComponents時,還是用我在design time給的connection string試著去連資料庫。InitializeComponents裡頭的東西都是IDE/designer生出來的,要我手動去改那邊的code來變更connection string是沒道理的;可是我不這麼做的話,又一定會碰到那個exception. 又如果我把data adapter的LiveData設為false,我所依賴的一些在design time讀到的資料庫表格欄位定義就全丟了;即使如此,只要我程式的使用者那邊沒有原始design time connection string指定的資料庫,程式還是照樣丟exception給我看。 個人認為這是一種很嚴重的設計缺失,因為對於100%電腦傻瓜來說,他的電腦環境內一定沒有資料庫的。我的安裝程式把MSDE安裝問題也都解決了,結果要用BDP開個連線去create database時卻因為上段那個問題碰壁了。 如果我是BDP的設計者,就會考慮讓BDP提供一個GetConnectionString的event,讓開發人員能夠攔截那個event來提供runtime決定的connection string。
chrischi
初階會員


發表:58
回覆:59
積分:28
註冊:2004-05-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-22 11:58:46 IP:61.218.xxx.xxx 未訂閱
引言: 之前在開發一個產品時,發現BDP有個問題: connection string,在design time設定好,加入在執行時期自系統登錄或xml/ini設定檔讀取使用者設定connection string的code,把程式編譯好,加寫資料庫連線設定程式,一起包裝成分發用的安裝檔,然後...... 當使用者把分發用的安裝檔跑過,程式都安裝好了,資料庫連線設定好,程式一跑,程式卻丟exception了:它在InitializeComponents時,還是用我在design time給的connection string試著去連資料庫。InitializeComponents裡頭的東西都是IDE/designer生出來的,要我手動去改那邊的code來變更connection string是沒道理的;可是我不這麼做的話,又一定會碰到那個exception. 又如果我把data adapter的LiveData設為false,我所依賴的一些在design time讀到的資料庫表格欄位定義就全丟了;即使如此,只要我程式的使用者那邊沒有原始design time connection string指定的資料庫,程式還是照樣丟exception給我看。 個人認為這是一種很嚴重的設計缺失,因為對於100%電腦傻瓜來說,他的電腦環境內一定沒有資料庫的。我的安裝程式把MSDE安裝問題也都解決了,結果要用BDP開個連線去create database時卻因為上段那個問題碰壁了。 如果我是BDP的設計者,就會考慮讓BDP提供一個GetConnectionString的event,讓開發人員能夠攔截那個event來提供runtime決定的connection string。
了解問題, 但不清楚您的程式架構, 您說會發生 exception, 但什訊息內容是什麼? 一般 connection string 都是固定的, 怎麼會用 "xml/ini設定檔讀取使用者設定" ? Chris
Lord Rabbit
一般會員


發表:3
回覆:25
積分:10
註冊:2003-10-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-22 14:15:20 IP:221.169.xxx.xxx 未訂閱
單獨執行時是這樣的錯誤窗: xxxxx.exe - Common Language Runtime偵錯服務 應用程式已經發生無法處理的例外狀況。 處理序識別碼=0x**** (****),執行緒識別碼=0x**** (****)。 在IDE內會看到元件初始化失敗。 至於connection string為何要動態讀取,我覺得這個問題問得很有意思。 作專案的話,會需要動態讀取connection string的機率大概接近沒有。 做產品就不是這樣了吧?考慮下面的設計: 1. 首先得確定使用者的環境有沒有指定的MSSQL server instance, 如果他沒有裝,他也不會裝,這個產品得替他裝一個MSDE instance, 不然這個產品就形同報廢了。 2. 也有的使用者已經裝好了MSSQL,可是他的電腦使用技巧也不高明, 怕你的產品毀了他本來的MSSQL,要求你另外裝一份MSDE instance。 這個MSDE instance一定沒法命名為MSSQLSERVER的。 你怎麼可能預先在產品設計時,知道他們要用哪個MSSQL/MSDE instance? 3. 又如果使用者有不特定多數個,分散在不同地方,而這個產品的使用 的資料庫資料會天天更新自外部來源更新,為了省去這群電腦白痴的 麻煩,他們要求使用一個中央管理的MSSQL instance,不在各自的電 腦上安裝一份MSDE。你怎麼可能預先在產品設計時,知道他們把資料 庫裝在哪邊? 4. InstallShield安裝檔裡頭也包好了MSDE,可是MSDE不提供merge module 啦,所以原始設計是在安裝好的程式第一次跑的時候,去偵測資料庫 連線找不找得到東西,是不是程式要找的那個DB instance,讓使用者 去選擇要不要用事先存在的MSSQL/MSDE instance,或者新裝一份我事 先指定好名字的MSDE。無論如何,使用者怎麼安裝,使用者怎麼選擇, 不是我事先就能在design time設計form、放入BDPConnection元件時 就知道的,使用者的環境十之八九與我的設計環境是不同的。 所以,有沒有必要在InitializeComponents裡頭就去動態讀取BDPConnection 的connection string?有必要,有絕對的必要。如果要我改用其他embedded database,那也不必依賴BDP了。 BDP相關的DataSet/DataAdapter/DataTable在InitializeComponents內會呼叫自己的BeginInit跟EndInit去做非同步的初始化,可是在BDPConnection找不到design time設的connection string指定的資料庫時,它們就直接從InitializeComponents裡頭丟元件初始化失敗的exception出來。這會讓InitializeComponents後頭其他資料庫無關元件的初始化都沒跑到。 BDP用起來是很方便,但是設計上考慮得顯然還不夠周詳。像這種初始化失敗的情形,完全沒留後路丟error event出來給event handler。有經驗的Delphi開發人員在遭遇這種錯誤後,會有自己的應對策略,避免那個CLR偵錯服務的窗子直接就秀在使用者的電腦上。沒經驗的Delphi開發人員,恐怕連自己的程式哪邊丟exception出來的都不清楚。 我真的希望Borland在增加250個行銷人員的同時,能多增加10個開發人員到Delphi team。如果不能增加10個開發人員到Delphi team幫忙fix bug,好歹也再多雇個4到5個同時做開發跟測試的人進Delphi team幫忙debug/test/fix bug吧。
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-22 18:34:43 IP:219.133.xxx.xxx 未訂閱
根据我的经验,别用在IDE里拖一个BdpConnection过来的这种方式。    最好是单独用一个unit,自己写Class,把BdpConnection写在里面。这样一切都可以自己控制。    Delphi2005有Bug,会让你拖到IDE里的BdpConnection突然不见了,等等。    我通常会这样写:    
TMyClass=class
private
  FBdpConnection:BdpConnection;
public
  procedure SetConnStr(value:string);
  function GetMyData:DataSet;
end;    
系統時間:2024-05-11 5:13:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!