1. 程式人生 > >VB6基本資料庫應用(五):資料的查詢與篩選

VB6基本資料庫應用(五):資料的查詢與篩選

同系列的第五篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9633139

資料的查詢與篩選

第4篇釋出到現在已經過了4天,很抱歉,學生黨,還是悲催的高三,沒辦法,8月1就開學了。以後更新文章的速度可能會更慢,而且出完這套資料庫教程之後,未來一年都可能不會有新的教程了。就我而言是想寫下去,多寫點的,一是記錄下自己會的,另一方面把自己會的知識傳播出去,不過高三這段時間可能力不從心了。

繼續吧,看標題“包含表中區域性資料的資料集,資料的查詢”,看上去是兩項內容,實際上是一項。查詢,篩選,實際上都是為了獲取我們需要的資料,而不是將所有資料都提取出來。在這一章,我們將再次體會到SQL:Select語句的強大。

取得表中前n個或前n%的記錄

之前,我說過SQL:Select語句的一個簡化的語法,這已經是第三章的內容了,還記得嗎?複習一下:

SELECT fieldnamelist  FROM  tablename

要獲得表中前n個或前n%個記錄,儘管我們可以開啟整張表的資料,然後在用迴圈顯示資料的時候最大值為n,n為我們想要的條數這種方式來實現,但是SQL:Select語句提供一個直接的方法來讓我們獲得表中前n個或前n%個記錄。這時候我們要擴充SQL:Select語句的語法了。我們來看新的語法:

SELECT TOP n [PERCENT] fieldnamelist  FROM  tablename

我們發現新的語法在fieldnamelist前面加入了TOP n [PERCENT]這一部分,TOP和PERCENT都是SQL的關鍵字,所以我也按照我之前所說的習慣:SQL語句的關鍵字用大寫。需要先說[PERCENT],[]這樣的語法表示的是可選,也就是說TOP這樣一個關鍵字加進去之後,n是必須的了,但是PERCENT依然是可選的,如果寫上他,那n就代表前n%,是一個百分數,可取的範圍是0<n<100;而如果沒有PERCENT,那麼n就代表前n條,可取的範圍是0<n<4294967295,也就是說如果表中有10000000000(不用數了,比4294967295多一位數字)條記錄(假設吧,Access一張表最多能有多少條記錄真沒查過,說不定最多隻能有4294967295條,知道確切數字的告訴我一下,不過先假設他能儲存不止4294967295條吧),那麼你最多也只能選出前面4294967295條。

讓我們來實踐一下吧,假設我們要取出前30%的記錄,那麼我們可以這樣寫(還是在Student表,取出全部欄位)

SELECT  TOP 30 PERCENT  * FROM Student

前面說到的[PERCENT]的[]代表的是可省略,其實[]僅僅是語法表達的需要,實際上寫SQL語句是不需要寫上去的。就像我上面的SQL語句一樣。

說完語法,照例是要上VB程式碼的。不上程式碼的話大家可能會產生疑惑,SQL的語法換了,那麼這個SQL語句又應該寫在哪裡??別急,下面會回答你這個問題。

資料的條件查詢

要實現資料的查詢,就必須要使用更復雜語法的SQL:Select語句。我們來看下面的語法:

SELECT fieldnamelist  FROM  tablename WHERE 條件

會發現,這個語法比最初的語法多了一個“WHERE 條件”,但又沒有了第一節的TOP n [PERCENT]這一部分,實際上除了最初給出來的語法內容是必須的,其他都是可以根據需要增添上去的。就是這個條件實現了資料的查詢,也就是實現了把我們需要的資料從表裡面取出來,而不是像之前那樣取出一張表的全部資料。語法中“條件”兩個字實際上很虛無,到底這個條件怎麼寫呢?最簡單的是“ 欄位名='內容'”,留意裡面的一對單引號,當內容是中文的時候就需要用單引號引起來,如果不是的話與一般來說可以不用單引號。一定要注意這是單引號!

我們來寫一個語句實踐一下吧。假設我們要找出Student表中的StudentName為“黃飛鴻”的記錄,我們可以這樣寫:

SELECT  *  FROM Student  WHERE  StudentName='黃飛鴻'

前面 SELECT * FROMStudent 的部分之前已經說過,光是這樣沒有Where關鍵字就是選出全部的記錄。WHERE StudentName='黃飛鴻',就表示選出StudentName欄位中內容為“黃飛鴻”的記錄。

還是上面的實踐中的例子,需要留意的是,認真看一下實踐中我所寫的SQL語句,Select後面跟著的欄位名列表是用*的,也就是全部欄位都選出來。然後再看我SQL語句後面的解釋:“我們選出的是……的記錄”,注意是記錄,一個記錄有多個欄位的資料組成。所以,上面我寫的語句的作用不僅僅是把StudentName欄位中的“黃飛鴻”這個文字內容選了出來,同時還有StudentID欄位中他所對應的的資料662356也被選了出來。這體現了資料庫的對應關係。

現在來回答上一節的最後,提出的語法改變了,那麼新的SQL語句又要寫在什麼地方的問題。其實還是老地方,其實每呼叫一次SQL:Select語句,無論是之前的簡單語法,還是現在有Where的語法,甚至以後更復雜的語法,SQL:Select語句的作用都是返回一個數據集(如果符合Where條件的記錄找不到,那這個資料集就是空的)。所以,所有的SQL:Select語句都可以作為引數傳遞給Recordset物件的Open方法。

照樣,現在我們把實踐中寫的那個SQL語句作為引數傳遞給Recordset物件的Open方法,並顯示在表格裡。這個還是寫在Load事件裡吧。這次我把Load事件裡的程式碼全都列出來,包括之前的連線資料庫的,還有開啟整張表的程式碼,這樣做是為了給大家一個提醒,具體提醒是什麼?認真看看註釋吧,程式碼後面還會說的。

VB程式碼開始:

Private Sub Form_Load()

'建立新的Connection物件

Set Cnn = NewADODB.Connection

'注意要記住該資料庫目錄為你資料庫檔案當前的位置

Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Sample.mdb;Persist Security Info=False"

'建立新的Recordset物件

Set rec = New ADODB.Recordset

'開啟student表的全部欄位的全部內容

'adOpenKeyset, adLockOptimistic。鍵集遊標和開放式鎖。

'單純為了讀取資料應該使用只進遊標和只讀鎖。

'但是為了方便就統一使用鍵集遊標和開放式鎖了

'詳細參見第十章

rec.Open"SELECT * FROM Student", Cnn, adOpenKeyset, adLockOptimistic

'---------------------------------------------------------------------

'“----”註釋裡的是第五章新加的程式碼

'---------------------------------------------------------------------

'注意了!!如果使用之前的Recordset物件變數rec

'而且之前的rec已經被Open過了,那麼必須呼叫Close

'將其關閉之後才能再呼叫Open方法

rec.Close

'開啟student表中StudentName為“黃飛鴻”的記錄

rec.Open"SELECT * FROM Student Where StudentName='黃飛鴻'", Cnn,adOpenKeyset, adLockOptimistic

'---------------------------------------------------------------------

'這一章新加的程式碼就到這裡,下面的還是之前的程式碼

'---------------------------------------------------------------------

'資料的提取

Do Until rec.EOF =True

    List1.AddItem rec.Fields("StudentID").Value

        'Fields物件,括號裡的是索引(Index),索引填寫的內容為欄位的名稱

        'Item屬性是Fields物件的預設屬性,他的一個引數就是Index

        'Fields("Student")表示一個Field物件

        'Fields("Student")等價於

        'rec.Fields.Item ("Student")或

        'rec.Fields! ("Student")

        '!表示預設屬性

    List2.AddItem rec.Fields("StudentName").Value

    '移動下一條記錄為當前記錄

    rec.MoveNext

Loop

End Sub

VB程式碼結束:

這裡我們可以看到3行的紅色註釋(雖然VB的IDE裡的註釋是用綠色顯示的,不過這裡為了強調就用紅色),非常顯眼。這就是我要提醒大家的地方。實際的資料庫應用裡,往往需要將Recordset物件回收再用。例如這裡我需要顯示出全部的人名,待會我可能又根據使用者的需要去找某個人的記錄,或者待會可能還要排一下序。我們不可能建立那麼多的Recordset物件,如果要的話就意味著我們需要宣告很多個Recordset物件變數,這很可能會很混亂。所以Close之後重新用Open執行其他的操作,這樣的手段是經常用到的。

我們可以看到,之前的開啟整張表的程式碼我沒有去掉,然後就是在一堆註釋之後直接Close,再用Open來寫今天的程式碼了。而後面的輸出到List控制元件的程式碼也被保留了下來,接在了今天新的程式碼之後。所以現在的輸出List1裡就只有662356,List2就只有”黃飛鴻“了。

當前的程式碼執行結果如下圖:



最後,給大家留個作業吧。第一節“取得表中前n個或前n%的記錄”的SQL語句我一直沒寫用在VB上的程式碼,既然都知道了還是作為引數傳遞給Recordset物件的Open方法,那麼自己去試一下吧。以為WHERE關鍵字的作用就怎麼點??還沒完呢!下一章,我們將來講述:多重條件搜尋。本套教程未完,待續。


相關推薦

VB6基本資料庫應用資料查詢篩選

同系列的第五篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9633139 資料的查詢與篩選 第4篇釋出到現在已經過了4天,很抱歉,學生黨,還是悲催的高三,沒辦法,8月1就開學了。以後更新文章的速度可能會

VB6基本資料庫應用連線資料庫SQL語句的Select語句初步

資料庫我們已經建好了,重提一下上一章的結果,我們最後建立了一張Student的表,其中有StudentID(數字的雙精度型別)和StudentName(文字型別。補充一下,2013中有【長文字】和【短文字】,人名不會很長,根據上一章選擇儘量小的資料型別的規則,這裡就選【短文字】就可以了)。儘

VB6基本資料庫應用多重條件搜尋

同系列的第七篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/48402835 多重條件搜尋 前文再續,書接上一回。很高興又能說出這句話了。 第五章講述了條件查詢。事實上SQL:Select語句的Where

Redis系列資料結構List雙向連結串列中基本操作操作命令和原始碼解析

1.介紹 Redis中List是通過ListNode構造的雙向連結串列。 特點: 1.雙端:獲取某個結點的前驅和後繼結點都是O(1) 2.無環:表頭的prev指標和表尾的next指標都指向NULL,對連結串列的訪問都是以NULL為終點 3.帶表頭指標和表尾指標:獲取表頭和表尾的複雜度都是O(1) 4.帶連結串

《Java從入門到失業》第三章基礎語法及基本程式結構基本算數運算子1

3.7運算子       數學運算是計算機的基本用途之一,Java提供了非常豐富的運算子來支援。我們根據運算的特點和性質,把運算子劃分為幾組:基本算數運算子、自增自減運算子、關係運算符、位運算子、邏輯運算子、賦值運算子、其他運算子。下面分別介紹。 3.7.1基本算數運算子 &nb

linux基礎篇檔案歸檔不同系統間的檔案傳輸

檔案歸檔 檔案歸檔,就是把多個檔案變成一個歸檔檔案,即將多個檔案打包起來 tar命令 Unix和類Unix系統上的壓縮打包工具,可以將多個檔案合併為一個檔案,打包後的檔名亦為“tar”。tar檔案格式已經成為POSIX標準,最初是POSIX.1-1988,當前是POSIX.1-2

pandas系列學習資料連線

作者:chen_h 微訊號 & QQ:862251340 微信公眾號:coderpai 利用 Python 處理任何實際的資料時,你就需要將 pandas DataFrame 合併或者連結在一起來分析資料集,但是這個過程還是非常花費時間的,

Shell應用7nginx升級恢復

指令碼概述   nginx是一款著名的開源web伺服器,為方便升級與恢復,編寫了一個簡單的指令碼,因為升級備份了可執行檔案和配置檔案(字尾名為old),所以可用於恢復。當升級時,若nginx正在執行,則不中斷服務進行平滑升級,否則直接拷貝覆蓋;當恢復時,若nginx正在執行,則不中斷服務進行平滑恢

大學生學程式設計資料結構演算法的基本概念

為啥扯淡,因為我們開發人員很少用到它,目前流行的android開發有資料結構麼?沒有,至少你在用api的時候基本上是看不見的。c++有在STL基本容器中string, vector, list, deque, map等。人家都已經實現且以近完美,我們學它有啥用有必要嗎? 這個爭論由來已久

卷積神經網路簡單的應用模型構建訓練

模型構建文中採用了Tensorflow框架進行模型的構建,這裡簡單介紹下Tensorflow的安裝(在Anaconda上安裝):⑴Anaconda安裝:https://www.anaconda.com/download/,選擇支援py36的版本;⑵直接在命令列中安裝Tenso

PostgreSQL學習筆記資料操作

1 資料操作 1.1 插入資料 insert into <tablename> values (a,b,c,d,...); insert into <tablename>(columnname1,columnname2,...) values(a,b,...)

SVM學習鬆弛變數懲罰因子

1.鬆弛變數        現在我們已經把一個本來線性不可分的文字分類問題,通過對映到高維空間而變成了線性可分的。就像下圖這樣:        圓形和方形的點各有成千上萬個(畢竟,這就是我們訓練集中文件的數量嘛,當然很大了)。現在想象我們有另一個訓練集,只比原先這個訓練集多了一篇文章,對映到高維空間

《Python資料分析挖掘實戰》筆記資料建模

分類與預測 主要分類與預測演算法 迴歸分析 確定預測值與其他變數關係。線性、非線性、Logistic、嶺迴歸、主成分迴歸等 決策樹 自頂向下分類 人工神經網路 用神經網路表示輸入與輸出之間的關係 貝葉斯網路 又稱信度網路,是不確定知識表達和推理領域最有效的理論模

ElasticStack學習ElasticSearch索引分詞

一、正排索引與倒排索引 1、什麼是正排索引呢?   以一本書為例,一般在書的開始都會有書的目錄,目錄裡面列舉了一本書有哪些章節,大概有哪些內容,以及所對應的頁碼數。這樣,我們在查詢一些內容時,就可以通過目錄來定位到這些內容大概在哪頁。因此,書的目錄就可以稱之為正排索引(目錄頁)。 2、什麼時倒排索引呢?

PL真有意思資料型別

前言 現在大多數程式設計語言中都有表示式和/或物件的型別概念。型別起著兩種主要作用: 為許多操作提供了隱含的上下文資訊,使程式設計師可以在許多情況下不必顯示的描述這種上下文。比如int型別的兩個物件相加就是整數相加、兩個字串型別的物件相加就是拼接字串、在Java和C#中new object()隱含在背後的就

SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 後端篇 資料表設計、使用 jwt、redis、sms 工具類完善註冊登入邏輯

(1) 相關博文地址: SpringBoot + Vue + ElementUI 實現後臺管理系統模板 -- 前端篇(一):搭建基本環境:https://www.cnblogs.com/l-y-h/p/12930895.html SpringBoot + Vue + ElementUI 實現後臺管理系統模板

深入學習Gremlin8資料分組去重

第8期 Gremlin Steps: group()、groupCount()、dedup()、by() 本系列文章的Gremlin示例均在HugeGraph圖資料庫上執行,環境搭建可參考準備Gremlin執行環境,本文示例均以其中的“TinkerPop關係圖”

資料視覺化 三步走資料採集儲存,利用python爬蟲框架scrapy爬取網路資料並存儲

前言     最近在研究python爬蟲,突然想寫部落格了,那就寫點東西吧。給自己定個小目標,做一個完整的簡單的資料視覺化的小專案,把整個相關技術鏈串聯起來,目的就是為了能夠對這塊有個系統的認識,具體設計思路如下: 1. 利用python爬蟲框架scr

【Win 10 應用開發】UI Composition 劄記燈光

傳播 目標 spa 速度 review sta sset ext 集合 UI Composition 除了能夠為 UI 元素建立三維空間外,還有相當重要的一個部件——燈光。宇宙萬物的精彩繽紛,皆源於光明,光,使我們看到各種東西,除了黑洞之外的世界都是

MySqlMySQL資料庫安全管理

一、前言 對於任何一個企業來說,其資料庫系統中所儲存資料的安全性無疑是非常重要的,尤其是公司的有些商業資料,可能資料就是公司的根本。 失去了資料,可能就失去了一切 本章將針對mysql的安全相關內容進行較為詳細的介紹。 二、資料庫系統安全相關因素 1、外圍網路 讓我們的mysql處在