第一篇:數(shù)據(jù)庫(kù)小結(jié)
數(shù)據(jù)庫(kù)總結(jié)
1、數(shù)據(jù)庫(kù)開(kāi)課6天,到今天已全部結(jié)束
2、學(xué)習(xí)內(nèi)容
一、數(shù)據(jù)庫(kù)的安裝與刪除:已獨(dú)立上機(jī)操作實(shí)現(xiàn)。
二、數(shù)據(jù)利器sql 1)用sql進(jìn)行單表查詢(xún):
查詢(xún)語(yǔ)句: select 所查內(nèi)容 from 表 where 條件
排序: select 所查內(nèi)容 from 表 where 條件order by排序的依據(jù)
分組:select 所查內(nèi)容 from 表 where 條件 group by 分組依據(jù) 其他要顯示的內(nèi)容(having 條件)
字段運(yùn)算查詢(xún):select 運(yùn)算 from表
變換查詢(xún):select 原名 新名 from 表
2)多表查詢(xún):
無(wú)條件多表查詢(xún) select 所差內(nèi)容 from 多個(gè)表
等值多表查詢(xún)
select 所差內(nèi)容 from 多個(gè)表 where 一個(gè)
表內(nèi)容=另一個(gè)表內(nèi)容
非等值多表查詢(xún)select 所差內(nèi)容 from 多個(gè)表 where 一個(gè)
條件 and(or)其他條件
3)嵌套查詢(xún)
帶in、any(some)、all、exist的嵌套查詢(xún):
select 所查內(nèi)容 from 表 where 內(nèi)容 in(select 所查
內(nèi)容 from 表 where 條件)
注意:any(some)包括等于條件、all不包括
并(union)、交(intersect)、差操作(minus): 4)常用的函數(shù)查詢(xún)
Ceil(n)取大于等于n的最小整數(shù)
Floor(n)取小于等于n的最大整數(shù)
Mod(m,n)取m整除n后的余數(shù)
Pow(m,n)取m的n次方
Round(m,n)取四舍五入,保留小數(shù)點(diǎn)后n位
Sign(n)n》0取1;n=0取0;n《0取-1
Avg(字段名)求平均值
Count(字段名)或者count(*)統(tǒng)計(jì)總數(shù)
Min(字段名)計(jì)算數(shù)值型字段最小數(shù)
Max(字段名)計(jì)算數(shù)值型字段最大數(shù)
Sum(字段名)計(jì)算總數(shù) 5)錄入數(shù)據(jù)
單行錄入:Insert into 數(shù)據(jù)表(字段1,2。。)values
(字段1的值,2的值。。)
多行錄入:insert into 數(shù)據(jù)表(字段1,2。)(select
(字段1或運(yùn)算,2或運(yùn)算。。)from
數(shù)據(jù)表 where 條件)表間數(shù)據(jù)復(fù)制:create table 表名 as(select 字段from原
有的表where 條件)
6)刪除記錄
刪除記錄:Delete from 數(shù)據(jù)表 where 條件
整表數(shù)據(jù)刪除:truncate table 數(shù)據(jù)表 7)更新數(shù)據(jù)
直接賦值更新:update 數(shù)據(jù)表 set 字段名1=新的賦值,字段名2=新的賦值。where條件
嵌套更新:update 數(shù)據(jù)表 set 字段名1=(select 字段列
表 from 數(shù)據(jù)表 where 條件),字段名(select字段列表 from 數(shù)據(jù)表 where條件)。。
三、編程進(jìn)階Pl/sql 1)程序結(jié)構(gòu)
Delacre
定義語(yǔ)句段
Begin
執(zhí)行語(yǔ)句段
Exception
異常處理語(yǔ)句段 End 2)基本語(yǔ)法
定義變量%type:獲得字段的數(shù)據(jù)類(lèi)型
定義變量%rowtype:獲得整個(gè)記錄的數(shù)據(jù)類(lèi)型f 定義記錄類(lèi)型變量 :type 記錄類(lèi)型 is record()
定義一維表類(lèi)型變量:type 表類(lèi)型 is table of 類(lèi)型 index by
binary_integer, 表變量名 表類(lèi)型
定義多維表類(lèi)型變量
3)表達(dá)式
數(shù)值表達(dá)式:加+,減-,乘*,除/,乘方**
字符表達(dá)式:連接符號(hào)||
關(guān)系表達(dá)式(9種): 4)事務(wù)處理
提交:Committee
回滾:rollback
保存點(diǎn):savepoint 5)游標(biāo)
定義、打開(kāi)、提取、關(guān)閉 6)過(guò)程
創(chuàng)建、查詢(xún)、修改、執(zhí)行
·
第二篇:操作數(shù)據(jù)庫(kù)小結(jié)
一.查詢(xún)操作
對(duì)數(shù)據(jù)進(jìn)行查詢(xún)操作時(shí),有兩種情況:一是查詢(xún)單個(gè)值,二是 查詢(xún)?nèi)舾蓷l記錄。
1、查詢(xún)單個(gè)值
需要使用Command對(duì)象的ExecuteScalar()方法:步驟如下:(1)、創(chuàng)建Connection對(duì)象(數(shù)據(jù)庫(kù)連接對(duì)象)。(2)、創(chuàng)建查詢(xún)用的SQL語(yǔ)句。(3)、利用SQL語(yǔ)句和Connection對(duì)象創(chuàng)建Command對(duì)象。(4)、打開(kāi)數(shù)據(jù)庫(kù)連接,調(diào)用Connection對(duì)象的Open()方法。(5)、調(diào)用Command對(duì)象的ExecuteScalar()方法,返回一個(gè)標(biāo)量值。(6)、操作完成后關(guān)閉數(shù)據(jù)庫(kù)連接,調(diào)用Connection對(duì)象的Close()方法。
2、查詢(xún)?nèi)舾蓷l記錄
需要使用Command對(duì)象的ExecuteReader()方法:步驟如下:(1)、創(chuàng)建Connection對(duì)象(數(shù)據(jù)庫(kù)連接對(duì)象)。(2)、創(chuàng)建查詢(xún)用的SQL語(yǔ)句。(3)、利用SQL語(yǔ)句和Connection對(duì)象創(chuàng)建Command對(duì)象。(4)、打開(kāi)數(shù)據(jù)庫(kù)連接,調(diào)用Connection對(duì)象的Open()方法。(5)、調(diào)用Command對(duì)象的ExecuteReader()方法,返回一個(gè)DataReader對(duì)象。(6)、調(diào)用DataReader對(duì)象的Read()方法逐行讀取記錄,如果讀到記錄返回Ture,否則返回False.(7)、使用(type)dataReader[列名或索引]的方式讀取這一行中某一列的值。(8)、關(guān)閉DataReader對(duì)象(9)、操作完成后關(guān)閉數(shù)據(jù)路連接,調(diào)用Connection對(duì)象的Close()方法。
二、非查詢(xún)操作
對(duì)數(shù)據(jù)庫(kù)執(zhí)行非查詢(xún)操作時(shí),包括增加,修改,刪除數(shù)據(jù),都使用Command對(duì)象的ExecuteNonQuery()方法,步驟如下:
(1)、創(chuàng)建Connection對(duì)象(數(shù)據(jù)庫(kù)連接對(duì)象)(2)、創(chuàng)建增刪改用的SQL語(yǔ)句。(3)、利用SQL語(yǔ)句和Connection對(duì)象創(chuàng)建Command對(duì)象。(4)、打開(kāi)數(shù)據(jù)庫(kù)連接,調(diào)用Connection對(duì)象的Open()方法。(5)、調(diào)用Command對(duì)象的ExecuteNonQuery()方法執(zhí)行命令,返回受影響的行數(shù)。(6)、操作完成后關(guān)閉數(shù)據(jù)庫(kù)連接,調(diào)用Connection對(duì)象的Close()方法。
本章總結(jié)
1、使用DataReader查詢(xún)數(shù)據(jù)記錄,通過(guò)Command對(duì)象的ExecuteReader()方法返回一個(gè)DataReader對(duì)象。
2、使用DataReader讀取數(shù)據(jù)室每次調(diào)用Read()方法讀取一行數(shù)據(jù)。
3、DataReader使用完后要調(diào)用它的Close()方法關(guān)閉。
4、使用Command對(duì)象的ExecuteNonQuery()方法對(duì)數(shù)據(jù)進(jìn)行增刪改的操作。
5、ExecuteNonQuery()方法返回受影響的行數(shù)。
6、ListView(列表視圖)控件有5種視圖模式,重點(diǎn)是Details 列表視圖的Items屬性表示包含在空間中的所有項(xiàng)的結(jié)合,每一個(gè)項(xiàng)都是一個(gè)ListViewItem,使用Items.Add()方法向列表視圖中添加一項(xiàng) 調(diào)用列表視圖項(xiàng)的SubItems.AddRange()方法添加它的子項(xiàng)
ListViewItem lviStudent = new ListViewItem(loginID);創(chuàng)建一個(gè)ListView項(xiàng) lviStudent.Tag=(int)dataReader[“StudentId”];lvStudent.Items.Add(lviStudent);//向ListView中添加一個(gè)新項(xiàng) lviStudent.SubItems.AddRange(new string[] {studentName,studentNo,userState});//向當(dāng)前項(xiàng)中添加子項(xiàng)
7、ContextMenuStrip(快捷菜單)控件可以與其他控件結(jié)合使用,通過(guò)設(shè)置控件的ContextMenuStrip屬性來(lái)指定它的快捷菜單。
想鼠標(biāo)右鍵單擊文本框時(shí)出現(xiàn)快捷菜單,就選中文本框?在屬性窗口中找到它的ContextMenuStrip屬性,選擇已有的右鍵菜單控件 txtLoginId.Focus():?
下拉列表:
創(chuàng)建Command對(duì)象?調(diào)用Command對(duì)象的ExecuteReader()方法創(chuàng)建DataReader對(duì)象(sqlDataReader dataReader=command.ExecuteReader())?使用DataReader的Reader()方法逐行讀取數(shù)據(jù)(放回bool類(lèi)型)?讀取當(dāng)前行的某列的數(shù)據(jù)(cboGrade.Items.Add(dataReader[“列名”]))?關(guān)閉DataReader對(duì)象,Close()方法
向數(shù)據(jù)庫(kù)中添加數(shù)據(jù):
創(chuàng)建Connection對(duì)象?定義要執(zhí)行的SQL語(yǔ)句?創(chuàng)建Command對(duì)象?執(zhí)行ExecuteNonQuery()方法?根據(jù)返回的結(jié)果進(jìn)行后續(xù)的處理
雙擊顯示出ID:
MessageBox.show(dataGridView1.SelectedRows[0].cells[“ColID”].value.ToString());
刷新:
1,BindStudentByLoginID(txtBox.Text)2,listView.Items.RemoveAt(Listview1.SelectedIndices[0])//只能刪除選中的行(選中第幾個(gè))
第三篇:數(shù)據(jù)庫(kù)問(wèn)題小結(jié)
學(xué)習(xí)小結(jié) 1.前言:
前段時(shí)間的學(xué)習(xí)一直都沒(méi)有融入實(shí)際的操作,因此這個(gè)階段的學(xué)習(xí)我想結(jié)合著數(shù)據(jù)庫(kù)來(lái)對(duì)配置數(shù)據(jù)進(jìn)行一個(gè)定位。為了達(dá)到這個(gè)目的我就決定再我自己機(jī)子上安裝oracle數(shù)據(jù)庫(kù),并安裝omm網(wǎng)管服務(wù)器軟件,雖然這個(gè)過(guò)程自己自認(rèn)為已經(jīng)相當(dāng)嫻熟了,(呵呵)可是實(shí)際的操作中由于數(shù)據(jù)庫(kù),網(wǎng)管軟件安裝的先后順序不同出現(xiàn)了很多的問(wèn)題。在這里我就想把我所遇到的問(wèn)題以及解決辦法告訴大家。
2.安裝數(shù)據(jù)庫(kù)
首先聲明下我是在window下安裝我的數(shù)據(jù)庫(kù)軟件的,因此配置過(guò)程不像linux上面安裝時(shí)需要做諸多修改。雖然自己以前也裝過(guò),但是為了提高準(zhǔn)確性還是從網(wǎng)管部人那里要了一個(gè)安裝文檔,一切按部就班按著文檔走也沒(méi)出現(xiàn)什么問(wèn)題。直到配置監(jiān)聽(tīng)程序時(shí)候出現(xiàn)了點(diǎn)問(wèn)題:這里需要解釋下我的數(shù)據(jù)庫(kù)實(shí)例名為:tomc,IP為:10.62.88.71。
2.1 監(jiān)聽(tīng)問(wèn)題
在配置完監(jiān)聽(tīng)程序之后我按照文檔在listener.ora文件中加入了
(SID_DESC =(SID_NAME = tomc(ORACLE_HOME = D:oracleproduct10.2.0db_1)(global_dbname = tomc)也就是加了一個(gè)tomc的數(shù)據(jù)庫(kù)監(jiān)聽(tīng)實(shí)例,本來(lái)這個(gè)文件里面是有一個(gè)默認(rèn)的監(jiān)聽(tīng)實(shí)例,想想也是有道理的我就沒(méi)多想,繼續(xù)進(jìn)行本地net服務(wù)名配置,在即將結(jié)束的時(shí)候輸入網(wǎng)絡(luò)服務(wù)名,一般默認(rèn)輸入數(shù)據(jù)庫(kù)實(shí)例名(記住這點(diǎn)和listener.ora文件里的監(jiān)聽(tīng)實(shí)例是必須對(duì)應(yīng)的)??墒俏臋n中輸入的是:
開(kāi)始我也沒(méi)細(xì)想,就按照文檔完成了輸入,結(jié)果進(jìn)行連接測(cè)試的時(shí)候老測(cè)試不成功。出現(xiàn)這樣的提示:
我就對(duì)前面的配置進(jìn)行了檢查最后發(fā)現(xiàn)應(yīng)該是剛才那個(gè)網(wǎng)絡(luò)服務(wù)名出現(xiàn)了錯(cuò)誤。如果設(shè)置成tomc_10.61.88.71的話(huà)在tnsnames.ora文件中會(huì)相應(yīng)的生成
TOMC_10.61.88.71 =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = 10.61.88.718)(PORT = 1521))(CONNECT_DATA =(SID = TOMC)))而我們前面的監(jiān)聽(tīng)程序里面卻是tomc,因此導(dǎo)致連接不成功。意識(shí)到這一點(diǎn)之后我決定不按照文檔了(反正這一段自己以明白),在配置監(jiān)聽(tīng)程序的時(shí)候listener.ora文件我不做修改采用默認(rèn),本地Net服務(wù)名配置時(shí)網(wǎng)絡(luò)名我設(shè)置成tomc_10.62.88.71,其余按照規(guī)定的填寫(xiě)??墒瞧婀值氖虑橛职l(fā)生了,當(dāng)我測(cè)試連接的時(shí)候:
然后貌似卡住了,什么都不顯示了。。
2.2 注冊(cè)表問(wèn)題
我百思不得其解,頗為郁悶,自信心受到嚴(yán)重的打擊,哈。不過(guò)既然問(wèn)題出來(lái)了,就要想辦法解決,首先我對(duì)前面的配置數(shù)據(jù)默默的回想了一遍確定沒(méi)什么問(wèn)題,然后考慮到是否是上一次配置失敗對(duì)這次的連接有了影響從而導(dǎo)致局部死機(jī)的情況出現(xiàn)。
1.我想到了關(guān)閉進(jìn)程,在任務(wù)管理器中我講自己懷疑有可能的進(jìn)程都一一關(guān)掉,結(jié)果絲毫沒(méi)有發(fā)生任何變化。。。。。。失敗。2.最后打開(kāi)注冊(cè)表編輯器(運(yùn)行regedit),我搜索 oracle 字段,鼠標(biāo)直到:
具體的東西也看不明白,不過(guò)看到OracleOraDb10g_home1TNSListener這個(gè)子樹(shù)。我就意識(shí)到或許是由于它在作祟,第一次錯(cuò)誤配置時(shí)已經(jīng)在注冊(cè)表中生成了相應(yīng)的信息,后面的配置可能無(wú)法對(duì)他進(jìn)行覆蓋。雖然原因不是很明白但是大概可以定位到這里了,我就將這個(gè)表項(xiàng)刪除,然后重啟機(jī)器。(不知道linux服務(wù)器遇到是否會(huì)遇到這個(gè)問(wèn)題)機(jī)器起來(lái)后按照剛才的監(jiān)聽(tīng)配置完成之后測(cè)試:
成功!
3.導(dǎo)入數(shù)據(jù)庫(kù)備份數(shù)據(jù)
這里先做個(gè)說(shuō)明:早先我從網(wǎng)管服務(wù)器上導(dǎo)出了一份數(shù)據(jù),此時(shí)我想講這份數(shù)據(jù)導(dǎo)入到我自己數(shù)據(jù)庫(kù)中,這樣我自己也可以隨時(shí)查看并做修改。文件存放的目錄為:D:網(wǎng)管版本包
3.1缺少指定導(dǎo)入用戶(hù)參數(shù)
懶得用工具了,我就隨手打開(kāi)命令端口輸入:
結(jié)果導(dǎo)入失敗 生成相應(yīng)的日志文件,內(nèi)容如下:
連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0Production With the Partitioning, OLAP and Data Mining options
經(jīng)由常規(guī)路徑由 EXPORT:V10.02.01 創(chuàng)建的導(dǎo)出文件
已經(jīng)完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的導(dǎo)入.正在將 SYSTEM 的對(duì)象導(dǎo)入到 SYSTEM.正在將 UEP 的對(duì)象導(dǎo)入到 UEP IMP-00003: 遇到 ORACLE 錯(cuò)誤 1435 ORA-01435: 用戶(hù)不存在
成功終止導(dǎo)入, 但出現(xiàn)警告。
這個(gè)時(shí)候我真郁悶,開(kāi)始我懷疑命令錯(cuò)誤了,可是這個(gè)命令自己早已經(jīng)亂熟于心了。不過(guò)我還是進(jìn)入D:NetNumenums-svrtoolsoraEIPT打開(kāi)了網(wǎng)管軟件里面提供的工具,我用UltraEdit-32 軟件打開(kāi)run.bat,先講這個(gè)工具里代碼的調(diào)用關(guān)系理清然后找到導(dǎo)入文件那一段代碼:
通過(guò)代碼也堅(jiān)定了我的命令內(nèi)容,格式的正確性。(如果有興趣的兄弟可以把那些工具都打開(kāi)然后仔細(xì)地看看里面的內(nèi)容,其實(shí)還蠻有意思)
3.3 真相大白
排除了命令的原因之后,實(shí)在想不到還有什么問(wèn)題。無(wú)奈之下給黃建軍總共發(fā)了一封郵件,說(shuō)了一下情況,還是人家黃總猛啊,我問(wèn)題一說(shuō)黃總馬上就答復(fù)我了:
黃總一說(shuō)我也頓時(shí)明白了,我剛裝的數(shù)據(jù)庫(kù)里面還沒(méi)有和網(wǎng)管匹配的表結(jié)構(gòu),這樣導(dǎo)入數(shù)據(jù)時(shí)數(shù)據(jù)就不知道在數(shù)據(jù)口中如何的分布。在這里黃總還提到了一點(diǎn)數(shù)據(jù)庫(kù)版本有對(duì)上號(hào),oracle 10g的數(shù)據(jù)和oracle 9i的數(shù)據(jù)就不能兼容。此外還要考慮到網(wǎng)關(guān)版本的問(wèn)題,不同的網(wǎng)管版本其表結(jié)構(gòu)也不一樣,因此在數(shù)據(jù)導(dǎo)入的時(shí)候一定要注意到這點(diǎn)。
余下的安裝omm服務(wù)器就沒(méi)什么好說(shuō)的了,然后再次導(dǎo)入之后果然成功了。
4.查看數(shù)據(jù)庫(kù)
安裝完數(shù)據(jù)庫(kù)之后,我自然沒(méi)有忘記我的初衷(根據(jù)網(wǎng)管配置數(shù)據(jù)再查看相應(yīng)的數(shù)據(jù)庫(kù)表)。在這里向大家介紹一款工具,PLSQL Developer,這款工具是數(shù)據(jù)庫(kù)開(kāi)發(fā)者的最?lèi)?ài),里面有圖形化的操作界面,可以圖形化進(jìn)行創(chuàng)建,插入,刪除等操作,十分方便。由于大學(xué)中我經(jīng)常用這個(gè)工具因此一切輕車(chē)熟路。
進(jìn)去之后,直接點(diǎn)開(kāi)索引尋找?guī)炖锏谋恚?/p>
然而貌似沒(méi)有我在參數(shù)字典上看到的那些熟悉的表名,問(wèn)了研發(fā)部的一個(gè)哥們,才知道自己犯了多么愚蠢的一個(gè)錯(cuò)誤。在網(wǎng)管軟件中我們所有的配置數(shù)據(jù)都在數(shù)據(jù)庫(kù)中的uep用戶(hù)下保存(此時(shí)我才真正明白了uep的含義,同時(shí)也明白了為什么導(dǎo)出數(shù)據(jù)的時(shí)候都是導(dǎo)出uep用戶(hù)的),而所有告警信息都存放在trns_pm 用戶(hù)下。明白了這點(diǎn),我馬上在網(wǎng)管的相關(guān)屬性文件里找到了這兩個(gè)用戶(hù)的密碼:
trns_pmtrnspm uepu_tywg_2008
后面的事情就沒(méi)什么好說(shuō)的了。呵呵
4.經(jīng)驗(yàn)總結(jié)
上面遇到的這些問(wèn)題如果大家都用腳本運(yùn)行的話(huà),估計(jì)都不會(huì)出什么錯(cuò)誤,但是我認(rèn)為作為一個(gè)高級(jí)技術(shù)支持人員還是要對(duì)一些東西理解的清晰一點(diǎn),通過(guò)發(fā)現(xiàn)問(wèn)題----思索問(wèn)題---定位問(wèn)題----解決問(wèn)題 這個(gè)過(guò)程我增強(qiáng)了自己對(duì)系統(tǒng)的理解,并提高了自己的動(dòng)手以及解決問(wèn)題的能力。
第四篇:Visual Basic數(shù)據(jù)庫(kù)操作方法小結(jié)
Visual Basic數(shù)據(jù)庫(kù)操作方法小結(jié)
筆者和同事們?cè)谑褂肰B對(duì)數(shù)據(jù)庫(kù)操作應(yīng)用時(shí),總結(jié)了如下的幾種方法,供初學(xué)者參考,希望能對(duì)大家有所啟發(fā)。
1、數(shù)據(jù)庫(kù)打開(kāi)/關(guān)閉方法的選擇
在通常情況下,數(shù)據(jù)庫(kù)的打開(kāi)操作是在程序代碼中使用OpenDatabase方法實(shí)現(xiàn),其格式如下:Set database=workspace.OpenDatabase(dbname,options,readonly,connect)
可以通過(guò)指定數(shù)據(jù)庫(kù)名字、打開(kāi)方式、連接信息等參數(shù)打開(kāi)一個(gè)現(xiàn)已存在的數(shù)據(jù)庫(kù),使用Close方法即可關(guān)閉該數(shù)據(jù)庫(kù)。由于涉及VB代碼的編寫(xiě),其軟件編制工作比較復(fù)雜。另一方面,VB的數(shù)據(jù)控件(Data Control)也可以執(zhí)行數(shù)據(jù)庫(kù)的打用關(guān)閉操作。我們可以在數(shù)據(jù)控件的屬性窗口中預(yù)先填好數(shù)據(jù)庫(kù)打開(kāi)的相關(guān)參數(shù),一旦該數(shù)據(jù)控件啟動(dòng),數(shù)據(jù)庫(kù)便會(huì)自動(dòng)以指定的方式打開(kāi),而當(dāng)該數(shù)據(jù)控件終止時(shí),對(duì)應(yīng)的數(shù)據(jù)庫(kù)也將自動(dòng)關(guān)閉。對(duì)于按這二種方式打開(kāi)的數(shù)據(jù)庫(kù),其后的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)操作沒(méi)有什么本質(zhì)的區(qū)別。
以上兩種數(shù)據(jù)庫(kù)打用關(guān)閉的方法各有千秋:使用OpenDatabase方法可以在程序運(yùn)行中動(dòng)態(tài)地設(shè)置數(shù)據(jù)庫(kù)打開(kāi)參數(shù),并且可以多次以不同的方式打開(kāi)和關(guān)閉同一個(gè)數(shù)據(jù)庫(kù),具有相當(dāng)大的靈活性。而如果使用數(shù)據(jù)控件,則不需要另外編寫(xiě)VB代碼,只要在程序編制時(shí)預(yù)先設(shè)置數(shù)據(jù)庫(kù)的相關(guān)參數(shù),程序開(kāi)始運(yùn)行后便會(huì)自動(dòng)地以我們指定的方式打開(kāi)數(shù)據(jù)庫(kù),并在程序終止時(shí)自動(dòng)關(guān)閉該數(shù)據(jù)庫(kù),因此顯得相當(dāng)方便。在實(shí)際應(yīng)用中,可以視情況的不同而采用不同的處理方法:如果要求數(shù)據(jù)庫(kù)在程序運(yùn)行中始終處于打開(kāi)狀態(tài)并且其打開(kāi)方式保持不變(如一直處于只讀狀態(tài)),那么,可以采用數(shù)據(jù)控件方法打開(kāi)數(shù)據(jù)庫(kù);如果要求數(shù)據(jù)庫(kù)在程序運(yùn)行中時(shí)而打開(kāi)時(shí)而關(guān)閉,或者經(jīng)常在只讀和讀寫(xiě)方式間來(lái)回切換,則只能采用OpenDatabase方法編寫(xiě)程序代碼。
2、通過(guò)相對(duì)路徑指定數(shù)據(jù)庫(kù)文件
在很多情況下,不管采用上述哪一種方法打開(kāi)數(shù)據(jù)庫(kù),都必須在程序設(shè)計(jì)時(shí)就指定需要打開(kāi)的數(shù)據(jù)庫(kù)文件。但是,我們通常不能保證該軟件完成后一定會(huì)被安裝在每臺(tái)機(jī)器的同一目錄下。因此該數(shù)據(jù)庫(kù)文件的絕對(duì)路徑一般在設(shè)計(jì)時(shí)還難以完全確定,只能采用相對(duì)路徑的辦法來(lái)解決這個(gè)問(wèn)題。
在VB中,App對(duì)象是一個(gè)全局對(duì)象,用來(lái)提供當(dāng)前應(yīng)用程序的相關(guān)信息,其Path屬性反映的是當(dāng)前應(yīng)用程序的可執(zhí)行文件(。exe)所在的絕對(duì)路徑,并且只在程序運(yùn)行時(shí)才有效。通過(guò)使用App對(duì)象的Path屬性,可以方便地獲得當(dāng)前程序所在的目錄路徑。因此,如果把數(shù)據(jù)庫(kù)文件存放在與程序路徑相關(guān)的目錄下,便可以在程序設(shè)計(jì)時(shí)就指定數(shù)據(jù)庫(kù)文件的相對(duì)路徑,當(dāng)程序運(yùn)行時(shí),通過(guò)App對(duì)象的Path屬性動(dòng)態(tài)地獲取其絕對(duì)路徑。
下面的一段代碼,用來(lái)在程序開(kāi)始運(yùn)行時(shí)獲取程序的路徑,并賦值給變量AppPath,然后在數(shù)據(jù)控件Data1的Database Name屬性中與數(shù)據(jù)庫(kù)文件的相對(duì)路徑“DatabaseSample.Mdb”結(jié)合,組成數(shù)據(jù)庫(kù)文件的絕對(duì)路徑。這段代碼通常出現(xiàn)在Form-Load中: Dim AppPath As String ' 設(shè)置路徑變量 AppPath=App.Path ' 獲取程序路徑 If Right(AppPath,1)<>“"Then AppPath=AppPath+”“ ' 若路徑尾部沒(méi)有”“,則添加之
Data1.Database Name=AppPath+”DatabaseSample.mdb“ ' 與相對(duì)路徑結(jié)合,組成絕對(duì)路徑
3、用SQL語(yǔ)句完成數(shù)據(jù)庫(kù)操作
SQL也就是結(jié)構(gòu)化查詢(xún)語(yǔ)言,是用于數(shù)據(jù)庫(kù)查詢(xún)的一種通用標(biāo)準(zhǔn)語(yǔ)言,在現(xiàn)今的大多數(shù)數(shù)據(jù)庫(kù)軟件系統(tǒng)中均得到支持。1句SQL語(yǔ)句通常可以完成以前由許多條語(yǔ)句才能完成的復(fù)雜的數(shù)據(jù)庫(kù)查詢(xún)操作,具有較高的工作效率。
在VB中,SQL語(yǔ)句往往作為某些特定方法的參數(shù)而得以執(zhí)行(沒(méi)有FoxPro等數(shù)據(jù)庫(kù)軟件那樣直截了當(dāng)),比如可以把SQL語(yǔ)句作為Execute方法的1個(gè)字符串參數(shù)而執(zhí)行,其格式如下: object.Execute SQL-statement,options 在其中的SQL-statement字符串中,可以使用標(biāo)準(zhǔn)的SQL語(yǔ)句,如:SELECT、INSERT、DELETE及UPDATE等。下面的例子是在數(shù)據(jù)庫(kù)對(duì)象DB中執(zhí)行SQL語(yǔ)句,從當(dāng)前數(shù)據(jù)庫(kù)的EMployees數(shù)據(jù)表中,選擇字段LastName='King'的所有記錄,并將這些記錄的LastName和FirstName這2個(gè)字段的內(nèi)容,保存到同一數(shù)據(jù)庫(kù)的Backup數(shù)據(jù)表中:
DB.Execute(”SELECT LastName,FirstName INTO Backup FORM Employees WHERE LastName='King';“)
4、For語(yǔ)句在數(shù)據(jù)庫(kù)中的應(yīng)用
For語(yǔ)句是幾乎所有高級(jí)語(yǔ)言都有的語(yǔ)句,通常用來(lái)完成指定次數(shù)的循環(huán),在循環(huán)中可以完成一些指定的工作。而在VB中,F(xiàn)or語(yǔ)句還可以用來(lái)對(duì)某個(gè)集合中的每1個(gè)元素循環(huán)執(zhí)行若干操作,而不必預(yù)先設(shè)定循環(huán)次數(shù),其格式如下: For Each element In group [statements] Next[element] For語(yǔ)句的這一特點(diǎn)可用于按照指定條件搜索整個(gè)數(shù)據(jù)庫(kù)。以下的代碼便可以對(duì)數(shù)據(jù)庫(kù)對(duì)象DB所指的數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)表進(jìn)行搜索,并完成指定的操作:
For Each Td In DB.Table Defs ' 循環(huán)搜索數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)表…… …… ' 對(duì)數(shù)據(jù)表執(zhí)行指定的操作Next
5、復(fù)制數(shù)據(jù)庫(kù)的結(jié)構(gòu)定義
在數(shù)據(jù)庫(kù)應(yīng)用中,經(jīng)常需要在程序運(yùn)行時(shí)動(dòng)態(tài)地把一個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)定義完整地復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)中。由于新型的數(shù)據(jù)庫(kù)可以同時(shí)包含若干個(gè)數(shù)據(jù)表,而每個(gè)數(shù)據(jù)表的結(jié)構(gòu)定義又不近相同,因此,如果通過(guò)逐個(gè)定義數(shù)據(jù)表中所有字段的類(lèi)型、長(zhǎng)度的方法復(fù)制數(shù)據(jù)庫(kù)結(jié)構(gòu),則該程序?qū)⒆兊孟喈?dāng)冗長(zhǎng)和復(fù)雜,日后的維護(hù)也比較困難。但是,通過(guò)綜合運(yùn)用上述的幾種應(yīng)用方法,用相當(dāng)短的VB語(yǔ)句完成同樣的工作,實(shí)且程序也易于理解和維護(hù)。程序清單如下:
Sub CopyDBStrnc(src As String,dst As String)' 定義子程序Copy DBStrnc,用于復(fù)制數(shù)據(jù)庫(kù)結(jié)構(gòu)
' 調(diào)用參數(shù): ' src--源數(shù)據(jù)庫(kù)的文件名
' dst--目的數(shù)據(jù)庫(kù)的文件名
Dim DB As Database,Td As TableDef,SQLstr As String ' 定義變量:
' DB--數(shù)據(jù)庫(kù)對(duì)象
' Td--數(shù)據(jù)表定義對(duì)象
' SQLstr--SQL語(yǔ)句變量
Set DB=Create Database(dst,dbLangGeneral)' 創(chuàng)建目的數(shù)據(jù)庫(kù)dst ' 關(guān)閉目的數(shù)據(jù)庫(kù)dst DB.Close Set db=OpenDatabase(src,False,True)' 以共享、只讀方式打開(kāi)源數(shù)據(jù)庫(kù)src For Each Td In DB.TableDefs
' 循環(huán)搜索源數(shù)據(jù)庫(kù)DB中的所有數(shù)據(jù)表定義
If(Td.Attributes And dbSyste mObect)=0 Then
' 忽略系統(tǒng)數(shù)據(jù)表,只針對(duì)用戶(hù)定義的數(shù)據(jù)表進(jìn)行搜寫(xiě)
SQLstr=”SELECT * INTO“+Td.Name+”IN“+dst+”'FROM“+
Td.Name+”'IN“+src+”'WHERE False'
' 對(duì)SQL語(yǔ)句變量賦值,完成以下功能:
' 從源數(shù)據(jù)庫(kù)src的數(shù)據(jù)表中選擇所有字段
' 存入目的數(shù)據(jù)庫(kù)dst的同名數(shù)據(jù)表中
' 選擇數(shù)據(jù)表的字段定義,不包括任何記錄
DB.Execute(SQLstr)' 執(zhí)行SQL語(yǔ)句
End If Next ' 結(jié)束循環(huán)搜索
DB.Close ' 關(guān)閉源數(shù)據(jù)庫(kù) Exit Sub ' 結(jié)束子程序定義
第五篇:數(shù)據(jù)庫(kù)查詢(xún)基本操作題總結(jié)(查詢(xún)小結(jié))
2010.3等級(jí)考試-基本卡、操作題
一、查詢(xún)小結(jié):
? 查詢(xún)分類(lèi):
1.選擇查詢(xún):
? 使用向?qū)?chuàng)建查詢(xún)(無(wú)條件);
? 在設(shè)計(jì)視圖中創(chuàng)建查詢(xún)(無(wú)條件、有條件); 2.交叉表查詢(xún):
? 使用交叉表查詢(xún)向?qū)В?? 在設(shè)計(jì)視圖中創(chuàng)建查詢(xún); 3.參數(shù)查詢(xún):
? 在設(shè)計(jì)視圖中創(chuàng)建查詢(xún)(在條件欄內(nèi)輸入提示信息,注意使用[ ]); 4.操作查詢(xún): ①生成表查詢(xún)
? 在設(shè)計(jì)視圖中創(chuàng)建查詢(xún)(查詢(xún)→生成表查詢(xún)→表名(注意:執(zhí)行一次查詢(xún))); ②更新查詢(xún)
? 在設(shè)計(jì)視圖中創(chuàng)建查詢(xún)(查詢(xún)→更新查詢(xún)→更新到(注意:執(zhí)行一次查詢(xún))); ③追加查詢(xún)
? 在設(shè)計(jì)視圖中創(chuàng)建查詢(xún)(查詢(xún)→追加查詢(xún)→表名(注意:執(zhí)行一次查詢(xún))); ④刪除查詢(xún)
? 在設(shè)計(jì)視圖中創(chuàng)建查詢(xún)(查詢(xún)→刪除查詢(xún)→條件(注意:執(zhí)行一次查詢(xún)));
5.SQL查詢(xún)
? 條件欄的表示: 1)函數(shù):
系統(tǒng)日期:=Date()或=Now()系統(tǒng)時(shí)間:=Time()年、月、日:年:Year(date())
月:month(date())日:data(date())