明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Visual Basic訪問數(shù)據(jù)庫的經(jīng)常見問題

[摘要]VB6.0的數(shù)據(jù)訪問技術(shù)有無任何的改進(jìn)?VB6.0的數(shù)據(jù)訪問技術(shù)有了許多改進(jìn):1. ADO2.0/OLE DB 數(shù)據(jù)庫連接更廣泛。2. 新的Oracle schema及Stored procedur...
VB6.0的數(shù)據(jù)訪問技術(shù)有無任何的改進(jìn)?
VB6.0的數(shù)據(jù)訪問技術(shù)有了許多改進(jìn):
1. ADO2.0/OLE DB 數(shù)據(jù)庫連接更廣泛。
2. 新的Oracle schema及Stored procedure設(shè)計能力。
3. Data Environment 可以設(shè)計基于ADO的數(shù)據(jù)庫連接。
4. 整合新的Report Designer。
5. MHFlexGrid控件可顯示分層數(shù)據(jù)。
6. 改進(jìn)的Data Binding技術(shù)。
 

在Visual Basic 6.0中什么是 Data Report Designer?
微軟的Visual Basic 6.0 Data Report Designer是內(nèi)嵌于VB6.0的分層式報表設(shè)計器。Report Designer 使開發(fā)者能從新的Data Environment Designer 中用把對象拖放入分級的報表設(shè)計器中,來創(chuàng)建基于文本的,單級或多級的報表,可用于打印或保存為txt或html格式的文件。另外,Data Report Designer 便于VB6.0 開發(fā)人員以程序方式控制他們整個報表的操作,就像數(shù)據(jù)集成和驗(yàn)證,都在VB6.0 的開發(fā)環(huán)境中完成。該工具與VB5 所帶的Crystal Report 工具相比,其與開發(fā)環(huán)境的集成程度有了較大程度的提高。
" 我查詢 ADO recordset的RecordCount屬性總是返回 -1。
在ADO 1.5版本時當(dāng)我們用adOpenForwardonly 游標(biāo)類型打開記錄集時,RecordCount屬性返回 -1,在ADO 2.0, 2.1和2.5版本時用adOpenDynamic類型也會發(fā)生這種情況。因此如果要訪問記錄集的RecordCount屬性,請使用adOpenKeyset 或 adOpenStatic作為Server端的游標(biāo)或使用客戶端的游標(biāo)打開記錄集。另外請注意使用的LockType,有些LockType會強(qiáng)制改變游標(biāo)類型。如果數(shù)據(jù)供給程序不支持你所設(shè)的游標(biāo)類型,數(shù)據(jù)供給程序可能會使用一種相近的游標(biāo)作為替換,也造成游標(biāo)類型的改變,請同時參照數(shù)據(jù)供給程序的文檔。
 

如何在VB中使用ADO SHAPE Command 實(shí)現(xiàn)分層記錄集?
分層記錄集通過客戶端游標(biāo)引擎實(shí)現(xiàn)的MSDataShape provider提供數(shù)據(jù)。層次結(jié)構(gòu)的記錄有點(diǎn)類似于使用JOIN 和 GROUP BY 的SQL 語句,但又有不同,后者返回的記錄集包含了主表和從表的字段,而前者的記錄集僅含有主表的字段,另外,這個記錄集也含有一個附加的字段代表相關(guān)從表的數(shù)據(jù),你可以將它賦給另一個記錄集變量。當(dāng)你為統(tǒng)計功能使用GROUP BY 和統(tǒng)計函數(shù)時,統(tǒng)計值總出現(xiàn)在記錄集上,而使用分層記錄統(tǒng)計信息會出現(xiàn)在主記錄集上而子記錄集還保存著子記錄的詳細(xì)內(nèi)容。

有三種類型的SHAPE可供選擇,基于關(guān)系的(Relation Based),基于參數(shù)的(Parameter Based)和基于組的(Group Based) 語法如下:
SHAPE {parent-statement}
APPEND Aggregate
({child-statement} [As Alias]
RELATE parent-field TO child-field parameter-marker
[, parent-field TO child-field parameter-marker ...])
[, Aggregate ({child statement})...]
SHAPE {non-normalized-statement} [AS Alias]
COMPUTE Aggregate
Alias
({child-statement} [As Alias] RELATE parent-field TO
child-field parameter-marker)
[, Aggregate Alias ({child-statement}...)]
[BY grouping-field [, grouping-field]]
SHAPE {non-normalized-statement} [AS Alias]
BY grouping-field [, grouping-field]
詳細(xì)信息請查閱:msdn\knowedge Base : Q189657
 

如何使用ADO訪問加密的Access數(shù)據(jù)庫?
如果你希望打開一個有口令保護(hù)的Access數(shù)據(jù)庫,你可以用以下三種語法的任一種:
Dim MyConn As New ADODB.Connection
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Properties("Data Source") = "C:\...\JetPassword.MDB"
MyConn.Properties("Jet OLEDB:Database Password") = "MyPwd"
MyConn.Open
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Data Source=C:\...\JetPassword.MDB;" & _
Jet OLEDB:Database Password=MyPwd"
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Open ConnectionString:=strConn
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
Data Source=C:\...\JetPassword.MDB;" & _
"Jet OLEDB:Database Password=MyPwd"
MyConn.Open ConnectionString:=strConn
如果你打開一個數(shù)據(jù)庫使用了Jet安全保護(hù),你需要使用以下方式:
Dim MyConn As New ADODB.Connection
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Properties("Data Source") = "C:\...\JetSecurity.MDB"
MyConn.Properties("Jet OLEDB:System database") = "C:\...\System.MDW"
MyConn.Open UserID:="Admin", Password:="MyPwd"
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Data Source=C:\...\JetSecurity.MDB;" & _
"Jet OLEDB:System database=C:\...\System.MDW"
MyConn.Provider = "Microsoft.Jet.OLEDB.3.51"
MyConn.Open ConnectionString:=strConn, _
UserID:="Admin", Password:="MyPwd"
-或-
Dim MyConn As New ADODB.Connection
Dim strConn As String
strConn = "Provider=Microsoft.Jet.OLEDB.3.51;"
"Data Source=C:\...\JetSecurity.MDB;" & _
"Jet OLEDB:System database=C:\...\System.MDW"
MyConn.Open ConnectionString:=strConn, _
UserID:="Admin", Password:="MyPwd"

注意:Jet 3.51 OLEDB provider 被設(shè)計用來打開Access97數(shù)據(jù)庫,如果你要打開Access 2000 請使用Jet 4.0 OLEDB provider,當(dāng)然Jet 3.51 OLEDB provider也能打開Access 97。
如果你希望使用Jet 4.0只要將Microsoft.Jet.OLEDB.3.51換成Microsoft.Jet.OLEDB.4.0
 

我用VB編寫程序發(fā)布到某些計算機(jī)上,在連接Access數(shù)據(jù)庫時出現(xiàn)運(yùn)行時錯誤"3706: ADO could not find the specified provider",這是什么問題?
MDAC 2.0會安裝Jet OLE DB provider 3.51版本。MDAC 2.1會安裝Jet OLE DB provider 4.0版本,但如果機(jī)器上已經(jīng)安裝了3.51版本,MDAC 2.1不會刪除也不會覆蓋舊的3.51版本,這就使節(jié)3.51和4.0同時存在與你的開發(fā)機(jī)上。當(dāng)連接Access數(shù)據(jù)庫時,Jet OLE DB provider需要檢查provider的版本號。而你在制作安裝包時僅包含了MDAC 2.1,目標(biāo)機(jī)上自然不可能有Jet OLE DB provider 3.51版本被安裝,這就是錯誤發(fā)生的原因。此時你需要修改你的程序,使其使用4.0的Jet OLE DB provider。