由Access移到MSSQL或PG,請前輩提供經驗與意見 |
答題得分者是:kevin2004
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
Delphi不像Java,Delphi把什麼都處理的好好的,而Java是什麼都要自己來。早期用
JSP/Servlet/JDBC開發系統的時候,真是痛苦的要命。可是像Web這種不知是幾 層的環境,又沒有像Delphi這麼體貼的工具,那還真不是一個痛字可以說的淨的 。那時作WebCase,而客戶後端五花八門的DB更是整死人。做的要吐血了,客戶 還嫌的要死。碰到移殖後端DB更是大工程,要想交差,幾乎是作夢比較快。 後來OR-Mapping越來越強手了,OO及Designed Pattern越普及了。這些問題全被 FremeWork作掉了,你只要在AP某個地方改個DB-方言設定為Oracle或PostgreSQL ,就全部OK了。你根本不用管後端的資料庫是那個東東。真是美夢成真。 不過,如果你還是區網、緊密聯接、要下SQL命令的Delphi,認命吧。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2008-07-10 16:03:52, 註解 無‧
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
我在課餘寫了一段時間的Delphi,系統層次稍稍可以,正試者換後端的
資料庫,還請多多指教 ===================引 用 kevin2004 文 章=================== 大哉問。很難回答。 可能就像PD兄講的,可能你要自己多花點功夫爬文才行。 純是聊聊。小弟不曉得你玩這些多久了,不知道你的系統的架構是 那種的。這是蠻關鍵的。如果只是玩玩的,而不是兩層或多層架構 ,也沒有交易管理等機制,那還是讓它停在Access上吧。如果當初 就花了大功夫,那還可聊聊。這時要扯一些,還好扯的開。不過, 也實在是上天下海,如果能限個範圍,可能也比較好聊。 您覺得如何? |
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
什麼是OR-Mapping,小妹對Java不熟,會有如此好的工具嗎,可以不用管後端
資料庫的種類 我的問題是如何把一個在Access跑的好好的系統,移到MSSQL或其他資料庫上 ,還要可以切換回原先的Access的環境 謝謝 ===================引 用 kevin2004 文 章=================== Delphi不像Java,Delphi把什麼都處理的好好的,而Java是什麼都要自己來。早期用 JSP/Servlet/JDBC開發系統的時候,真是痛苦的要命。可是像Web這種不知是幾 層的環境,又沒有像Delphi這麼體貼的工具,那還真不是一個痛字可以說的淨的 。那時作WebCase,而客戶後端五花八門的DB更是整死人。做的要吐血了,客戶 還嫌的要死。碰到移殖後端DB更是大工程,要想交差,幾乎是作夢比較快。 後來OR-Mapping越來越強手了,OO及Designed Pattern越普及了。這些問題全被 FremeWork作掉了,你只要在AP某個地方改個DB-方言設定為Oracle或PostgreSQL ,就全部OK了。你根本不用管後端的資料庫是那個東東。真是美夢成真。 不過,如果你還是區網、緊密聯接、要下SQL命令的Delphi,認命吧。 |
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
這我也有一個類似的經驗。我們公司的系統通常併行於Oracle/MSSQL/Postgresql/Access,
尤其是Postgresql與Access時,因pg需要有IP才能接的上,在出外對客戶用 筆電作Demo時就必需切換成Access。不過,我們的技巧不是改ADO聯接字串。 ===================引 用 jackiemi2_seed 文 章=================== 在登入系統的主程式上面加一個選項, 依所選的選項,改變連線字串,讓使用者可以選擇要登入access或ms sql 這樣應可以吧...
------
Kevin |
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
小妹是學生啦,因為我有個姐姐在我高中時就教我用Delphi,所以也有幾年寫Delphi的經驗罷了
請問,如何讓使用者自行下令切換資料庫為Access或postgresql ===================引 用 kevin2004 文 章=================== 這我也有一個類似的經驗。我們公司的系統通常併行於Oracle/MSSQL/Postgresql/Access, 尤其是Postgresql與Access時,因pg需要有IP才能接的上,在出外對客戶用 筆電作Demo時就必需切換成Access。不過,我們的技巧不是改ADO聯接字串。 |
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
目前想到二個方法
1.連線字串使用odbc,更換資料庫時,修改odbc內容 2.使用.ini檔,連線時捉ini檔的內容 ===================引 用 kevin2004 文 章=================== 這我也有一個類似的經驗。我們公司的系統通常併行於Oracle/MSSQL/Postgresql/Access, 尤其是Postgresql與Access時,因pg需要有IP才能接的上,在出外對客戶用 筆電作Demo時就必需切換成Access。不過,我們的技巧不是改ADO聯接字串。 ===================引 用 jackiemi2_seed 文 章=================== 在登入系統的主程式上面加一個選項, 依所選的選項,改變連線字串,讓使用者可以選擇要登入access或ms sql 這樣應可以吧...
------
OS : Win 7 pro Program : Delphi 7 DataBase : Ms Sql 2008 |
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
謝謝前輩熱心回覆,小妹還有一些疑問,
Delphi-ADO下對postgresql是透過ODBC,如要聯postgresql勢必要用ODBC,但 如果要user去改odbc設定可能有點困難,而且自動化程度不高,這要如何克服? 謝謝。 ===================引 用 jackiemi2_seed 文 章=================== 目前想到二個方法 1.連線字串使用odbc,更換資料庫時,修改odbc內容 2.使用.ini檔,連線時捉ini檔的內容 |
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
新增一個ini檔
連線時固定捉[odbc] 想連ms sql時,把[odbc_mssql]改成[odbc] 想連sybase時,把[odbc_sybase]改成[odbc] 由db_kind的值,就可以知道目前使用的是什麼資料庫,連上一個問題都解決了 ini檔內容 [odbc_mssql] db_kind=1 odbc_name=odbc_sybase [odbc_sybase] db_kind=2 odbc_name=odbc_sybase [odbc_access] db_kind=3 odbc_name=odbc_access 程式連線字串,只要在data source部份用變數去捉ini設定的值就好了 var myini:Tinifile; db_name:string; db_kind:string; begin //捉ini檔要先uses inifiles myini:=Tinifile.Create('c:\db.ini'); db_name:=myini.ReadString('odbc','odbc_name',''); db_kind:=myini.ReadString('odbc','db_kind',''); adoconnection1.ConnectionString:='Provider=MSDASQL.1;Password=xxx;Persist Security Info=True;xxx;Data Source=' db_name; 寫的有點亂,希望看得懂 ===================引 用 limary 文 章=================== 謝謝前輩熱心回覆,小妹還有一些疑問, Delphi-ADO下對postgresql是透過ODBC,如要聯postgresql勢必要用ODBC,但 如果要user去改odbc設定可能有點困難,而且自動化程度不高,這要如何克服? 謝謝。 ===================引 用 jackiemi2_seed 文 章=================== 目前想到二個方法 1.連線字串使用odbc,更換資料庫時,修改odbc內容 2.使用.ini檔,連線時捉ini檔的內容
------
OS : Win 7 pro Program : Delphi 7 DataBase : Ms Sql 2008
編輯記錄
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
雖然號稱SQL標準,但實際上這些不同資料庫的SQL都有不同。有時甚至連
我們在Delphi中下令的格式都不一樣,當初在將Paradox移殖到Access 及MSSQL及PG及Oracle及MySQL時就吃了不少苦頭。更別論同一個欄在 不同廠商的型別與限制就各有千秋。而Delphi是區網環境,及緊密聯接 ,沒有Java中的ORMapping產品的幫忙,非要我們自己來長SQL字串不可 。這在不同DB是要用不同SQL字串的,這實在是沒辦法的事。即使你把 各家DB特殊絕活全部放棄﹝這實在好痛苦,而且讓我們無 法壓榨用特別DB的客戶的銀子﹞,只嚴格限制只使用SQL92最最基 本的語法,那你也要面對不同格式等問題。你還是要因不同DB去長不同 的SQL字串。更何況有些客戶的錢真是多到不知該怎麼花,當然要用一些 花樣去榨他們的錢阿。 如何在AP中設定此產品實務環境是使用那個資料庫與那個客戶,以換接不同 的處理或長SQL字串,實在是我們這些用Delphi人永遠的痛。是宿命吧, 只有接受。 ===================引 用 pedro 文 章=================== Access/MSSQL/PG,不知道這三套是否能接受相同的select,update,insert,delete語法? 單就看access及ms-sql語法就有些微不相容
------
Kevin
編輯記錄
kevin2004 重新編輯於 2008-07-17 17:49:51, 註解 無‧
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
===================引 用 limary 文 章=================== ...不同資料庫所須的不同SQL....。可是要如何作個控制才好。我現在是放在我的 MainForm中作控制,自己想想這一定有問題,可是不知要如何作才好。 ===================引 用 limary 文 章=================== limary, 你在一個題目中,問了太多不同的題目,而且都是問超大超大的主題。 這不好,對以後我們要查索資料會造成很大的問題,及可能因只看了題 目就錯過了可能是找了好久的正確答案。你應該讓你的題名達意及限 縮你的題目範圍。 ------------------------------------------------------------------ 我先專就你的詢問AP對不同資料庫SQL控制提供個人看法。 1.你用MainForm放DB種類及客戶資料是不好的。甚至這些資料都不應該 放在Form中,要放應放在Unit中。因為它通常是控制用的,通常是不 應該有Visual元件。 2.這種敏感及關係AP生死的東西,當然沒人會用變數或全域變數的方式 來處理。最好放在物件中。 3.在團隊開發環境時,它應該是一個專人專責維護的物件,它應該是個 Singleton物件,非專責的同事只能讀取相關值,而不能改它。 4.設好了,再在各個需要作DB處理的段落再切到不同DB的長SQL字串或特 殊DB處理的不同碼了。
------
Kevin |
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
limary,你好。最近很忙,抱歉,今日才回。你這問題很不好回,可能原因是我自
己都學的不好的緣故。如果有講錯了,提示小弟一下。 有關Sungleton這些不是三言兩語可以說的盡,我可以稍稍介紹一下,但最好你自己 也找幾本書來看。 第一本當然是四人幫的DisignPattern,不過這本書初看會很吃力,甚至在你看了第 五遍第十遍,你還會無法貫通。好在類似的書,現在很多,有用Java作例碼的 ,也有C 例碼的,我建議你找Java例碼的。這些看看,再照四人幫的書,會有 助深入瞭解。但如果覺得四人幫的書看的頭痛,那暫時將之擱在一邊,也可以。 市面上還有一本是用Delphi講DesignPattern原理及相關實務的,寫的很不錯,書名 及作者我一下子記不起來,它的作者也是我們站裏及友站的版主。 ------------------------------------------------------------------ 望文生義,Singleton就指單體,意思就是同時間,只產生一個此物件的意思。這在 控制物件來說,當然Singleton是必要的,否則就天下大亂了。 Delphi與java不同,在Java中作Singleton控制很簡單,可是Delphi就有點困難了。 這你要看一下書,書上寫的很詳細。實作重點如下: 1.開個ControlObjectUnit,放你的控制物件的定義。這個物件很重要,要設計 好,很多東西要保護好。 2.在apFacadeUnit中以Func讓大家讀取這些公開資訊 3.apFacadeUnit讀控制資訊的函式自動執行保證是Singleton物件的Unit專有的 函式。而這些控制物件也是apFacadeUnit-implementation-var的私有物件。 // 或在apFacadeUnit-initialization先自動生成這些物件 4.記得在apFacadeUnit-finalization中清除這些物件 大略如上 --------------------------------------------------------------------- 一、建你的控制物件:用個unit將這些相關的重要物件定義集中到這裏,這是標準 的東西,小弟就略過了。 二、apFacadeUnit: 1.Interface要公開你的讀取控制物件重要值的函式 2.implementation-var要設此物件的變數 3.implementation設生成此singleton物件的函式。此函式指紋是否公開在 interface,沒關係。此函式碼很簡單,如下: begin if ControlObject = nil then begin try ControlObject := TControlObject.create ; except Application.Terminate ; end ; end ; Result := ControlObject ; end ; 4.initialization可以先生成此控制物件,如 initialization ........ if ControlObject = nil then // 或 if not Assigned(ControlObject) then begin try ControlObject := TControlObject.create ; except Application.Terminate ; end ; end ; 5.implementation私有的抓取或生成此物件的函式 function GetControlObject : TControlObject ; begin if ControlObject = nil then begin try ControlObject := TControlObject.create ; except Application.Terminate ; end ; end ; Result := ControlObject ; end ; 6.finalization中要砍這些控制物件,如 finalization ...... if ControlObject <> nil then begin FreeAndNil(ControlObject) ; end ; 就這樣啦,你試試看。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2008-07-20 09:43:41, 註解 無‧
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |