好像武俠小說(shuō)里邊說(shuō)的:“你的招式忘了沒(méi)有?”,回答:“差不多忘了”,“忘了就好”。
這與數(shù)據(jù)庫(kù)編程有什么關(guān)系?關(guān)系可大了。同志們學(xué)過(guò)Pascal、BASIC、C(C++)沒(méi)有?如果沒(méi)有,F(xiàn)OXBASE、FOXPRO應(yīng)該學(xué)過(guò)吧?按以上這些語(yǔ)言編程,都是過(guò)程化的,說(shuō)白一點(diǎn)就是一個(gè)數(shù)據(jù)一個(gè)數(shù)據(jù)、一條記錄一條記錄去處理(FOXBASE、FOXPRO不完全這樣,但書(shū)上也經(jīng)常是這樣介紹的),當(dāng)初我接觸Access 97時(shí),一下子沒(méi)有了IF、FOR這些語(yǔ)句(指數(shù)據(jù)處理),都用SQL語(yǔ)句,真是找不到北了,好在我學(xué)SQL語(yǔ)言時(shí),也盡量忘掉這個(gè)IF、FOR,到我忘得差不多時(shí),功夫也進(jìn)了一大步,原來(lái)要編一大段程序,現(xiàn)在一兩條SQL語(yǔ)句搞定,就算用多幾條SQL語(yǔ)句,由于是在圖形界面下做,可視化操作,拉拉扯扯,再修改一下生成的SQL語(yǔ)句,也就省事多了。
由于ACCESS具備完整的SQL語(yǔ)言(FOXBASE沒(méi)有、FOXPRO不完整),我從ACCESS 97開(kāi)始用ACCESS編程,到現(xiàn)在為止,DAO、ADO很少用,加上最近從愛(ài)賽思上接觸的一些技術(shù),基本上不用DAO、ADO都可以了,可以從我的“未完工的庫(kù)存管理”中看出,只是在特殊情況下才偶爾用一下。(少用,但不是不用,還得學(xué),不要誤解)
如何學(xué)好數(shù)據(jù)庫(kù)編程?下面介紹一下本人的一些經(jīng)驗(yàn),僅供參考:
1.首先要把原來(lái)一個(gè)數(shù)據(jù)一個(gè)數(shù)據(jù)、一條記錄一條記錄的數(shù)據(jù)處理方式忘掉,越徹底越好。
現(xiàn)在用成批處理了。少用記錄集一條記錄一條記錄地處理,盡量用SQL語(yǔ)句。
2.學(xué)好關(guān)系數(shù)據(jù)庫(kù)的理論,尤其是規(guī)范化理論,表的設(shè)計(jì)一定要規(guī)范化,最起碼要規(guī)范化到第三范式。集合運(yùn)算(并、交、差)。關(guān)系運(yùn)算(選擇、投影、連接)。其中連接與規(guī)范化是緊密結(jié)合的。
3.運(yùn)用面向?qū)ο蟮募夹g(shù):面向?qū)ο蟮姆治鯫OA、面向?qū)ο蟮脑O(shè)計(jì)OOD、面向?qū)ο蟮木幊蘋(píng)OP,根據(jù)表的關(guān)系,用窗體和子窗體、報(bào)表和子報(bào)表,仿真面向?qū)ο?,這樣可以增加程序的可讀性和可維護(hù)性。(這是高級(jí)技術(shù),同志們不要輕視,做大項(xiàng)目你就知道有用了)
4.用查詢(xún)時(shí),通常一步做不出來(lái),可以分幾步做,本人通常是這么做的,從我給網(wǎng)友回復(fù)的例子中也可以看得出。為什么要這樣做?(1)有些是SQL語(yǔ)言的限制,沒(méi)辦法一步做出來(lái),逼的;(2)可以檢查每一步查詢(xún)的結(jié)果,容易調(diào)試;(3)增加可讀性,便于日后維護(hù)。
5.查詢(xún)的結(jié)果用窗體顯示或用報(bào)表打印,兩者的技術(shù)差不多。通常改變打開(kāi)窗體或報(bào)表的條件就可控制顯示或打印的記錄范圍。另外用查詢(xún)做數(shù)據(jù)源時(shí),動(dòng)態(tài)改變查詢(xún)中的SQL語(yǔ)句,比在查詢(xún)中引用窗體的控件要方便,因?yàn)镾QL語(yǔ)句生成是在VBA中,可以先存放在字符變量中,然后再更新查詢(xún)的SQL語(yǔ)句,這樣就可以用斷點(diǎn)來(lái)檢查變量值對(duì)不對(duì),如果在查詢(xún)中引用窗體的控件,尤其是包含IIF()函數(shù)時(shí),調(diào)試是很困難的。
6.開(kāi)發(fā)一個(gè)系統(tǒng),首先要解決技術(shù)問(wèn)題,即算法,用簡(jiǎn)單例子,把算法弄懂了,再詳細(xì)設(shè)計(jì),這一點(diǎn)從網(wǎng)友的提問(wèn)中可以看出,有很多人問(wèn)題表達(dá)不清楚,有的人其中夾了很多與算法無(wú)關(guān)的東西,尤其是很專(zhuān)業(yè)的東西,別人不容易看得明白,由于算法沒(méi)搞清楚,程序就無(wú)法編了。
7.不要使用過(guò)多的工具特性,使用過(guò)多的工具特性會(huì)使可讀性降低,可維護(hù)性差,要?jiǎng)e人幫忙時(shí)難以得到幫助,更要命的是可移植性差,從MDB到ADP就可以體會(huì)到了,所以在編程時(shí)可讀性很重要,可移植性更重要,你甘心自己的程序就固定在一個(gè)環(huán)境下運(yùn)行嗎?你甘心永遠(yuǎn)用一個(gè)工具搞開(kāi)發(fā)嗎?為了你的“錢(qián)途”,不要玩弄太多的技巧,當(dāng)然技術(shù)研究是另外一碼事。
這與數(shù)據(jù)庫(kù)編程有什么關(guān)系?關(guān)系可大了。同志們學(xué)過(guò)Pascal、BASIC、C(C++)沒(méi)有?如果沒(méi)有,F(xiàn)OXBASE、FOXPRO應(yīng)該學(xué)過(guò)吧?按以上這些語(yǔ)言編程,都是過(guò)程化的,說(shuō)白一點(diǎn)就是一個(gè)數(shù)據(jù)一個(gè)數(shù)據(jù)、一條記錄一條記錄去處理(FOXBASE、FOXPRO不完全這樣,但書(shū)上也經(jīng)常是這樣介紹的),當(dāng)初我接觸Access 97時(shí),一下子沒(méi)有了IF、FOR這些語(yǔ)句(指數(shù)據(jù)處理),都用SQL語(yǔ)句,真是找不到北了,好在我學(xué)SQL語(yǔ)言時(shí),也盡量忘掉這個(gè)IF、FOR,到我忘得差不多時(shí),功夫也進(jìn)了一大步,原來(lái)要編一大段程序,現(xiàn)在一兩條SQL語(yǔ)句搞定,就算用多幾條SQL語(yǔ)句,由于是在圖形界面下做,可視化操作,拉拉扯扯,再修改一下生成的SQL語(yǔ)句,也就省事多了。
由于ACCESS具備完整的SQL語(yǔ)言(FOXBASE沒(méi)有、FOXPRO不完整),我從ACCESS 97開(kāi)始用ACCESS編程,到現(xiàn)在為止,DAO、ADO很少用,加上最近從愛(ài)賽思上接觸的一些技術(shù),基本上不用DAO、ADO都可以了,可以從我的“未完工的庫(kù)存管理”中看出,只是在特殊情況下才偶爾用一下。(少用,但不是不用,還得學(xué),不要誤解)
如何學(xué)好數(shù)據(jù)庫(kù)編程?下面介紹一下本人的一些經(jīng)驗(yàn),僅供參考:
1.首先要把原來(lái)一個(gè)數(shù)據(jù)一個(gè)數(shù)據(jù)、一條記錄一條記錄的數(shù)據(jù)處理方式忘掉,越徹底越好。
現(xiàn)在用成批處理了。少用記錄集一條記錄一條記錄地處理,盡量用SQL語(yǔ)句。
2.學(xué)好關(guān)系數(shù)據(jù)庫(kù)的理論,尤其是規(guī)范化理論,表的設(shè)計(jì)一定要規(guī)范化,最起碼要規(guī)范化到第三范式。集合運(yùn)算(并、交、差)。關(guān)系運(yùn)算(選擇、投影、連接)。其中連接與規(guī)范化是緊密結(jié)合的。
3.運(yùn)用面向?qū)ο蟮募夹g(shù):面向?qū)ο蟮姆治鯫OA、面向?qū)ο蟮脑O(shè)計(jì)OOD、面向?qū)ο蟮木幊蘋(píng)OP,根據(jù)表的關(guān)系,用窗體和子窗體、報(bào)表和子報(bào)表,仿真面向?qū)ο?,這樣可以增加程序的可讀性和可維護(hù)性。(這是高級(jí)技術(shù),同志們不要輕視,做大項(xiàng)目你就知道有用了)
4.用查詢(xún)時(shí),通常一步做不出來(lái),可以分幾步做,本人通常是這么做的,從我給網(wǎng)友回復(fù)的例子中也可以看得出。為什么要這樣做?(1)有些是SQL語(yǔ)言的限制,沒(méi)辦法一步做出來(lái),逼的;(2)可以檢查每一步查詢(xún)的結(jié)果,容易調(diào)試;(3)增加可讀性,便于日后維護(hù)。
5.查詢(xún)的結(jié)果用窗體顯示或用報(bào)表打印,兩者的技術(shù)差不多。通常改變打開(kāi)窗體或報(bào)表的條件就可控制顯示或打印的記錄范圍。另外用查詢(xún)做數(shù)據(jù)源時(shí),動(dòng)態(tài)改變查詢(xún)中的SQL語(yǔ)句,比在查詢(xún)中引用窗體的控件要方便,因?yàn)镾QL語(yǔ)句生成是在VBA中,可以先存放在字符變量中,然后再更新查詢(xún)的SQL語(yǔ)句,這樣就可以用斷點(diǎn)來(lái)檢查變量值對(duì)不對(duì),如果在查詢(xún)中引用窗體的控件,尤其是包含IIF()函數(shù)時(shí),調(diào)試是很困難的。
6.開(kāi)發(fā)一個(gè)系統(tǒng),首先要解決技術(shù)問(wèn)題,即算法,用簡(jiǎn)單例子,把算法弄懂了,再詳細(xì)設(shè)計(jì),這一點(diǎn)從網(wǎng)友的提問(wèn)中可以看出,有很多人問(wèn)題表達(dá)不清楚,有的人其中夾了很多與算法無(wú)關(guān)的東西,尤其是很專(zhuān)業(yè)的東西,別人不容易看得明白,由于算法沒(méi)搞清楚,程序就無(wú)法編了。
7.不要使用過(guò)多的工具特性,使用過(guò)多的工具特性會(huì)使可讀性降低,可維護(hù)性差,要?jiǎng)e人幫忙時(shí)難以得到幫助,更要命的是可移植性差,從MDB到ADP就可以體會(huì)到了,所以在編程時(shí)可讀性很重要,可移植性更重要,你甘心自己的程序就固定在一個(gè)環(huán)境下運(yùn)行嗎?你甘心永遠(yuǎn)用一個(gè)工具搞開(kāi)發(fā)嗎?為了你的“錢(qián)途”,不要玩弄太多的技巧,當(dāng)然技術(shù)研究是另外一碼事。