国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
編寫數(shù)據(jù)庫(kù)應(yīng)用程序必看

第一節(jié) ODBC API

第二節(jié) DAO 和 ADO 的技術(shù)狀態(tài)

1994年,微軟在Access 2.0 中首先引入了16位的DAO (Data Accessing
Object 數(shù)據(jù)訪問對(duì)象),以實(shí)現(xiàn)和Jet 數(shù)據(jù)庫(kù)引擎的連接,這是允許程序
員操縱Jet 引擎的第一個(gè)面向?qū)ο蟮慕涌凇?br>DAO 提供了一個(gè)復(fù)雜的可編程數(shù)據(jù)對(duì)象的層次模型,由上到下分別是:
DBEngine
Workspace
Database
TableDef
QueryDef
Recorset
DAO 的使用非常復(fù)雜,例如,為了引用 Recorset,必須從上到下逐級(jí)
引用:

DIM wname As DAO.Workspace
DIM wm1 As DAO.Database
DIM wm2 As DAO. TableDef
DIM wm3 As DAO.QueryDef
DIM wm4 As DAO.Recorset
set wname=DBEngine.Workspace(0)
.....

更重要的,DAO/Jet 并不適合客戶/服務(wù)器模式的數(shù)據(jù)庫(kù)系統(tǒng),于是,
微軟又開發(fā)出了RDO(Remote Data Object 遠(yuǎn)程數(shù)據(jù)對(duì)象), 和RDC 控
件(在MS RemoteData Control 6.0下),解決了客戶/服務(wù)器模式下,開
發(fā)象SQL Server 或 Oracle 這些大型遠(yuǎn)程數(shù)據(jù)庫(kù)的困難。

VB提供的RDO 組件在工程-〉引用:

客戶端:MS Remote Data Object 2.0
服務(wù)器端:MS Remote Data Servers 2.5 Library

MS Remote Data Servers Server 2.5 Library

顯然,這種模式需要編寫服務(wù)器端程序,在某些情況下可能是不現(xiàn)實(shí)的。

繼RDO 之后,微軟又提出了全新的ADO 技術(shù)(ActiveX Data Object
),ADO 是DAO 和RDO 的繼承者,它基于微軟提出來(lái)的OLE DB 數(shù)據(jù)訪問
模式,它可以處理目前幾乎全部關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)。

而且,它是專門為大范圍的商業(yè)數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)的,ADO 比DAO 占用
內(nèi)存少,所以它更適合大流量和大事務(wù)量的網(wǎng)絡(luò)計(jì)算機(jī)系統(tǒng)。

ADO 的影響很大,現(xiàn)在幾乎所有的非微軟開發(fā)環(huán)境都內(nèi)置了ADO 驅(qū)
動(dòng)程序。ADO 的使用也相當(dāng)方便,利用ADODC 控件(在MS ADO Data Control 6.0(OLEDB)下),可以在本地計(jì)算機(jī)上獲取本地和遠(yuǎn)程的數(shù)據(jù)
源,并且可以立刻測(cè)試聯(lián)接是否成功。

ADODC 控件,是以ADO 為父類的一個(gè)子類,所以,它繼承了ADO 的幾乎絕大多數(shù)屬性事件和方法,同時(shí),也加入了自己的屬性事件和方法。
這些屬性事件和方法,又大多數(shù)套用于一種原來(lái)基于DAO 的控件Data,為熟悉Data控件的程序員做一個(gè)合理的過渡,并且,加入了和數(shù)據(jù)綁定控件連接的內(nèi)容。

所以,同一種目的,在ADODC 中可以有兩種方式解決,這樣做的好處是給程序員帶來(lái)了方便,更重要的,ADODC 和數(shù)據(jù)綁定控件連接非常方便,但代價(jià)是無(wú)疑降低了效率。

因此,盡管使用ADODC 控件處理數(shù)據(jù)庫(kù)問題相當(dāng)方便,但是,在更多的大型數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)中,人們還是使用直接調(diào)用ADO 類的方式,因?yàn)檫@樣一來(lái),程序的效率往往更高,更靈活。

鑒于這個(gè)情況,在下面的討論中,我們兩種情況都進(jìn)行討論,具體
怎么用,要看項(xiàng)目的需要。當(dāng)然首先是從源頭說(shuō)起,先研究ADO 。

還需要說(shuō)明的是:ADODC 提供了一整套的自動(dòng)聯(lián)接方式,這些方式,
十分方便,但是,如果不明白原理,往往聯(lián)接以后還是感到自己心中無(wú)
數(shù),所以,即使您使用ADODC ,但是仔細(xì)的研究ADO 本身的東西,也還
是很有必要的。同時(shí),利用ADODC 提供的信息,也給以編程為主的ADO
提供了方便,這些我們后面都會(huì)加以介紹。

最近一兩年,ADO 技術(shù)又有了長(zhǎng)足的發(fā)展,這里首先要提到微軟的
Visual Studio.Net 平臺(tái),在這個(gè)平臺(tái)上的主導(dǎo)語(yǔ)言是Visual Basic,
Visual C++,Visual C# ,對(duì)于VB 6.0的編程人員,過渡到VB.NET是理
所當(dāng)然的事情。

微軟公司對(duì)VB升級(jí)到VB.Net的同時(shí),對(duì)數(shù)據(jù)訪問模型進(jìn)行了翻天覆
地的升級(jí)。把原來(lái)的ADO 模型升級(jí)為全新的ADO.NET數(shù)據(jù)源,
原來(lái)最重要的RecordSet 現(xiàn)在消失了,取而代之的是DataSet 和
DataReader,而且不再像原來(lái)RecordSet 那樣一次只讀取一條記錄,而
是讀取整個(gè)數(shù)據(jù)庫(kù),然后在內(nèi)存中建立一個(gè)映像,從而實(shí)現(xiàn)了斷開方式
數(shù)據(jù)庫(kù)連接和內(nèi)存管理自動(dòng)化,這是微軟的一個(gè)重大的技術(shù)突破。

但是,這并不等于說(shuō)學(xué)習(xí)ADO 技術(shù)就沒有意義了,首先,由于技術(shù)
的繼承性,ADO.NET 繼承了ADO 的大部分編程方法,另一方面,VB.NET
也還是保留了原來(lái)在VB 6.0中ADO 的COM 組件,這就是說(shuō),在VB.Net中,
我們還是可以用在VB 6.0中完全相同的方法來(lái)編寫數(shù)據(jù)庫(kù)程序,這對(duì)于
中小規(guī)模的數(shù)據(jù)庫(kù)管理系統(tǒng),也是很有意義的。

如果您主要是處理Access數(shù)據(jù)庫(kù),那么使用專為Access數(shù)據(jù)庫(kù)編寫
的DAO 技術(shù)將更直接效率更高。因此,在VB.Net中也仍然保留了DAO 的
COM 組件,但是,更改了驅(qū)動(dòng)程序,解決了在VB 6.0中DAO 不能驅(qū)動(dòng)
Access 2000 的問題,因此也得到了廣泛的應(yīng)用。

下面,我們就來(lái)仔細(xì)的研究ADO 和DAO 的有關(guān)問題。在課程的最后,
我們將通過一兩個(gè)例子,來(lái)說(shuō)明VB.NET中數(shù)據(jù)庫(kù)處理的一些方法和特點(diǎn)。


第三節(jié) ADO 最基本的內(nèi)容


ADO 的內(nèi)容比較多,我想還是分兩個(gè)層,先討論最基本最重要的內(nèi)容。

一、ADO 組件的引用

ADO 實(shí)際上是個(gè)COM 組件,它的頂層有三個(gè)對(duì)象:

Connection :指定數(shù)據(jù)源,建立和數(shù)據(jù)源的連接;
Command :對(duì)數(shù)據(jù)源a執(zhí)行指定的命令,b接受SQL 語(yǔ)句,c表名,d存儲(chǔ)過程的名字,e執(zhí)行SQL 查詢,f更新數(shù)據(jù),g插入記錄等;
Recordset: 來(lái)自表或命令執(zhí)行結(jié)果的記錄全集,操縱來(lái)自提供者的幾乎所有數(shù)據(jù)。

要應(yīng)用ADO 組件,必須在工程-〉引用:
Ms Activex data object 2.7 Library

把ADO 這個(gè)COM 組件調(diào)入當(dāng)前系統(tǒng)。
用F2 可以看到這個(gè)組件的狀況。庫(kù)的名字為ADODB,也就是在當(dāng)初設(shè)計(jì)組件的時(shí)候,工程名起的是是ADODB,所以,應(yīng)用這三個(gè)類都要構(gòu)造相應(yīng)的實(shí)例,引用時(shí)必須作如下聲明,:

Dim Cnn As ADODB.Connection
Dim Cmm As ADODB.Command
Dim Reco As ADODB.Recordset

其中,Cnn,Cmm和Reco 是用戶自定義的對(duì)象變量,為了表述方便,后面的討論我們都以這組名字作為表達(dá)的基礎(chǔ)。

真正使用,就要通過New 來(lái)建立一個(gè)ADO 的實(shí)例。

Set Cnn = New ADODB.Connection
Set Cmm = New ADODB.Command
Set Reco = New ADODB.Recordset

有時(shí),希望定義的同時(shí)構(gòu)造實(shí)例,也可以寫成(ADODB一般可以不寫):

Dim Cnn As New Connection
Dim Cmm As New Command
Dim Reco As New Recordset

值得指出的是,如果您直接使用ADODC控件,那上述方法都已經(jīng)在ADODC內(nèi)部完成了,不需要程序員自己來(lái)寫。但是,如果您不使用ADODC控件,而要使用ADO 這個(gè)類來(lái)編寫數(shù)據(jù)庫(kù)系統(tǒng)的時(shí)候,就需要使用引用COM 的標(biāo)準(zhǔn)方法。

一、數(shù)據(jù)庫(kù)連接的建立

可以有四種連接方式:

第一種(用Open)

Cnn.Provider = "驅(qū)動(dòng)程序"
Cnn.Open "數(shù)據(jù)庫(kù)名"[,"用戶名","密碼"]

Cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cnn.Open Add.path & "\獎(jiǎng)金數(shù)據(jù)庫(kù).mdb"

這里App.path給出了當(dāng)前路徑(該語(yǔ)句在VB.NET中變?yōu)?br>Application.startuppath),這樣就可以實(shí)現(xiàn)相對(duì)路徑調(diào)用數(shù)
據(jù)庫(kù)了。

第二種(用連接字符串)

Connection對(duì)象變量有一個(gè)Connectionstring,可以輸入字符串,
例如對(duì)于sql server數(shù)據(jù)庫(kù),字符串設(shè)置可用如下規(guī)則:

Provider=SQLOLEDB.1; (提供者)
Integrated Security=SSPI; (安全設(shè)置)
Persist Security Info=False; (持續(xù)的安全信息)
Initial Catalog=pubs; (初始的目錄,或默認(rèn)的數(shù)據(jù)庫(kù))
Data Source=XXX-PE (數(shù)據(jù)源--計(jì)算機(jī)名)

請(qǐng)看如下的例子:

Cnn.DefaultDatabase="pubs"
' 這個(gè)屬性是指定默認(rèn)數(shù)據(jù)庫(kù),如果沒有指定數(shù)據(jù)庫(kù)名,
'就使用這里指定的數(shù)據(jù)庫(kù)名,SQL Server通常是pubs
Cnn.Connectionstring="driver={SQL Server};Server=bigs; _
uld=sa;pws=pwd"
'其中:bigs為服務(wù)器名;sa為用戶名;pwd為密碼。
Cnn.Mode=adModeShareExclusive
'以獨(dú)占方式打開(后面會(huì)討論)
Cnn.open

第三種(使用DSN 數(shù)據(jù)源名)

Cnn.Connectionstring="DSN=pubs;UID=***;PWD=***"
'由于建立DSN 時(shí)就已經(jīng)提供了諸如上面有關(guān)的各種數(shù)據(jù),
'所以這里只需要直接調(diào)用名字就可以了。
Cnn.open

第四種(直接用Open打開)

Cnn.Open "DSN數(shù)據(jù)源名","用戶名","密碼"

實(shí)例,第一部分,建立三個(gè)數(shù)據(jù)庫(kù)的連接:
-----------------------------------------------------------------
建立三個(gè)Button,分別用三種方法打開三個(gè)庫(kù),運(yùn)行時(shí)不出錯(cuò)就代表
已連接。由于后面要用一個(gè)顯示畫面,所以一次只能打開一個(gè)數(shù)據(jù)庫(kù),看
看這里是怎么解決這個(gè)問題的?
-----------------------------------------------------------------

Dim Cnn As New Connection
Dim Cmm As New Command
Dim Reco As New Recordset

Dim Cnn1 As New Connection
Dim Cnn2 As New Connection

Dim Kzr, Kzc, kzc1, kzc2, Nd, inname, Tname


Private Sub Command2_Click()

'用字符串連接SQL SERVER 數(shù)據(jù)庫(kù)

If Kzc = True Then Cnn.Close
Kzc = True
If kzc1 = True Then
Cnn1.Close
kzc1 = False
End If
If kzc2 = True Then
Cnn2.Close
kzc2 = False
End If

Cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=XXX-PE"

'注意一下計(jì)算機(jī)名要更改

Cnn.Open

End Sub


Private Sub Command1_Click()

'打開數(shù)據(jù)庫(kù)的Provider+Open方法

If kzc1 = True Then Cnn1.Close
kzc1 = True
If Kzc = True Then
Cnn.Close
Kzc = False
End If
If kzc2 = True Then
Cnn2.Close
kzc2 = False
End If

Cnn1.Provider = "Microsoft.Jet.OLEDB.4.0"
inname = App.Path & "\獎(jiǎng)金數(shù)據(jù)庫(kù).mdb"
Cnn1.Open inname
Tname = "獎(jiǎng)金"

End Sub

Private Sub Command3_Click()

'直接使用OPEN 和DSN數(shù)據(jù)源打開數(shù)據(jù)庫(kù)

If kzc2 = True Then Cnn2.Close
kzc2 = True
If Kzc = True Then
Cnn.Close
Kzc = False
End If
If kzc1 = True Then
Cnn1.Close
kzc1 = False
End If

Cnn2.Open "Mysql"

End Sub


Private Sub Form_Load()
Kzr = False
Kzc = False
kzc1 = False
kzc2 = False
End Sub
-----------------------------------------------------------------

二、應(yīng)用Recordset打開表

前面已經(jīng)提到,Recordset對(duì)象是用于處理來(lái)自表或命令執(zhí)行結(jié)果的記錄全集,操縱來(lái)自提供者的幾乎所有數(shù)據(jù),所以,處理數(shù)據(jù)庫(kù)問題,Recordset是處在重中之重的位置,由于這是個(gè)COM 對(duì)象,應(yīng)用的時(shí)候同樣需要聲明,
并且構(gòu)造一個(gè)實(shí)例:

Dim Reco As ADODB.Recordset
Set Reco = New ADODB.Recordset

Reco.Open "數(shù)據(jù)源", Cnn [,指針形態(tài)][,鎖定方式]

其中:數(shù)據(jù)源:表名,或者SQL語(yǔ)句
指針形態(tài):
0 向后指針(默認(rèn))
1 索引鍵集
3 動(dòng)態(tài)記錄(常用)
4 靜態(tài)記錄
鎖定方式:
1 只讀(默認(rèn))
2 編輯更新
3 Updata更新
4 批次更新

實(shí)例:關(guān)于Recordset的打開
-------------------------------------------------------------
在相應(yīng)的按鈕事件中加上Reco.Open
-------------------------------------------------------------
Private Sub Command2_Click()
.............
Tname = "employee"
Reco.Open Tname, Cnn, 3, 3

'雙向指針,Updata更新
Kzr = True
End Sub

Private Sub Command1_Click()
...............................
Tname = "獎(jiǎng)金"
Reco.Open Tname, Cnn1, 3, 3
Kzr = True
End Sub

Private Sub Command3_Click()

....................
Tname = "基本表"
Reco.Open Tname, Cnn2, 3, 3
Kzr = True
End Sub

-------------------------------------------------------------

三、幾個(gè)重要的Connection對(duì)象方法

1)open方法
語(yǔ)法:
Cnn.Open [Connectionstring][,UserID][,password]

注意:Connection的Open方法是連接了數(shù)據(jù)庫(kù),但并沒有打開表。

2)Close方法

Cnn.Close
關(guān)閉已經(jīng)打開的連接,但該對(duì)象還保留在內(nèi)存中

3)清除內(nèi)存

Set Cnn=Noting

真正的消除掉



四、取得記錄集中的數(shù)據(jù)


Reco.("字段名")

Reco.Fields(index).Value '內(nèi)容
Reco.Fields(index).Name ‘字段名
Reco.Fields(index).type '字段類型
Reco.Fields(i).ActualSize '字段長(zhǎng)度

Reco.Fields.Count '字段總數(shù)


記錄數(shù)
Reco.RecordCount 記錄數(shù)

N=Reco.AbsolutePosition '當(dāng)前指針的位置

Reco.AbsolutePosition=N '把指針定位在第N筆記錄上


五、指針的移動(dòng)

Reco.MoveFirst '指針指向第一筆記錄

Reco.MoveNext '指針指向下一筆記錄

Reco.MovePrevious '指針指向上一筆記錄

Reco.MoveLast '指針指向最后一筆記錄

------------------------------------------------------------------
做一個(gè)frame用于顯示,內(nèi)部放置9個(gè)Textbox和Label數(shù)組。
開始的時(shí)候frame1.visible=false。
VarType()檢測(cè)數(shù)據(jù)庫(kù)輸出是否為空(MULL),因?yàn)榭諗?shù)據(jù)的送
出會(huì)顯示錯(cuò)誤信息,應(yīng)避免這種情況。
Showfiel()用于顯示數(shù)據(jù)
Myscreen()用于設(shè)置初始屏幕
------------------------------------------------------------------

Private Sub Showfiel()

For i = 0 To Nd - 1
If VarType(Reco.Fields(i).Value) > 1 Then
Text1(i).Text = Reco.Fields(i).Value
Else
Text1(i).Text = ""
End If
Next
End Sub

Private Sub Myscreen()

Nd = Reco.Fields.Count
If Nd >= 9 Then
Nd = 9
End If

For i = 0 To 8
Label1(i).Visible = False
Text1(i).Visible = False
Next

For i = 0 To Nd - 1
Label1(i).Caption = Reco.Fields(i).Name
Label1(i).Visible = True
Text1(i).Visible = True
Next
Reco.MoveFirst
Label2.Visible = False
frame1.visible=true
End Sub

' 在三個(gè)打開數(shù)據(jù)庫(kù)的開關(guān)事件中都寫上:
' Myscreen
' Showfiel

'第一個(gè)

Private Sub Command4_Click()
Reco.MoveFirst
Showfiel
End Sub

'上一個(gè)

Private Sub Command5_Click()
Reco.MovePrevious
If Reco.BOF Then
Reco.MoveFirst
End If
Showfiel
End Sub

'下一個(gè)

Private Sub Command6_Click()
Reco.MoveNext
If Reco.EOF Then
Reco.MoveLast
End If
Showfiel
End Sub

'末一個(gè)

Private Sub Command7_Click()
Reco.MoveLast
Showfiel
End Sub

------------------------------------------------------------------
六、Recordst重要的方法:

AddNew 創(chuàng)建一個(gè)新記錄

UpData 保存對(duì)當(dāng)前數(shù)據(jù)的修改

Delete 刪除當(dāng)前記錄

Requery 用新的SQL 查詢?nèi)ジ庐?dāng)前數(shù)據(jù)集。

------------------------------------------------------------------
增加幾個(gè)功能
------------------------------------------------------------------
'增加

Private Sub Command13_Click()
Reco.AddNew
Showfiel
End Sub

'刪除

Private Sub Command14_Click()
Reco.Delete
Reco.MoveNext
If Reco.EOF Then
Reco.MoveLast
End If
Showfiel
End Sub

'更新

Private Sub Command15_Click()

'Reco.Fields(i).Type = 3為自動(dòng)加一的字段ID,不能更新

For i = 0 To Nd - 1
If (Trim(LTrim(Text1(i).Text)) <> "") And (Reco.Fields(i).Type <> 3) Then
Reco.Fields(i).Value = Text1(i).Text
End If
Next
Reco.Update

End Sub

------------------------------------------------------------------


七、執(zhí)行SQL 語(yǔ)句

執(zhí)行SQL 語(yǔ)句是為了構(gòu)造數(shù)據(jù)集,可以用兩種方法:

1)用Connection的Execute方法

完成查詢后以記錄集的形式把數(shù)據(jù)傳回,這在數(shù)據(jù)編修的時(shí)候,需要傳回修改以后的記錄集的時(shí)候用得比較多。
語(yǔ)法:

Set Reco=Cnn.Execute("命令文字",影響記錄的筆數(shù),選擇)

“影響記錄的筆數(shù)”指的是執(zhí)行Execute方法以后,數(shù)據(jù)庫(kù)被修改的筆數(shù),對(duì)SELECT 該數(shù)值無(wú)效。

“選擇”指的是“命令文字”的意義,說(shuō)明如下:

adCmdText 數(shù)據(jù)源將傳入的“文字定義”視為命令文字,
比如SQL 語(yǔ)句。

adCmdTable 數(shù)據(jù)源將傳入的“文字定義”視為表名稱。

adCmdStoredProc 數(shù)據(jù)源將傳入的“文字定義”視為存儲(chǔ)過程,
適用于SQL Server。
adCmdUnknown 數(shù)據(jù)源不知道“文字定義”的類型,將自動(dòng)
檢測(cè),可以是SQL 語(yǔ)句,但是自動(dòng)監(jiān)測(cè)將會(huì)降低
效率,此為默認(rèn)值。

2)用Recordset的Open方法
語(yǔ)法

Reco.Open "SQL語(yǔ)句",Cnn,指針形態(tài),鎖定方式

---------------------------------------------------------------
做一個(gè)數(shù)據(jù)查詢的Frame,打開表的時(shí)候讓frame2.visible=true
放入一個(gè)Textbox(Text3)為寫入SQL 語(yǔ)言用,一個(gè)按鈕執(zhí)行查詢,
另一個(gè)按鈕用于把當(dāng)前表的名字加入。

---------------------------------------------------------------
Private Sub Command9_Click()

If Kzc Then
Reco.Close
Reco.Open Text2.Text, Cnn, 3
ElseIf kzc1 Then
Reco.Close
Reco.Open Text2.Text, Cnn1, 3
ElseIf kzc2 Then
Reco.Close
Reco.Open Text2.Text, Cnn2, 3
End If

End Sub

Private Sub Command12_Click()
Text2.SelText = Tname + " "
Text2.SetFocus
End Sub

Private Sub Command9_Click()

If Kzc Then
Reco.Close
Reco.Open Text3.Text, Cnn, 3, 3
ElseIf kzc1 Then
Reco.Close
Reco.Open Text3.Text, Cnn1, 3, 3
ElseIf kzc2 Then
Reco.Close
Reco.Open Text3.Text, Cnn2, 3, 3
End If
Showfiel
End Sub


---------------------------------------------------------------

八、Recordset查詢和過濾

Reco.Find "條件"

把指針定位在符合條件的記錄上

Reco.filter = "條件"

只顯示符合條件的記錄,注意,篩選掉的數(shù)據(jù)并沒有刪除,只是
暫時(shí)隱蔽,一旦篩選條件移除,又自動(dòng)恢復(fù)原狀,篩選移除的方法:

Reco.filter = ""

由于條件是文本的形式,所以構(gòu)造條件相當(dāng)?shù)姆奖?。條件表達(dá)式除
了>、>=、<、<=、<>、 AND、 OR、 NOT、 XOR以外,更有一種Like ,
用于處理文字類型,使用統(tǒng)配符(*或%),可以實(shí)現(xiàn)部分匹配查詢。
注意兩點(diǎn):
第一點(diǎn)是查詢表達(dá)式需要用引號(hào)時(shí),要改成單引號(hào)。
第二點(diǎn)是統(tǒng)配符必須在結(jié)尾存在:
比如:
客戶名稱 LIKE '龍*' 或 客戶名稱 LIKE '*龍*' 是正確的。
而 客戶名稱 LIKE '龍*' 是錯(cuò)誤的。

雖然SQL 和Recordset可能有相似的查詢功能,但本質(zhì)是不同的,
SQL是在服務(wù)器端處理,把查詢的結(jié)果傳入,所以更適合構(gòu)造數(shù)據(jù)集。
而Recordset查詢是在客戶端,并不影響數(shù)據(jù)集的本身,所以速度更快,
也更加精細(xì),所更適合做精細(xì)的數(shù)據(jù)處理。
------------------------------------------------------------

在實(shí)驗(yàn)程序中增加功能
------------------------------------------------------------
'Find查詢

Private Sub Command8_Click()
Reco.Find Text2.Text
If Reco.EOF() Then
MsgBox "沒有這個(gè)數(shù)據(jù)"
Reco.MoveFirst
End If
Showfiel
End Sub

'下一個(gè)

Private Sub Command8_Click()
Reco.Find Text2.Text
If Reco.EOF() Then
MsgBox "沒有這個(gè)數(shù)據(jù)"
Reco.MoveFirst
End If
Showfiel
End Sub

'過濾

Private Sub Command16_Click()
Reco.Filter = Text2.Text
Showfiel
End Sub
------------------------------------------------------------

九、分頁(yè)
設(shè)置每頁(yè)為N 筆
Reco.PageSize=N

總頁(yè)數(shù)為N
N=Reco.PageCount

設(shè)定記錄指針指向的頁(yè)數(shù)
Reco.AbsolutePage=N

取得指針指向的頁(yè)數(shù)
N=Reco.AbsolutePage

例:輸出某頁(yè)中的記錄:

Reco.AbsolutePage=2
for i=1 to Reco.pagesize
if Reco.Eof then
Exit for
end if
-----處理---------
Next

十、Recordst屬性Bof和Eof

分別指示指針指向頭以前和尾以后。
結(jié)果為true和false

----------------------------------------------------------------
下面我們?cè)O(shè)法讓構(gòu)造查詢條件變得更方便。
加入兩個(gè)List和一個(gè)Combo1,list1的style屬性選1-Checkbox為
多選型list2的list屬性加入常用的SQL命令單詞,再加入一個(gè)“字段
送出按鈕”。

Myscreen子程序增加一些List和ComboBox處理的程序,在打開
數(shù)據(jù)庫(kù)時(shí),把相應(yīng)字段名顯示出來(lái),便于組織條件的時(shí)候使用。

所以要加入一個(gè)新的過程MyscreenSQL,是因?yàn)椴樵円院罂赡茏侄?br>數(shù)目要發(fā)生變化,ComboBox要顯示新的字段值,但List卻希望顯示原
來(lái)的字段值,便于重新組織查詢。

----------------------------------------------------------------
'給Myscreen增加相應(yīng)的語(yǔ)句

Private Sub Myscreen()

Nd = Reco.Fields.Count
If Nd >= 9 Then
Nd = 9
End If

For i = 0 To 8
Label1(i).Visible = False
Text1(i).Visible = False
Next

For i = 0 To Nd - 1
Label1(i).Caption = Reco.Fields(i).Name
Label1(i).Visible = True
Text1(i).Visible = True
Next
Reco.MoveFirst
Label2.Visible = False

List1.Clear
Combo1.Clear

For i = 0 To Reco.Fields.Count - 1
List1.AddItem Reco.Fields(i).Name
Combo1.AddItem Reco.Fields(i).Name
Next
Combo1.Text = Combo1.List(0)
Frame2.Visible = True
End Sub


'做一個(gè)MyscreenSQL過程,為SQL語(yǔ)言發(fā)送用

Private Sub MyscreenSQL()

Nd = Reco.Fields.Count
If Nd >= 9 Then
Nd = 9
End If

For i = 0 To 8
Label1(i).Visible = False
Text1(i).Visible = False
Next

For i = 0 To Nd - 1
Label1(i).Caption = Reco.Fields(i).Name
Label1(i).Visible = True
Text1(i).Visible = True
Next
Reco.MoveFirst

Combo1.Clear

For i = 0 To Reco.Fields.Count - 1
Combo1.AddItem Reco.Fields(i).Name
Next
Combo1.Text = Combo1.List(0)

End Sub

'送出字段名

Private Sub Combo1_Click()
Text2.SelText = Combo1.Text
Text2.SetFocus
End Sub

'送出選中的字段列表

Private Sub Command10_Click()

Dim i, st
'List1.Selected(i) = True為選中
st = ""
For i = 0 To List1.ListCount - 1
If List1.Selected(i) = True Then
If st = "" Then
st = List1.List(i)
Else
st = st + "," + List1.List(i)
End If
End If
Next
Text2.SelText = st + " "
Text2.SetFocus
End Sub

'雙擊list2送出選中的SQL命令

Private Sub List2_DblClick()
Text2.SelText = List2.Text + " "
Text2.SetFocus
End Sub
---------------------------------------------------------------


好啦,一個(gè)完整的數(shù)據(jù)庫(kù)處理程序完成了,最后注意,退出程序,
在VB 6.0中是 Unload Me,相應(yīng)的,在VB.Net 變成了Application.Exit()。
怎么樣,很有意思吧?

十一、ADO 的Command對(duì)象

Command對(duì)象主要用于查詢數(shù)據(jù)庫(kù),并返回Recordset對(duì)象中的記錄。

常用屬性:

1)CommandText:

設(shè)置返回命令,包括SQL,表格,存儲(chǔ)過程。

如果是SQL 語(yǔ)句,CommandText的后面要跟上Execute方法。

例如:

Cmm.CommandText="SQL 語(yǔ)句"
Cmm.Execute

2)CommandType屬性:

指示如何計(jì)算CommandText的值,主要有如下幾種選擇:

adCmdText 數(shù)據(jù)源將傳入的“文字定義”視為命令文字,
比如SQL 語(yǔ)句。

adCmdTable 數(shù)據(jù)源將傳入的“文字定義”視為表名稱。

adCmdStoredProc 數(shù)據(jù)源將傳入的“文字定義”視為存儲(chǔ)過程,
適用于SQL Server。
adCmdUnknown 數(shù)據(jù)源不知道“文字定義”的類型,將自動(dòng)
檢測(cè),可以是SQL 語(yǔ)句,但是自動(dòng)監(jiān)測(cè)將會(huì)降低
效率,此為默認(rèn)值。

這個(gè)屬性在很多地方需要設(shè)置。


十二、實(shí)例:用戶名和密碼申請(qǐng)機(jī)制


第四節(jié) ADODC 控件

ADODC 是VB提供的一個(gè)基于ADO 模型的控件,調(diào)用它需要:
工程-〉部件-〉MS ADO Data Control 6.0(OLEDB)。

一、連接數(shù)據(jù)源:

屬性:
Connectionstring

1,使用ODBC數(shù)據(jù)源:如果有可以選擇,如沒有可以新建,新
建的方法與在Windows下一樣。

選擇好數(shù)據(jù)源以后,應(yīng)該能看到:
Connectionstring="DSN=***"

2, 使用連接字符串:連接字符串包括了驅(qū)動(dòng)程序, 可以利
用文件名調(diào)用,完成后要注意測(cè)試一下連接。
從效果上看,和數(shù)據(jù)源是一樣的,但可以避免每臺(tái)客戶機(jī)
上重復(fù)設(shè)置。

CommandType屬性,最好根據(jù)要求設(shè)置。

連接“表”或者初始的SQL 語(yǔ)言:
屬性:
RecordSource
對(duì)話框中出現(xiàn)“命令類型”,實(shí)際上就是設(shè)置CommandType屬性,
最好根據(jù)要求選擇:
用SQL 用 1-adCmdText
用表名用 2-adCmdTable
存儲(chǔ)過程用 4-adCmdStoredProc
不清楚用 8-adCmdUnknown

輸入表名或SQL 語(yǔ)句,就完成了數(shù)據(jù)源聯(lián)接的設(shè)置。

(提示,在直接使用ADO 的時(shí)候,如果對(duì) Connectionstring參數(shù)
或其它項(xiàng)目沒把握??梢韵扔肁DODC設(shè)置,成功后再把相應(yīng)的字符串拷
貝過去)。

ADODC 內(nèi)置了Recordset對(duì)象,所有Recordset對(duì)象的屬性和方法,
都可以采用,指令格式為:

ADODC1.Recordset.屬性或者方法

也就是說(shuō),上面所研究的關(guān)于ADO 的Recordset對(duì)象的一切屬性和
方法,都可以直接在這里使用,因此就不再重復(fù)了。

值得提出的是SQL 的使用方法:

Adodc1.RecordSource="SQL"
Adodc1.Refresh '沒有此句不反應(yīng)


二、數(shù)據(jù)綁定控件

使用ADODC 的最大的好處是,可以方便的使用數(shù)據(jù)綁定控件,這
里先介紹兩種:

1)表(Datagrid)
MS Datagrid Control 6.0
屬性
DataSource=Adodc1

2)TextBox
屬性
DataSource=Adodc1
Datafilds=字段

實(shí)例:SQL自由查詢


第五節(jié) 數(shù)據(jù)環(huán)境DataEnvironment

一、建立數(shù)據(jù)連接

在工程管理器中,右鍵 -〉添加 -〉Data Environment

這就產(chǎn)生了一個(gè)數(shù)據(jù)環(huán)境窗口DataEnvironment1。下面出現(xiàn)了一
個(gè)Connection圖標(biāo),用以實(shí)現(xiàn)和數(shù)據(jù)庫(kù)的連接。
在Connection1上右鍵 -〉屬性 ,用ADO 同樣的方法進(jìn)行數(shù)據(jù)庫(kù)
的連接。
完成以后,Connection1的ConnectionSource是連接字符串,也
可以在運(yùn)行期改變連接。
具體方法是:

DataEnvironment1.Connection1.ConnectionString=連接字符串

二、添加命令(與表的連接):

在Connection1上右鍵 -〉添加命令

就產(chǎn)生了一個(gè)Command1

右鍵,就出現(xiàn)了一個(gè)對(duì)話框:

通用-〉數(shù)據(jù)源 -〉可以選 SQL、表、存儲(chǔ)過程

例如這里選“表”,選擇表名,確認(rèn)。

在Command1的屬性:CommandType 可以改變?cè)O(shè)置,而CommandText
可以改變“表”或者SQL 命令的文字。

點(diǎn)Command1的加號(hào),可以看到字段名字。

三、添加數(shù)據(jù)庫(kù)的關(guān)聯(lián)

如果需要添加數(shù)據(jù)庫(kù)的關(guān)聯(lián),可以在Command1上右鍵 -〉添加子
命令。
于是在Command1下出現(xiàn)了一個(gè)Command2
在Command2上右鍵 -〉屬性
進(jìn)行表的連接。

打開“關(guān)聯(lián)”選項(xiàng)卡,選擇關(guān)聯(lián)字段,添加。這就實(shí)現(xiàn)了兩個(gè)表
的關(guān)聯(lián)。

四、數(shù)據(jù)庫(kù)顯示

Command1左鍵拖入窗體,就實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的顯示(左鍵為Textbox,
右鍵為DataGrid)
如果是自定義的顯示控件(例如DataGrid):
屬性:
DataSource=DataEnvironment1
DataMember=Command1 或 Command2

五、Recordset命令

如果希望使用Recordset命令,注意在DataEnvironment1下有一個(gè)
ReCommand1(其中的Command1是根據(jù)Command1的名字自動(dòng)給出的),相
當(dāng)于ADO的Recordset,可以使用Recordset命令集。

這樣,我們就可以方便的應(yīng)用數(shù)據(jù)庫(kù)了。

在熟悉了ADO 以后,DataEnvironment數(shù)據(jù)環(huán)境可以使我們?cè)O(shè)計(jì)數(shù)據(jù)庫(kù)系統(tǒng)更加方便快捷。

·          

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VB利用ADO控件連接access數(shù)據(jù)庫(kù)
VB和數(shù)據(jù)庫(kù)
《Visual Basic程序設(shè)計(jì)教程(第3版)》第7章數(shù)據(jù)庫(kù)訪問技術(shù)
VB6.0操作SQL Server——增刪改查
VB數(shù)據(jù)庫(kù)編程技術(shù)
VB+Access設(shè)計(jì)圖書管理系統(tǒng)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服