VB5.0中數(shù)據(jù)庫查詢分析論文
時間:2022-09-17 05:30:00
導(dǎo)語:VB5.0中數(shù)據(jù)庫查詢分析論文一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:查詢模塊是數(shù)據(jù)庫管理系統(tǒng)中不可缺少的部分。本文介紹在vb5.0環(huán)境下四種數(shù)據(jù)庫查詢的實現(xiàn)方法,并主要介紹了使用SELECT-SQL語句來實現(xiàn)數(shù)據(jù)庫的查詢功能
關(guān)鍵字:VB5.0數(shù)據(jù)庫表查詢SQL
VB全稱VisualBasic,是微軟公司推出的基于Windows的可視化編程環(huán)境,以其簡單易學(xué)、編程簡潔、程序集成化高、功能強大而倍受程序員及廣大電腦愛好者的青睞。它在數(shù)據(jù)庫應(yīng)用方面也有相當(dāng)強大的功能。
查詢模塊是數(shù)據(jù)庫管理系統(tǒng)中不可缺少的部分。在VB中進(jìn)行數(shù)據(jù)庫記錄查詢操作,根據(jù)打開數(shù)據(jù)庫的方式來確定。大概有四種查詢方法:SEEK方法查詢、FILTER屬性查詢、Find方法查詢、SQL查詢。本文對前三種方法只作簡單說明,著重介紹第四種SQL查詢方法。
1、SEEK方法查詢、FILTER屬性查詢、Find方法查詢的簡單說明。
用SEEK方法查詢:
這種方法只使用于以O(shè)PENTABLE方式打開的數(shù)據(jù)表,而且在查詢之前必須要對查詢字段建立索引文件,由于已建立了索引文件,所以查詢速度快,這種方式結(jié)果是將指針移到符合條件的第一個記錄。例如:
SETTB=DB.OPENTABLE(“INPUT”)
TB.INDEX=”NAMEINDEX”
TB.SEEK”=”,“石腦油”
用FILTER屬性查詢:
FILTER屬性查詢是用來過濾數(shù)據(jù)的,只要我們給定過濾條件就可以將所需的記錄篩選出來。需要說明的是,我們需要將以Filter屬性篩選出來的數(shù)據(jù)集打開才能對其進(jìn)行操作。例如:
SetDy1=db.CreateDynaset(“input”)
Dy1.Filter=”物資名稱like‘石*’”
SetDy2.Dy1.CreateDynaset()
用Find方法查詢。
Find查詢有Findfirstfindnext兩個方法,每次查詢到一個記錄。例如:
SetDy=db.CreateDynaset(“input”)
S=”到貨數(shù)量>100and物資名稱like‘石腦油’”
Dy.FindfirstS
Dy.FindnextS
2、用SQL查詢。
2.1、Select-SQL查詢語句的格式:
SQL(STRUCTUREQUERYLANGUAGE)即結(jié)構(gòu)化查詢語言,是查詢關(guān)系型數(shù)據(jù)庫的常用語言。由于SQL語言使用方便、功能豐富、簡單易學(xué)得到很快的應(yīng)用和推廣,是各種關(guān)系型數(shù)據(jù)庫的公用語言。使用SQL查詢可以從一個表或多個表或視圖中對數(shù)據(jù)庫進(jìn)行查詢(有關(guān)SQL的更多信息,請參閱相關(guān)書籍,本文不多介紹)。它的核心語句是Select-SQL語句。
Select-SQL查詢語句的格式:
SELECT[DICTINCT/ALL]----查詢目標(biāo)列
FROMtableexpression----------表名/視圖名
[WHERE]---------------------------條件
[GROUPBY...]--------------------將查詢結(jié)果的記錄分組
[HAVING...]------------------------滿足條件的分組
[ORDERBY...]---------------------對查詢結(jié)果進(jìn)行排序
下面應(yīng)用筆者完成的《供應(yīng)處物資管理軟件》為例,。說明使用SELECT-SQL查詢語句實現(xiàn)查詢模塊具體方法。
2.2單項查詢模塊的實現(xiàn):
2.2.1應(yīng)用的數(shù)據(jù)庫in_db.mdb中包含表:input字段名:物資名稱、供貨單位、供貨日期、到貨數(shù)量、總金額…….等等。
2.2.2定義窗體及控件:如下表
主要控件及名稱屬性設(shè)置說明
Frame(frame1)caption字段選擇
Optionbutton(Option1)caption物資名稱
字段選擇Optionbutton(Option2)caption供貨單位
Optionbutton(Option3)caption供貨日期
Optionbutton(Option4)caption到貨數(shù)量
Optionbutton(Option5)caption總金額
Textbox(text1)Text為空查詢值
Textbox(text2)Text為空
Commandbutton(command1)caption確定確定本次查詢
Commandbutton(command2)caption取消取消本次查詢
Commandbutton(command3)caption結(jié)束結(jié)束查詢
Data(data1)Caption數(shù)據(jù)瀏覽
databasenamed:\zu_vb\in_db.mdb
Dbgrid(dbgrid1)datasourceData1查詢結(jié)果顯示
如圖(1):單項查詢模塊窗體圖
2.2.3編寫程序代碼:
上述設(shè)計完成后,可以對窗體及控件的事件編寫代碼:
‘變量定義
Dimmy_dbAsDatabaseDimmy_drAsRecordsetDimField_val1AsStringDimField_val3AsDate
DimField_val32AsDate
DimField_val4AsInteger
DimField_val42AsInteger
DimSearch_txtAsInteger
PrivateSubForm_Load()Search_txt=1Text1.Text=""Text2.Text=""Label2.Caption=""EndSub
PrivateSubCommand1_Click()‘確定按鈕
SelectCaseSearch_txt
Case1‘若選擇“物資名稱”
Field_val1=Text1.Text
Setmy_db=OpenDatabase("d:\zu_vb\in_db.mdb")
Setmy_dr=my_db.OpenRecordset("input")
ss1="select*frominputwhere(物資名稱="&"''''"&Field_val1&"'''')"
Data1.RecordSource=ss1
Data1.Refresh
Case2‘若選擇“供貨單位”
...
Case3‘若選擇“供貨日期”
Field_val3=Text1.Text
Field_val32=Text2.Text
IfVal(DateDiff("d",(Text1.Text),(Text2.Text)))>=0Then
Setmy_db=OpenDatabase("d:\zu_vb\in_db.mdb")
Setmy_dr=my_db.OpenRecordset("input")
ss1="select*frominputwhere供貨日期between"&"#"_
&Field_val3&"#"_&"and"&"#"&Field_val32&"#"Data1.RecordSource=ss1Data1.RefreshElsezz=MsgBox("您輸入的起始日期比終止日期大,請重新輸入!",vbCritical,"嚴(yán)重警告,輸入無效!")
EndIf
Case4‘若選擇“到貨數(shù)量”
Field_val4=Text1.Text
Field_val42=Text2.Text
Setmy_db=OpenDatabase("d:\zu_vb\in_db.mdb")
Setmy_dr=my_db.OpenRecordset("input")
ss1="select*frominputwhere到貨數(shù)量between"&Field_val4_
&"and"&Field_val42
Data1.RecordSource=ss1
Data1.Refresh
Case5
...
EndSelect
EndSub
PrivateSubCommand2_Click()‘取消查詢
Text1.Text=""
Text2.Text=""
EndSub
PrivateSubCommand3_Click()‘結(jié)束查詢
UnloadMe
EndSub
PrivateSubOption1_Click()‘選定“物資名稱”字段
Search_txt=1
Text1.Text=""
Label2.Caption=""
Text2.Enabled=False‘text2設(shè)為無效
Text2.Visible=False‘text2設(shè)為不顯示
Text1.SetFocus
EndSub
PrivateSubOption2_Click()‘選定“供貨單位”字段
(略)
EndSub
PrivateSubOption3_Click()‘選定“供貨日期”字段Search_txt=3Text1.Text=""Text1.Text=Date‘起始日期Text2.Text=Date‘終止日期
Label2.Caption="至"
Text2.Enabled=True
Text2.Visible=True
Text1.SetFocus
EndSub
PrivateSubOption4_Click()‘選定“到貨數(shù)量”字段
Search_txt=4
Text1.Text=""
Text2.Text=""
Text1.Text=Format(Text1.Text,"###,###,##0.00")‘設(shè)置字段格式為數(shù)值型
Text2.Text=Format(Text2.Text,"###,###,##0.00")‘設(shè)置字段格式為數(shù)值型
Label2.Caption="至"
Text2.Enabled=True
Text2.Visible=True
Text1.SetFocus
EndSub
PrivateSubOption5_Click()‘選定“總金額”字段
(略)
EndSub
PrivateSubText1_LostFocus()
‘判斷如果選定的是“供貨日期”字段,text1的輸入值必須是日期型的IfSearch_txt=3Then
IfNotIsDate(Text1.Text)Then
z=MsgBox("非法日期!請重新輸入!",vbCritical,"嚴(yán)重警告,輸入無效!")
Text1.SetFocus
EndIf
EndIf
EndSub
PrivateSubText2_LostFocus()
‘判斷如果選定的是“供貨日期”字段,text2的輸入值必須是日期型的
IfSearch_txt=3Then
Text2.Text=Format(Text2.Text,"yyyy-mm-dd")
IfNotIsDate(Text2.Text)Then
z=MsgBox("非法日期!請重新輸入!",vbCritical,"嚴(yán)重警告,輸入無效!")
Text2.SetFocus
EndIf
EndIf
EndSub
2.3多項復(fù)合查查詢模塊的實現(xiàn):
2.3.1應(yīng)用的數(shù)據(jù)庫in_db.mdb中包含表:input字段名:物資名稱、供貨單位、供貨日期、到貨數(shù)量、總金額…….等等。
2.3.2定義窗體及控件:如下表主要控件及名稱屬性設(shè)置說明
Frame(frame1)caption查詢條件選擇
ComboBoxcaption為空物資名稱選擇
TextBox(text1)Text為空起始日期
TextBox(text2)Text為空終止日期
CommandButton(command1)caption確定確定本次查詢
CommandButton(command2)caption結(jié)束結(jié)束查詢
Data(data1)Caption數(shù)據(jù)瀏覽
databasenamed:\zu_vb\in_db.mdb
DbBrid(dbgrid1)datasourceData1查詢結(jié)果顯示
如圖(2)多項查詢模塊窗體圖
2.3.3編寫程序代碼:
上述設(shè)計完成后,可以對窗體及控件的事件編寫代碼:
下面程序可實現(xiàn)“物資名稱”為某值,供貨日期在一定范圍的采購明細(xì)的查詢。
‘定義變量
Dimmy_dbAsDatabaseDimmy_drAsRecordsetDimcom_txtAsStringDimtxt1AsDateDimtxt2AsDatePrivateSubCommand1_Click()
‘判斷如果輸入值不是日期型的,是無效值IfNotIsDate(Text1.Text)Thenz=MsgBox("非法起始日期,請重新輸入!",vbCritical,"嚴(yán)重警告,輸入無效!")
Text1.SetFocus
Else
IfNotIsDate(Text2.Text)Then
z=MsgBox("非法終止日期,請重新輸入!",vbCritical,"嚴(yán)重警告,輸入無效!")
Text2.SetFocus
Else
IfVal(DateDiff("d",(Text1.Text),(Text2.Text)))>=0Then
''''''''''''*****設(shè)置條件*********
com_txt=bo1.Text
txt1=Form5.Text1.Text
txt2=Form5.Text2.Text
Setmy_db=OpenDatabase("d:\zu_vb\in_db.mdb")
Setmy_dr=my_db.OpenRecordset("input")
ww1="select*frominputwhere(物資名稱="&"''''"&com_txt&"''''"_
…&"and(供貨日期between"&"#"&txt1&"#"_
&"and"&"#"&txt2&"#))"
Data1.RecordSource=ww1
Data1.Refresh
Else
zz=MsgBox("您輸入的起始日期比終止日期大,請重新輸入!",vbCritical,"嚴(yán)重警告,輸入無效!")
EndIf
EndIf
EndIf
EndSub
PrivateSubForm_Load()
‘將項目“石腦油”、輕烴、純苯………添加到combo1控件中
Combo1.AddItem"石腦油"
Combo1.AddItem"輕烴"
Combo1.AddItem"純苯"
Combo1.AddItem"丙烯腈"
Combo1.AddItem"甲基丙烯酸甲脂"
Combo1.AddItem"聚丁二烯乳膠"
Combo1.AddItem"C2"
Combo1.AddItem"C3/C4"
Combo1.AddItem"C5"
Combo1.AddItem"鹽酸"
Combo1.AddItem"液堿"
Combo1.Text="石腦油"‘設(shè)置combo1的初始值
Text1.Text=Date‘設(shè)置text1text2為日期形式,執(zhí)行時并顯示當(dāng)前日期。
Text2.Text=Date
EndSub
3、結(jié)束語:
本文對VB數(shù)據(jù)庫查詢功能做了簡單的說明,特別對Select-SQL語句進(jìn)行了詳細(xì)的介紹,為了節(jié)省篇幅,以上只給出了窗體控件的屬性和代碼的核心部分,并去掉了許多修飾性的內(nèi)容,感興趣的讀者在此基礎(chǔ)上稍加擴(kuò)充或修改,便可得到更完善的通用查詢模塊。(以上程序均在WINDOWS98環(huán)境下VB5.0中運行通過。)