久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VB精品課程 - 濟南鐵道職業(yè)技術(shù)學院 信息工程系? Limber Senovo

 昵稱728549 2010-01-27


 

     

 

VB程序設(shè)計  >> 課程實訓  >> 準備知識

準備知識—VB數(shù)據(jù)庫應用基礎(chǔ)

一、VB如何訪問數(shù)據(jù)庫

目前,,Visual Basic訪問數(shù)據(jù)庫的主流技術(shù)是ADO,。ADO是一種基于對象的數(shù)據(jù)訪問接口,在VB中提供了利用ADO訪問數(shù)據(jù)庫的兩種主要形式:ADO數(shù)據(jù)控件(ADODC)和ADO對象編程模型(ADO代碼),。這兩種方式可以單獨使用,,也可以同時使用。

使用ADO數(shù)據(jù)控件的優(yōu)點是代碼少,,一個簡單的數(shù)據(jù)庫應用程序甚至可以不用編寫任何代碼,。它的缺點是功能簡單,不夠靈活,,不能滿足編制較復雜的數(shù)據(jù)庫應用程序的需要,。

使用ADO對象編程模型的優(yōu)點是具有高度的靈活性,可以編制復雜的數(shù)據(jù)庫應用程序,。它的缺點是代碼編寫量較大,對初學者來說有一定困難,。

二,、對記錄集對象的初步理解

無論是使用ADO數(shù)據(jù)控件,還是使用ADO對象編程模型,,都會涉及到記錄集對象,。因此,在討論訪問數(shù)據(jù)庫的兩種方式之前,,有必要初步了解一下記錄集對象,。

請看下面來自學生數(shù)據(jù)庫的幾個集合:

取學籍表(含學號、姓名,、性別等字段)中所有學生的記錄構(gòu)成一個集合,;

取學籍表中所有男生的記錄構(gòu)成一個集合;

取學籍表中張三的學號和姓名,,根據(jù)其學號取成績表(含學號,、課程和分數(shù)三個字段)中張三的各科成績構(gòu)成一個集合。

以上幾個集合都是“記錄的集合”,,由此得出以下概念:

將數(shù)據(jù)庫中一個或多個表中的部分或全部數(shù)據(jù)構(gòu)成一個“記錄的集合”,,這個集合就稱為“記錄集”(Recordset),。若將記錄集看作一個對象,這個對象就是記錄集對象,。

記錄集由行(記錄)和列(字段)構(gòu)成,。

記錄集對象是ADO中的一個功能強大的對象,對數(shù)據(jù)庫的絕大部分操作,,如記錄指針的移動,,記錄的查找、添加,、刪除和修改等,,都是針對記錄集對象進行的。記錄集對象的具體操作將在后面討論,。

三,、用SQL語句生成記錄集

生成記錄集最常用的方法是利用SQL語句。

SQLStructure Query Language,,結(jié)構(gòu)化查詢語言)中的語句很多,,最常用的是SELECT語句,該語句用于從數(shù)據(jù)庫中篩選(查詢)記錄集,。

SELECT語句可用于ADO數(shù)據(jù)控件的記錄源(RecordSource)屬性,、記錄集的Source屬性和Open方法、ConnectionCommand對象的Execute方法或Command對象的CommandText屬性,。

1. SELECT語句的語法

SELECT 字段列表 FROM 表名 [WHERE 查詢條件] [GROUP BY 分組字段 [HAVING 分組條件]] [ORDER BY 排序字段 [ASC|DESC]]

說明:

字段列表:逗號分隔(“*”表示所有字段,,來自不同表的同名字段前需加表名和圓點)。

FROM:指定表(可有多個表,,逗號分隔),,必選。

WHERE:選擇記錄的條件,。

GROUP BYHAVING:分組過濾,,將分組字段表中同值記錄合并為一條記錄。

ORDER BY:排序,。升序:ASC,;降序:DESC

 

下面的SQL語句是最簡單的查詢形式,,生成的記錄集包含整個表的全部數(shù)據(jù):

SELECT * FROM 表名

其中“*”指表中所有字段(列),。

示例:

SELECT * FROM 用戶

SELECT 工資.編號,概況.姓名,,工資總額 FROM 工資,,概況WHERE 工資.編號=概況.編號

2. WHERE子句限定記錄集篩選條件

在各種子句中,WHERE子句使用頻率最高,。該子句指明查詢的條件,。

WHERE子句中可使用各種關(guān)系(比較)運算符表示篩選記錄的條件,。

例如,選擇學籍表中所有男生:

SELECT * FROM 學籍 WHERE 性別 = ""

WHERE子句中用Like運算符可實現(xiàn)模糊查詢,。

ADO的數(shù)據(jù)提供者所使用的Like運算符的通配符是“%”(VB內(nèi)部為“*”),,可代表任何字符,字符數(shù)不限,。例如,,查詢所有姓“張”的學生:

SELECT * FROM 學籍 WHERE 姓名 Like "%"

查詢所有姓名中含有“小”字的學生:

SELECT * FROM 學籍 WHERE 姓名 Like "%%"

查詢姓名最后一個字為“剛”的所有學生:

SELECT * FROM 學籍 WHERE姓名 like "%"

SELECT語句與WHERE子句的關(guān)系如圖1-1所示。

FROM

選表

1

2

i

 

SELECT

選字段

字段1

字段2

字段j

生成

記錄集

記錄1

記錄2

記錄k

WHERE

限定條件

1-1  SQL語句生成記錄集


  

 

3. ORDER BY子句排序

ORDER BY子句(ASC:升序,,默認,;DESC:降序)對記錄排序。例如:

SELECT * FROM 學籍 ORDER BY 學號 ASC

4. GROUP BY子句分組

GROUP BY子句將指定字段中等值的多條記錄合并為一條記錄,??捎?/span>HAVING子句附加條件。

例如,,以“班級”作為分組字段,,查詢各班女生人數(shù):

SELECT 班級,Count(*) AS 女生人數(shù) FROM 成績表 GROUP BY 班級 HAVING 性別=""

說明:上面的語句中Count(*)表示統(tǒng)計記錄總數(shù),,AS子句表示存放統(tǒng)計結(jié)果的字段別名,。其他SQL函數(shù)還有SumAvg,、MaxMin等,。

5. 過濾重復記錄

過濾重復記錄是指忽略字段值相同的重復記錄。例如,,假定學籍表中含有400名學生的信息,,這些學生來自10個班級,現(xiàn)在要查詢學籍表中的“班級”字段生成一個班級名稱記錄集,如果不進行篩選過濾,則生成的記錄集將含有400條記錄,,會有很多班級名稱相同的重復記錄,。過濾重復記錄后,可以生成僅含10個記錄的記錄集,,每個班級的名稱都是惟一的,。過濾重復記錄實際上是對記錄進行分類,可以通過下面的方法實現(xiàn),。

1)用DISTINCT關(guān)鍵字

SELECT語句中使用DISTINCT關(guān)鍵字忽略重復記錄,。例如,以下語句可以過濾重復記錄和空字段:

SELECT DISTINCT 班級 FROM 學籍 WHERE 班級<>NULL AND 班級<>""

2)用GROUP BY子句

如前所述,,用GROUP BY子句可以對記錄進行分組,,實現(xiàn)重復記錄的過濾,。例如:

SELECT 班級 FROM 學籍 GROUP BY 班級 HAVING 班級<>NULL AND 班級<>""

四、使用ADO數(shù)據(jù)控件及數(shù)據(jù)綁定控件

ADO數(shù)據(jù)控件屬于ActiveX控件,,加載后才能使用:

右擊工具箱→部件→選中“Mcrosoft ADO Data Control 6.0OLE DB)”→確定,。

1. 連接數(shù)據(jù)庫及指定記錄源

ADO數(shù)據(jù)控件與數(shù)據(jù)庫的連接有3種方式:數(shù)據(jù)鏈接文件(.UDL)、ODBCDSN)和字符串連接,。與Access數(shù)據(jù)庫建立連接的常用方式是字符串連接,。

通常通過屬性頁一次完成連接數(shù)據(jù)庫和指定記錄源的設(shè)置。右擊窗體上的ADO數(shù)據(jù)控件,,在彈出菜單中選擇“ADODC屬性”菜單項,,打開屬性頁對話框。在“通用”選項卡中選擇“使用連接字符串”,,單擊“生成”按鈕,,打開數(shù)據(jù)鏈接屬性窗口。在“提供者”選項卡中選擇“Microsoft Jet 4.0 OLE DB Provider”,,單擊“下一步”按鈕,。在如圖1-2所示的“連接”選項卡中單擊第一個輸入框右側(cè)的 按鈕,在彈出的對話框中選擇數(shù)據(jù)庫,,單擊“打開”后返回“連接”選項卡,,單擊“測試連接”按鈕,成功后單擊“確定”,,完成連接數(shù)據(jù)庫的設(shè)置,,返回屬性頁對話框。

1-2  連接數(shù)據(jù)庫

單擊屬性頁對話框“記錄源”選項卡,,顯示如圖1-3所示的窗口,,在“記錄源”選項卡中設(shè)命令類型為“2-adCmdTable”,然后在“表或存儲過程名稱”下拉列表中選擇數(shù)據(jù)表,。也可以設(shè)命令類型為“8-adCmdUnknown”或“1-adCmdText”,,然后在“命令文本(SQL)”文本框中輸入SQL語句,單擊“確定”完成設(shè)置,。

        

      (a) 用數(shù)據(jù)表作記錄源                          (b) SQL語句作記錄源

1-3  設(shè)置記錄源

上述操作實際上是設(shè)置了ADO數(shù)據(jù)控件的兩個重要屬性ConnectionString(連接字符串)和RecordSource(記錄源),。除了使用屬性頁之外,還可通過屬性窗口或程序代碼設(shè)置這兩個屬性,。

在設(shè)置ADO數(shù)據(jù)控件與數(shù)據(jù)庫的連接時,,有一點要提請讀者注意。如圖x-2所示,,在數(shù)據(jù)鏈接屬性窗口的“連接”選項卡中指定數(shù)據(jù)庫時采用的是絕對路徑,,為了保證數(shù)據(jù)庫應用程序移植到其它計算機上仍可正常使用,應在測試連接成功后刪除數(shù)據(jù)庫名稱前面的所有路徑(圖x-2輸入框中的反相顯示部分),僅保留數(shù)據(jù)庫文件名,。將數(shù)據(jù)庫文件與工程文件存放在同一文件夾下,,在工程啟動窗體的Initialize事件過程中進行路徑初始化處理:

Private Sub Form_Initialize()

    ChDrive App.Path  '設(shè)當前驅(qū)動器為工程所在驅(qū)動器

    ChDir App.Path     '設(shè)當前目錄為工程所在目錄

End Sub

2. 用代碼設(shè)置或改變記錄源

ADO數(shù)據(jù)控件一旦建立了與數(shù)據(jù)庫的連接,就可以通過設(shè)置或改變其RecordSource(記錄源)屬性訪問數(shù)據(jù)庫中的任何表,,亦可訪問由一個或多個表中的部分或全部數(shù)據(jù)構(gòu)成的記錄集,。在實際應用中,常常在程序運行時用代碼設(shè)置RecordSource屬性及其相關(guān)屬性,,從而使ADO數(shù)據(jù)控件具有更大的靈活性,。例如:

用數(shù)據(jù)表名稱作為記錄源

Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = "學籍"

Adodc1.Refresh

SQL語句生成的記錄集作為記錄源

Adodc1.CommandType = adCmdText

Adodc1.RecordSource = "SELECT * FROM 學籍"

Adodc1.Refresh

注意:設(shè)置記錄源后,必須調(diào)用ADO數(shù)據(jù)控件的Refresh方法刷新對數(shù)據(jù)庫的訪問,。

3. SQL語句的應用形式

在程序代碼中,,SQL語句必須以字符串形式提供。例如:

Adodc1.RecordSource = "SELECT * FROM 學籍"

如果SQL語句中含有字符串常量,,必須將字符串常量放在一對單引號中,,例如:

Dim strSQL As String

strSQL = "SELECT * FROM 學籍 WHERE 性別 = ''"

Adodc1.RecordSource = strSQL

如果SQL語句中引用了String型變量或其他控件的字符串類型的屬性(如文本框的Text屬性),應當采用下面的引用形式(注意單引號的位置):

" ... '" & 字符串變量或控件屬性 & "' ... "

例如:

Dim strSQL As String, strSex As String

strSex = ""

strSQL = "SELECT * FROM 學籍 WHERE 性別 = '" & strSex & "'"

Adodc1.RecordSource = strSQL

又如:

Dim strSQL As String

Text1.Text = ""

strSQL = "SELECT * FROM 學籍 WHERE 姓名 Like '" & Text1.Text & "%'"

Adodc1.RecordSource = strSQL

如果SQL語句中引用了其他類型的變量或控件屬性,,不使用單引號,。例如:

Dim strSQL As String, intGrade As Integer

intGrade = 60

strSQL = "SELECT * FROM 成績 WHERE 分數(shù) >= " & intGrade _

           & " AND 課程='英語'"

Adodc1.RecordSource = strSQL

4. 數(shù)據(jù)綁定控件

ADO數(shù)據(jù)控件本身不能顯示記錄集,需通過綁定具有顯示功能的其他控件顯示記錄集,,這些控件稱為數(shù)據(jù)綁定控件或數(shù)據(jù)識別控件,,如文本框、標簽,、圖像(片)框,、列表框、組合框,、復選框,、DataGrid等。

1)數(shù)據(jù)綁定控件的相關(guān)屬性

DataSource屬性(數(shù)據(jù)源):指定(綁定到)ADO數(shù)據(jù)控件

DataField屬性(數(shù)據(jù)字段):綁定到特定字段,。綁定后只要移動指針,,自動寫入修改內(nèi)容。

2)在屬性窗口設(shè)置綁定控件屬性

在屬性窗口將數(shù)據(jù)綁定控件的DataSource屬性設(shè)為ADO數(shù)據(jù)控件(如Adodc1),。如果是單字段顯示控件(如文本框等),,還需將控件的DataField屬性設(shè)置為特定字段。DataGrid控件屬于多字段顯示控件,,沒有DataField屬性,。

3)用代碼設(shè)置綁定控件屬性

程序運行時可以動態(tài)地設(shè)置數(shù)據(jù)綁定控件的屬性,。例如:

Set Text1.DataSource = Adodc1

Text1.DataField = "姓名"

Set DataGrid1.DataSource = Adodc1

說明:DataSource是對象類型的屬性,,必須用Set語句為其賦值。

5. 不用綁定方法如何顯示和處理記錄集內(nèi)容

不使用綁定的方法處理記錄集比較靈活,,缺點是代碼編寫量較大,。

1)記錄集內(nèi)容的顯示

控件屬性 = 記錄集(“字段”)

例如:

Text1.Text = Adodc1.Recordset("學號")

Text2.Text = Adodc1.Recordset("姓名")

每當記錄指針移動時均需對控件屬性重新賦值,。若需要顯示的字段較多,可以編制一個自定義過程用于記錄指針移動時顯示各字段內(nèi)容,。

2)為記錄集字段賦值

記錄集(“字段”) = 控件屬性

例如:

Adodc1.Recordset("學號") = Text1.Text

Adodc1.Recordset("姓名") = Text2.Text

Adodc1.Recordset.Update

說明:為字段賦值后,,應調(diào)用記錄集的Update方法更新數(shù)據(jù)庫。

五,、數(shù)據(jù)庫記錄的操作

數(shù)據(jù)庫記錄的操作是針對記錄集對象的操作,。下面討論的所有通過代碼操作記錄的方法對ADO數(shù)據(jù)控件和ADO對象編程模型中的記錄集對象都是適用的。

1. 移動記錄指針

1)無編程法

不需編寫代碼,,直接利用ADO數(shù)據(jù)控件上的4個按鈕:首記錄,、上一記錄、下一記錄,、末記錄,。

2)編程法

有時因為用戶界面的需要,將ADO數(shù)據(jù)控件隱藏(Visibal=False),,只能通過編寫代碼實現(xiàn)記錄指針的移動,。具體步驟如下:

在窗體上放置4個命令按鈕,分別為首記錄,、上一記錄,、下一記錄、末記錄,。

在上述按鈕的單擊事件中,,用記錄集的Move方法組移動記錄:

Adodc1.Recordset.MoveFirst

Adodc1.Recordset.MovePrevious

Adodc1.Recordset.MoveNext

Adodc1.Recordset.MoveLast

記錄指針的移動如圖1-4所示。

 

BOF

首記錄(First

末記錄(Last

EOF

 

Previous

Next


  1-4  移動記錄指針

BOFEOF是記錄集的兩個特殊位置,,BOF位于第一個記錄之前(記錄集頭),,EOF位于最后一個記錄之后(記錄集尾)。當記錄指針移到BOF時,,若再向前(MovePrevious)移動,,或移到EOF時,再向后(MoveNext)移動,,將會引發(fā)錯誤,。采用下面的措施可以防止發(fā)生此類錯誤。

在“上一記錄”按鈕的單擊事件中作如下處理:

Adodc1.Recordset.MovePrevious

If Adodc1.Recordset.BOF = True Then Adodc1.Recordset.MoveFirst

在“下一記錄”按鈕的單擊事件中作如下處理:

Adodc1.Recordset.MoveNext

If Adodc1.Recordset.EOF = True Then Adodc1.Recordset.MoveLast

2. 查找記錄

查找記錄的方法很多,,較常用的有以下幾種,。

1)用Find方法

記錄集的Find方法搜索記錄集中滿足指定條件的記錄(不區(qū)分大小寫)。如果條件滿足,,則記錄集指針定位于找到的記錄上,,否則指針定位于記錄集的末尾(EOF)。

語法:

記錄集.Find 條件[,跳行,,搜索方向,,開始位置]

參數(shù)說明:

條件:字符串,類似于SQL語句中WHERE子句的條件,,包括字段名,、比較操作符和值。

比較操作符可以是“>”,、“<”,、“=”、“>=”,、“<=”,、“<>”或“like”。

值可以是字符串,、數(shù)值或者日期,。字符串值以單引號分界(如“用戶名 = 'Admin'”);日期值以“#”分界(如“出生日期 > #1980/1/1#”),。

如果比較操作符為“like”,,則字符串值可以含有一個“%”(只能放在字符串最后),實現(xiàn)模糊比較,,但功能有限,。例如:

“姓名 like ‘王%’”

若與變量或控件屬性值比較,需用&連接,。例如:

Adodc1.Recordset.Find “用戶名=‘” & txtUserID.Text & “’”

跳行:可選,,長整型值,其默認值為零,,指定搜索的位移量,。若該選項設(shè)為1,連續(xù)執(zhí)行Find方法,,可依次找出每個符合條件的記錄,。

搜索方向:可選,指定搜索應從當前行還是下一個有效行開始,。其值可為adSearchForward(頭→尾)或adSearchBackward(尾→頭),。

開始位置:可選,變體型書簽,,用作搜索的開始位置,。

調(diào)用Find方法時,通常只帶有條件參數(shù)即可,,調(diào)用前先將記錄指針指向首記錄,。例如:

Adodc1.Recordset.MoveFirst

Adodc1.Recordset.Find "姓名 = '張三'"

If Adodc1.Recordset.EOF = True Then

    MsgBox "未查到姓名為張三的記錄,。"

End If

2)用循環(huán)結(jié)構(gòu)

通過循環(huán)結(jié)構(gòu)遍歷記錄集(適用于各種類型),查找符合條件的記錄(默認區(qū)分大小寫),。

例如:

Adodc1.Recordset.MoveFirst

Do While Not Adodc1.Recordset.EOF

    If Adodc1.Recordset("姓名") = "李四" Then Exit Do    ‘找到,退出循環(huán)

    Adodc1.Recordset.MoveNext

Loop

If Adodc1.Recordset.EOF = True Then    '若指針指向記錄集尾,,說明未找到

    ...

Else    '否則,,說明找到符合條件的記錄

    ...

End If

3)用SQL語句

SQL語句生成只包括待查記錄的記錄集,若BOFEOF均為True,,則為空記錄集,。例如:

Dim strSQL As String

strSQL = "SELECT * FROM 用戶 WHERE 用戶名='" & txtUserID.Text & "'"

Adodc1.RecordSource = strSQL

Adodc1.Refresh

If Adodc1.Recordset.BOF = True And Adodc1.Recordset.EOF = True Then

    MsgBox "無此用戶!"

End If

3. 添加記錄

用記錄集的AddNew方法添加記錄,。

語法:

記錄集.AddNew [字段名, 字段值]

可以先用無參數(shù)的AddNew方法添加一個空記錄,,然后為字段賦值,最后調(diào)用記錄集的Update方法更新數(shù)據(jù)庫,。例如:

Adodc1.Recordset.AddNew

Adodc1.Recordset("學號") = "030101001"

Adodc1.Recordset("姓名") = "張三"

Adodc1.Recordset.Update

也可以通過控件屬性或變量為字段賦值,,例如用文本框中的內(nèi)容為字段賦值:

Adodc1.Recordset.AddNew

Adodc1.Recordset("學號") = txtNo.Text

Adodc1.Recordset("姓名") = txtName.Text

Adodc1.Recordset.Update

說明:如果在調(diào)用Update方法之前移動了記錄指針,系統(tǒng)將自動調(diào)用Update方法,。

4. 修改記錄

為記錄的字段重新賦值即可實現(xiàn)記錄的修改,。

為字段賦值的常用形式:

記錄集(“字段名”)= 新值

記錄集!字段名= 新值

記錄集.Fields(索引) = 新值

例如:

Adodc1.Recordset("學號") = "030101001"

Adodc1.Recordset!姓名 =  "張三"

Adodc1.Recordset.Update

或者:

Adodc1.Recordset.Fields(0) = "030101001"

Adodc1.Recordset.Fields(1) = "張三"

Adodc1.Recordset.Update

說明:Fields是記錄集的字段集合,索引從0開始,。修改記錄后,,應調(diào)用記錄集的Update方法更新數(shù)據(jù)庫。

5. 刪除記錄

用記錄集的Delete方法刪除記錄,。

語法:

記錄集.Delete [AffectRecords]

AffectRecords參數(shù)的取值:

AdAffectCurrent:默認,。僅刪除當前記錄。

AdAffectGroup:刪除滿足記錄集Filter屬性設(shè)置的記錄,。

AdAffectAll:刪除所有記錄,。(隱含參數(shù))

AdAffectAllChapters:刪除所有子集記錄。

例如:

Adodc1.Recordset.Delete

Adodc1.Recordset.MoveNext

If Adodc1.Recordset.EOF And Adodc1.Recordset.RecordCount > 0 Then

    Adodc1.Recordset.MoveLast

End If

說明:刪除當前記錄后,,數(shù)據(jù)綁定控件(如文本框等)仍將保持已被刪除的記錄內(nèi)容而不刷新,。將記錄指針移動到下一條記錄,可以讓用戶感覺到記錄已被刪除,,同時自動調(diào)用Update方法更新數(shù)據(jù)庫,。

 

六、ADO編程模型簡介

ADO的核心是Connection,、RecordsetCommand對象,。ADO編程模型不使用ADO數(shù)據(jù)控件,直接用代碼通過ADO對象訪問數(shù)據(jù)庫,。

使用ADO編程模型需事先添加ADO對象類庫的“引用”:

工程→引用→選中“Microsoft ActiveX Data Objects 2.x Library”→確定,。

添加“引用”后,,應聲明ADO對象變量:

Dim 變量名 As New ADODB.對象

1. Connection對象

用于建立與數(shù)據(jù)源的連接。

聲明示例:

Dim cnn As New ADODB.Connection

一個Connection對象可以為多個RecordsetCommand對象提供數(shù)據(jù)庫連接服務,??梢栽诔绦虻臉藴誓K中聲明一個全局Connection對象變量,供其他模塊調(diào)用:

Public pubCnn As New ADODB.Connection

2. Recordset對象

該對象表示記錄集,,用于記錄指針的移動和記錄的查找,、添加、修改或刪除,。

聲明示例:

Dim rs As New ADODB.Recordset

3. Command對象

該對象用于對數(shù)據(jù)源執(zhí)行指定的命令,,如數(shù)據(jù)的添加、刪除,、更新或查詢,。

聲明示例:

Dim cmm As New ADODB.Command

4. 使用ADO編程模型的一般步驟

ADO對象模型中對象的功能有交叉(冗余),對于一般的數(shù)據(jù)庫應用程序,,可不必使用Command對象,。

1)聲明ADO對象變量

Dim cnn As New ADODB.Connection  '連接對象

Dim rs As New ADODB.Recordset     '記錄集對象

2)與數(shù)據(jù)庫建立連接

為了保證數(shù)據(jù)庫應用程序移植到其它計算機上仍可正常使用,應將當前工程與數(shù)據(jù)庫文件保存在同一目錄,,并進行以下初始化處理:

Dim MyPath As String  '用于存放路徑

MyPath = App.Path     '取本工程所在路徑

'若非根目錄,,路徑后加"\"

If Right$(MyPath,1) <> "\" Then MyPath = MyPath & "\"

然后建立與數(shù)據(jù)庫的連接:

cnn.Provider = "Microsoft.Jet.OLEDB.4.0"   '指定提供者

'設(shè)置數(shù)據(jù)源(指定數(shù)據(jù)庫)

cnn.ConnectionString = "Data Source=" & MyPath & "Student.mdb"

cnn.Open    '與數(shù)據(jù)庫建立連接

3)設(shè)置記錄集相關(guān)屬性

設(shè)置記錄集的鎖定類型(LockType)、游標類型(CursorType),、使用的連接對象(ActiveConnection)和記錄源(Source):

'鎖定類型:開放式記錄鎖定

rs.LockType = adLockOptimistic

'游標類型:鍵集游標,允許在記錄集中進行所有類型的移動

rs.CursorType = adOpenKeyset

'設(shè)置記錄集使用的連接對象為打開的 Connection 對象

Set rs.ActiveConnection = cnn

'設(shè)置記錄集的記錄源

rs.Source = "SELECT * FROM 學籍"

說明:以上屬性的設(shè)置必須在記錄集關(guān)閉狀態(tài)下方可進行,。首次設(shè)定記錄集的鎖定類型、游標類型和連接對象后,,如果不需要改變設(shè)置內(nèi)容,,則不必重復設(shè)定。經(jīng)常發(fā)生變化的是記錄源(Source屬性),。

4)打開記錄集

用記錄集的Open方法打開記錄集,。

rs.Open

說明:如果記錄集已經(jīng)打開,調(diào)用Open方法將引發(fā)錯誤,。

5)對記錄集進行操作

在前面的“數(shù)據(jù)庫記錄的操作”一節(jié)中已作了較詳細的討論,,在此僅舉一例:

rs.MoveFirst    '指針移到首記錄

6ADO對象的關(guān)閉和釋放

調(diào)用Close方法可關(guān)閉ConnectionRecordset對象。例如:

rs.Close

cnn.Close

關(guān)閉對象并非將其從內(nèi)存中刪除,,對象關(guān)閉后可以更改其屬性設(shè)置,,然后再次打開。要將對象從內(nèi)存中完全刪除,,可將對象變量設(shè)置為Nothing,。例如:

Set rs = Nothing

Set cnn = Nothing

5. 記錄集的Open方法

前面討論打開記錄集時,事先已對記錄集的有關(guān)屬性進行了設(shè)置,,使用的是沒有參數(shù)的Open方法,。若使用帶有參數(shù)的Open方法,,可以在打開記錄集的同時設(shè)置記錄集的相關(guān)屬性。

語法:

記錄集.Open [記錄源, 活動連接, 游標類型, 鎖定類型, 命令類型]

記錄集的Open方法有五個可選參數(shù),,其中前四個參數(shù)代表了前面已經(jīng)討論過的記錄集的四個重要屬性,。最后一個參數(shù)“命令類型”與ADO數(shù)據(jù)控件的CommandType屬性相似,默認值為adCmdUnknown(未知命令類型),,可以將其設(shè)置為adCmdTextSQL語句)或adCmdTable(數(shù)據(jù)庫中表的名稱),,但必須與“記錄源”參數(shù)的內(nèi)容相對應。

設(shè)cnn為已經(jīng)與數(shù)據(jù)庫建立連接的Connection對象,,可以用以下程序段打開記錄集:

Dim rs As New ADODB.Recordset

Dim strSQL As String

strSQL = "學籍"

'用數(shù)據(jù)庫中的表作為記錄源

rs.Open strSQL, cnn, adOpenKeyset , adLockOptimistic, adCmdTable

...

rs.Close

strSQL = "SELECT * FROM 學籍 WHERE 性別=''"

'SQL語句作為記錄源

rs.Open strSQL, cnn, adOpenKeyset , adLockOptimistic, adCmdText

 

小結(jié)

1. VB提供了利用ADO訪問數(shù)據(jù)庫的兩種主要形式:ADO數(shù)據(jù)控件和ADO對象編程模型,。這兩種方式可以單獨使用,,也可以同時使用,。

2. 記錄集對象是ADO中的一個功能強大的對象,對數(shù)據(jù)庫的絕大部分操作,,如記錄指針的移動,,記錄的查找、添加,、刪除和修改等,,都是針對記錄集對象進行的。

3. 生成記錄集最常用的方法是利用SQL語句,,其中最常用的是SELECT語句,,該語句用于從數(shù)據(jù)庫中篩選(查詢)記錄集。在各種子句中,,WHERE子句使用頻率最高,,該子句指明查詢的條件。在程序代碼中,,SQL語句必須以字符串形式提供給ADO對象的相關(guān)屬性和方法,。

4. ADO數(shù)據(jù)控件與Access數(shù)據(jù)庫建立連接的常用方式是字符串連接。通常用屬性頁完成對ADO數(shù)據(jù)控件連接數(shù)據(jù)庫和指定記錄源的設(shè)置,。在程序運行時可以用代碼設(shè)置RecordSource屬性,,從而使ADO數(shù)據(jù)控件具有更大的靈活性。ADO數(shù)據(jù)控件本身不能顯示記錄集,,需通過數(shù)據(jù)綁定控件顯示和處理記錄集,。

5. 數(shù)據(jù)庫記錄的操作是針對記錄集對象的操作。記錄操作包括記錄指針的移動,,記錄的查找,、添加、刪除和修改,,這些操作是編制數(shù)據(jù)庫應用程序的主要內(nèi)容,。

6. ADO編程模型不使用ADO數(shù)據(jù)控件,,直接用代碼通過ADO對象訪問數(shù)據(jù)庫。使用ADO編程模型的一般步驟為:聲明ADO對象變量,;與數(shù)據(jù)庫建立連接,;設(shè)置記錄集相關(guān)屬性;打開記錄集,;對記錄集進行操作,;關(guān)閉和釋放ADO對象。


 


  濟南鐵道職業(yè)技術(shù)學院 信息工程系計算機應用技術(shù)教研室  技術(shù)支持:Limber Senovo

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多