日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

數(shù)據(jù)庫綜合開發(fā)實(shí)戰(zhàn)

數(shù)據(jù)庫綜合開發(fā)實(shí)戰(zhàn)

更新時(shí)間:2021-11-16 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

馬磊、張萬里  

一套原來在Access上開發(fā)的桌面系統(tǒng),網(wǎng)頁調(diào)閱使用ASP編程,數(shù)據(jù)維護(hù)系統(tǒng)使用C++Builder編程。由于Access是一個(gè)桌面的共享型數(shù)據(jù)庫,所以在通用性和網(wǎng)絡(luò)開發(fā)方面都存在一些問題。因此,需要將該系統(tǒng)移植到服務(wù)器型的數(shù)據(jù)庫上。使系統(tǒng)既可以通過桌面軟件維護(hù)數(shù)據(jù),又可以有大量用戶通過網(wǎng)頁調(diào)看數(shù)據(jù)(結(jié)果)。
系統(tǒng)初始軟件為:Windows98第二版、Access97、C++Builder4.0、C++Builder5.0、MDAC(Microsoft Data Access Component 2.6中文版)。
一、移植到Oracle的嘗試
在機(jī)器上安裝Oracle 7.3桌面版,由于使用不熟練,所以選擇默認(rèn)安裝,除選擇語言Simplified Chinese外,其他都選擇默認(rèn),一路裝下去,沒有問題,重新啟動(dòng)系統(tǒng)。運(yùn)行Net Easy Config,配置需要的數(shù)據(jù)庫別名,然后用SQL Net連接試驗(yàn),用戶名輸入system,密碼輸入manager,連接服務(wù)器注意,不要輸入服務(wù)器的地址,而是輸入剛才建立的別名,進(jìn)去了。Ok!
此時(shí)開始測(cè)試ODBC,建立ODBC數(shù)據(jù)源。此時(shí),ODBC中有兩個(gè)有關(guān)Oracle的驅(qū)動(dòng),一個(gè)是Microsoft ODBC for Oracle,另一個(gè)是Oracle 7.3,這是該公司自己開發(fā)的驅(qū)動(dòng)。可是怎么選擇驅(qū)動(dòng)程序都不行,不是提示Oracle的驅(qū)動(dòng)沒有安裝,就是說某個(gè)DLL文件找不到。真是說不行,就不行,行也不行。
多次試驗(yàn)均無效。。。。
檢查AUTOEXEC.BAT文件,其中有ORACLE的路徑。那末,問題會(huì)在什么地方呢?本著懷疑一切的態(tài)度,在MSDOS方式下隨手輸入了一個(gè)PATH命令,奇怪,里面居然沒有ORACLE的路徑!打開AUTOEXEC.BAT文件一琢磨,路徑是不是太長?把路徑中的其他目錄全都注釋掉,重啟系統(tǒng),嘿!數(shù)據(jù)源可以建立了,而且兩個(gè)驅(qū)動(dòng)程序哪個(gè)都能夠工作。原來由于系統(tǒng)中安裝了C++Builder的兩個(gè)版本,而該軟件的目錄又特別深,造成PATH環(huán)境變量的溢出,而在WINDOWS環(huán)境下啟動(dòng)時(shí)的提示我們看不到,所以沒有發(fā)現(xiàn)這個(gè)問題。現(xiàn)在知道了,重新調(diào)整一下AUTOEXEC.BAT文件,保留一個(gè)C++Builder的路徑。以后得記住安裝C++Builder時(shí)最好自己指定一個(gè)目錄,這樣可以縮短路徑。這可是說行就行,不行也行。
經(jīng)過對(duì)Oracle的測(cè)試,發(fā)現(xiàn)將Access數(shù)據(jù)庫直接移植到Oracle數(shù)據(jù)庫中時(shí),對(duì)文本字段(TEXT,MEMO)的遷移總有問題,且該系統(tǒng)使用、安裝過于復(fù)雜,對(duì)機(jī)器配置的要求也太高,而該系統(tǒng)需要安裝的用戶較多,且使用者水平參差不齊,所以決定改用現(xiàn)在在自由軟件界比較流行的免費(fèi)數(shù)據(jù)庫系統(tǒng)MySQL。
二、移植到MySQL的經(jīng)歷
1.該系統(tǒng)的安裝比較簡單,若認(rèn)為自己沒有能力安裝該軟件的話,還可以從網(wǎng)絡(luò)上下載一個(gè)叫PHPTriad for windows的軟件,該軟件安裝時(shí)沒有任何選項(xiàng),自動(dòng)安裝好MySQL。(實(shí)際上,該軟件同時(shí)還安裝好了APACHE服務(wù)器、PHP語言解釋器,這正好符合將來把ASP的網(wǎng)頁換到PHP上去;另外,該軟件還同時(shí)安裝配置好了一個(gè)網(wǎng)頁數(shù)據(jù)庫維護(hù)工具PHPMyAdmin,PHPMyAdmin對(duì)于SQL語言不算熟的人來說管理數(shù)據(jù)庫極其方便。)
2.再安裝MYODBC(即ODBC for MySQL,我的是2.5版本),注意下載該軟件時(shí),要分清95版還是NT版的。安裝也很簡單,一路OK。好了,建立數(shù)據(jù)源work,填好IP地址,數(shù)據(jù)庫名填mymember(這時(shí)系統(tǒng)提供的數(shù)據(jù)庫),進(jìn)行測(cè)試,不行?改用系統(tǒng)自動(dòng)安裝的sample-mysql數(shù)據(jù)源連接,鏈上了。仔細(xì)檢查配置,沒有錯(cuò)誤,為什么系統(tǒng)自己做的數(shù)據(jù)源可以用,我做的就不行呢?把自己建立的刪掉,把sample-mysql改名為work,再連接,嘿嘿,不行了!哈哈,原來就出在名字上,在work后面加上-mysql,再連接,好了,原來myodbc要求它的數(shù)據(jù)源名稱必須以mysql結(jié)尾!解決了數(shù)據(jù)源,下面開始移植原來的Access數(shù)據(jù)庫。
移植工作比較簡單,打開Access數(shù)據(jù)庫,選中第一張表,從File菜單中選擇“另存為/導(dǎo)出”,選擇“另存為一個(gè)外部文件或數(shù)據(jù)庫”,選確定,在彈出的對(duì)話框中的“保存類型”下拉選單中選擇“ODBC數(shù)據(jù)庫”,又彈出一個(gè)“導(dǎo)出”的對(duì)話框,如果打算給該數(shù)據(jù)表改名的話,現(xiàn)在可以輸入新的名字,然后選擇確定,在彈出的“選擇數(shù)據(jù)源”對(duì)話框中點(diǎn)Machine Data Source(機(jī)器數(shù)據(jù)源),找到自己建立的work-MySQL數(shù)據(jù)源,按確定。此時(shí)會(huì)回到Access數(shù)據(jù)庫,如果數(shù)據(jù)表很大的話,狀態(tài)欄中會(huì)有一個(gè)導(dǎo)出的進(jìn)度,否則,導(dǎo)出已經(jīng)完成。
導(dǎo)出成功后,通過PHPMYADMIN檢查導(dǎo)出的數(shù)據(jù)庫,結(jié)構(gòu)、內(nèi)容都正常。需要注意的是,如果數(shù)據(jù)表中用到了Access提供的ID(自動(dòng)增量)字段的話,需要手工在目標(biāo)數(shù)據(jù)庫中修改對(duì)應(yīng)字段的屬性(這在PHPMyAdmin中很容易實(shí)現(xiàn),找到該字段后點(diǎn)“改變”,在該字段的屬性最后一項(xiàng)“額外”的下拉選單中選擇auto_increment,然后保存。PHPMyAdmin的界面是英文的?其實(shí)只要在安裝有PHPMyAdmin的目錄Apache\Htdocs\PHPMyAdmin中找到config.inc.php文件,搜索require,把引號(hào)中的“english.inc.php”改成“chinese_gb.inc.php”,再去調(diào)用網(wǎng)頁中的PHPMyAdmin,嘻嘻,是不是變成中文了?其實(shí)chinese_gb.inc.php是一個(gè)文件名,就在該目錄下,你還可以把界面變成BIG5碼呢)。
3.終于把移植的工作做完了,下面開始用C++BUILDER編程。對(duì)數(shù)據(jù)庫使用ADO來訪問。步驟如下:在ADO控件標(biāo)簽中選ADOTable,在主窗口上先放置一個(gè)ADOTable1,然后點(diǎn)擊左邊對(duì)象觀察器(Object Inspector)中ConnectionString右邊的“…”圖標(biāo),選“Use Connection String”,點(diǎn)“Build”,在“Provider”標(biāo)簽中選擇“Microsoft OLE DB Provider for ODBC Drivers”,點(diǎn)“Next>>”按鈕,在“specify the source of data”中選“use data source name”,從下拉選單中選擇數(shù)據(jù)源work-MySQL,點(diǎn)“Test Connection”,顯示連接成功,確定,OK,返回,在對(duì)象觀察器中Table Name屬性點(diǎn)下拉選單,選擇需要的數(shù)據(jù)表。再從Data Access控件標(biāo)簽中選DataSource,在主窗口上放置一個(gè)DataSource1,在對(duì)象觀察器中DataSet屬性點(diǎn)下拉選單,選擇ADOTable1,下面進(jìn)行界面輸出的布局,選擇“Data Controls”控件標(biāo)簽中的DBEdit根據(jù)需要放置,并把DataSource屬性設(shè)置為DataSource1 ,DataField屬性設(shè)置為所需要的字段名。如此放置幾個(gè)字段,最后從“Data Controls”控件標(biāo)簽中選“DBNavigator”放在窗口上。再把ADOTable1的Active屬性改為true,咦,怎么有的字段顯示成(MEMO),先不管他,運(yùn)行程序,輸入一些內(nèi)容,點(diǎn)擊提交,怎么沒了?有的字段還縮短了,多試幾次,發(fā)現(xiàn)新輸入的內(nèi)容不能超過原來的長度,那么原來是空的字段就永遠(yuǎn)沒法輸入內(nèi)容了。這是怎么回事?這種用法肯定沒有問題,以前在Access數(shù)據(jù)庫上就是這么用的。那么,就是MySQL的ODBC有問題,退出C++Builder,打開數(shù)據(jù)源的選項(xiàng)仔細(xì)分析,其中第一項(xiàng)vaaaa很象。把它選中,確定,重新運(yùn)行C++Builder,再運(yùn)行程序,一切OK。原來MySQL這樣的自由軟件,其ODBC選項(xiàng)很多,是為了適應(yīng)各方面需要,不象微軟或其他的數(shù)據(jù)庫那樣默認(rèn)值就可以用。這個(gè)選項(xiàng)可能是為了優(yōu)化一些網(wǎng)絡(luò)上的應(yīng)用,而把數(shù)據(jù)庫字段的默認(rèn)值總是假設(shè)為最小狀態(tài),從而造成這個(gè)問題。這可能也是自由軟件的一個(gè)小缺點(diǎn)吧。
三、ASP訪問MySQL數(shù)據(jù)庫的問題
原來的主頁中大量使用了ASP訪問數(shù)據(jù)庫,其中典型的用法是:
dim LK_CONN
set LK_CONN=server.createobject("ADODB.CONNECTION")
LK_CONN.open "onduty_mysql","root",""
‘以上建立數(shù)據(jù)庫的連接
dim RS_NEWS
set RS_NEWS = server.createobject("adodb.recordset")
sql = "SELECT * FROM NewsPic"
RS_NEWS.open sql,LK_CONN,1,1
‘以上建立對(duì)表的訪問
‘下面顯示內(nèi)容,為表達(dá)簡單,沒有格式,引號(hào)中為字段名
=RS_NEWS("Extract")
=RS_NEWS("Pic")
這一段代碼沒有問題,實(shí)現(xiàn)了平滑過渡;但是有個(gè)別地方,有寫入操作,數(shù)據(jù)不能正常讀出。該段代碼如下:
dim RS_COUNT
set RS_COUNT = server.createobject("adodb.recordset")
RS_COUNT.open "SELECT * FROM count",LK_CONN,3,3
'訪問計(jì)數(shù)器
dim Zcount
Zcount=RS_COUNT("Count")
Zcount = Zcount + 1
RS_COUNT("Count").Value=Zcount
RS_COUNT.Update
RS_COUNT.Close
開始懷疑這一段后面有寫入操作,所以不能正確執(zhí)行,但經(jīng)過仔細(xì)比較和測(cè)試,發(fā)現(xiàn)問題不在是否寫入上。這一段的代碼主要是用了ASP訪問Access數(shù)據(jù)庫時(shí)直接填入數(shù)據(jù)庫名的方法,而沒有使用SQL語句,我們把打開數(shù)據(jù)庫的地方改為“select * from 表名”,程序遂工作正常。
結(jié)論:編程時(shí)應(yīng)該盡量使用通用性好的方法,這樣對(duì)于系統(tǒng)的通用性、可移植性來說,還是很重要的。
四、ODBC的問題
在C++Builder中有的地方要用到SQL查詢,因此,有一段程序使用的是ADOQuery控件,本來這種用法在其他機(jī)器上用過,沒有問題,可是在這里卻不行。具體情況如下:放置一個(gè)ADOQuery,ConnectionString屬性、TableName屬性和前面的ADOTable屬性設(shè)置一樣,Active屬性保持false,再添加一個(gè)DataSource控件和幾個(gè)DBText控件,設(shè)置同前。然后在FormCreate(表單構(gòu)造函數(shù))中添加如下代碼:
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from Names order by ID");
ADOQuery1->Active=true;
while (!ADOQuery1->Eof)
{
ComboBox1->Items->Add(ADOQuery1->FieldByName("Name")->AsString);
ADOQuery1->Next();
}
//后一段
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from Dutys order by ID");
ADOQuery1->Active=true;
while (!ADOQuery1->Eof)
{
ComboBox2->Items->Add(ADOQuery1->FieldByName("Duty")->AsString);
ADOQuery1->Next();
}
就這么一段代碼,在該機(jī)器上怎么都不能運(yùn)行,系統(tǒng)總是提示“BOF或EOF中有一個(gè)為真。。。。”的錯(cuò)誤,將注釋后面的一段刪掉,系統(tǒng)可以運(yùn)行,但退出程序時(shí)出現(xiàn)非法錯(cuò)誤,說明是帶故障運(yùn)行。反復(fù)查看找不出程序的明顯錯(cuò)誤,把程序拿到其他機(jī)器上可以通過,兩個(gè)機(jī)器的最主要差別就是ODBC的版本不同。
于是想將ODBC降為2.5英文版,找到MDAC2.5版安裝了幾次都不行,只好手工刪除了,在WINDOWS目錄中搜索出所有前綴為ODBC的文件,然后刪除program files\common files中的system目錄,再重新安裝MDAC(Microsoft Data Access Component 2.5英文版),再運(yùn)行該程序,一切正常。
結(jié)論:不知道是MDAC2.6版本的問題,還是因?yàn)樗侵形陌娴膯栴},總之,造成系統(tǒng)的兼容性不是很好,建議大家在編程時(shí)也應(yīng)該盡量使用已經(jīng)熟悉的環(huán)境,而不要總是去嘗試太新的東東。
當(dāng)然,如果是我這一段代碼有問題,還希望有高手能出來指導(dǎo)。
以上是我們?cè)谝淮螖?shù)據(jù)庫系統(tǒng)的移植開發(fā)過程中出現(xiàn)問題和解決方法的真實(shí)記錄,雖然問題都很小,但是讓我們?cè)陂_發(fā)過程中走了不少彎路,所以把它記錄下來,供大家參考,希望對(duì)朋友們的開發(fā)有所幫助。其中的問題也希望有朋友能夠指出更好的解決辦法。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 99色视频| 久草在线免费资源站 | 久草最新| 日本肉肉视频免费观看 | 欧美精品1区| 免费香蕉依人在线视频久 | 99热国产这里只有精品99 | 国产蜜汁tv福利在线 | 黄视频网站免费观看 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美在线a乱码 | 亚洲最大在线 | 日日摸夜夜添夜夜添毛片 | 天天干夜夜做 | 国产亚洲精品久久久极品美女 | 中文天堂网 | 美女黄网 | 国产三级国产精品国产国在线观看 | 亚洲欧美一区二区三区在线 | 久青草国产高清在线视频 | 国产在线91| 韩国精品一区视频在线播放 | 成人区在线观看免费视频 | 免费视频网站在线观看黄 | 最新欧美精品 | 欧美不卡精品中文字幕日韩 | 一区二区三区高清 | 日韩欧美福利 | 天天精品视频天天躁 | 亚洲一区高清 | 久久se精品一区二区影院 | a天堂中文在线 | 欧美日韩在线一区二区三区 | 国产精品永久在线 | 人人看人人想人人爽 | 天天干天天操天天干 | 日韩久久精品视频 | 欧美特级毛片a够爽 | 日本在线观看网址 | 99国产精品热久久久久久夜夜嗨 | 免费国产99久久久香蕉 | jizz 日本亚洲 |