Recordset資料表分頁
来源:百度文库 编辑:神马文学网 时间:2024/04/27 18:29:51
Recordset資料表分頁 - 小瓜瓜 首頁
●用ADO去讀取很大的資料庫時,若沒有用SQL語法去做篩選時,所得到的資料表會拖慢執行的效能,ADO的執行效能還算不錯,但最花時間的則是由ADO的Recordset裡把資料提出來作顯示的動作,解決方法就是不要一次就列出所有的資料,以每一次只顯示個幾筆的方式來減少顯示大批資料所浪費的時間。
Dim MyDBS As New ADODB.Connection '在這裡宣告是讓ADODB.Connection可跨過不同的Sub與Function
Dim MyRec As New ADODB.Recordset
●要把他它移植到ASP前,先來練練簡單的分頁技巧:
●用ADO去讀取很大的資料庫時,若沒有用SQL語法去做篩選時,所得到的資料表會拖慢執行的效能,ADO的執行效能還算不錯,但最花時間的則是由ADO的Recordset裡把資料提出來作顯示的動作,解決方法就是不要一次就列出所有的資料,以每一次只顯示個幾筆的方式來減少顯示大批資料所浪費的時間。
●在這裡,將會學到如何用程式碼把一個資料表分成好幾頁來顯示:
●這是這一次的主角! (一般)Dim MyDBS As New ADODB.Connection '在這裡宣告是讓ADODB.Connection可跨過不同的Sub與Function
Dim MyRec As New ADODB.Recordset
- Private Sub Form_Load()
- MyDBS.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\database\db01.mdb"
- MyRec.PageSize = 15
- '設定每一頁有15筆
- MyRec.CursorType = adOpenStatic
- MyRec.Open "星座表", MyDBS
- MyPage = 1
- For I = 1 To MyRec.PageCount
- List2.AddItem I
- '算出有幾頁,並列到List2里
- MyRec.Move (MyRec.RecordCount - 1) - ((1 - 1) * MyRec.PageSize)
- '假設資料有88筆而每頁15筆資料,若倒著回去算的話
- '第一頁的第一筆資料也就等於第88筆資料
- '而第一頁的第二筆一料就等於第87筆資料
- '依此類推,第二頁的第一筆一料就是第 88 - 15筆資料
- '依此類推,第三頁的第一筆一料就是第 88 - (15 * 2)筆資料
- For I = 1 To 15
- List1.AddItem MyRec.Fields(0) & Chr(9) & MyRec.Fields(1)
- MyRec.MovePrevious
- If MyRec.BOF Then Exit For
- MyRec.MovePrevious
- MyRec.PageSize = 15
- Private Sub List2_Click()
- List1.Clear
- MyRec.AbsolutePosition = (MyRec.RecordCount - 1) - ((CInt(List2.Text) - 1) * MyRec.PageSize) + 1
- For I = 1 To 15
- List1.AddItem MyRec.Fields(0) & Chr(9) & MyRec.Fields(1)
- MyRec.MovePrevious
- If MyRec.BOF Then Exit For
- MyRec.MovePrevious
- MyRec.AbsolutePosition = (MyRec.RecordCount - 1) - ((CInt(List2.Text) - 1) * MyRec.PageSize) + 1
●要把他它移植到ASP前,先來練練簡單的分頁技巧:
-
-
- <%
- TotalPage=15
- MyPage = Request("page")
- If MyPage = "" Then MyPage = 1
- Response.Write "現在是在第" & MyPage & "頁上
"- For I = 1 To TotalPage
- Response.Write "" & "第" & I & "頁 "
- '在字串裡,兩個 " 代表他是一個 " 文字。
- MyPage = Request("page")
- TotalPage=15
-
●按按頁數,看看分頁的基本功能是否能正常運作。
●成功了之後,移植到ASP裡:
-
- <
-
- <%
- Set MyDBS = CreateObject("ADODB.Connection")
- Set MyRec = CreateObject("ADODB.RecordSet")
- MyDBS.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\database\db01.mdb"
- MyRec.PageSize = 15
- MyRec.CursorType = 1
- '注意囉!這裡絕對是 1
- '因為ASP Server看不懂沒有定義的常數
- '有些書上這裡會用常數代替,以致很多網友怎麼試都失敗
- '除非你有先做定義常數:Const adOpenKeyset = 1 除外
- MyRec.Open "星座表", MyDBS
- MyPage = Request("page")
- If MyPage = "" Then MyPage = 1
- TotalPage = MyRec.PageCount
- Response.Write "現在是在第" & MyPage & "頁上
"- For I = 1 To TotalPage
- Response.Write "" & "第" & I & "頁 "
- MyRec.Move (MyRec.RecordCount - 1) - ((MyPage - 1) * MyRec.PageSize)
- Response.Write "
"
"- Response.Write "
Next "" & MyRec.Fields(0).Name & " "- Response.Write "
" & MyRec.Fields(1).Name & " "- Response.Write "
" & MyRec.Fields(2).Name & " "- Response.Write "
" & MyRec.Fields(3).Name & " "- Response.Write "
" & MyRec.Fields(4).Name & " - For I = 1 To 15
- Response.Write "
"" & MyRec.Fields(0) & " "- Response.Write "
" & MyRec.Fields(1) & " "- Response.Write "
" & MyRec.Fields(2) & " "- Response.Write "
" & MyRec.Fields(3) & " "- Response.Write "
" & MyRec.Fields(4) & " - MyRec.MovePrevious
- If MyRec.BOF Then Exit For
- Response.Write "
- Response.Write "
- Set MyRec = CreateObject("ADODB.RecordSet")
- Set MyDBS = CreateObject("ADODB.Connection")
-
●在程式的開發過程中,資料表的欄位都有機會被增增減減,使用Recordset.Fields(欄位編號)的寫法並不妥,建議使用Recordset.Fields("欄位名稱")的寫法,如MsgBox RS.Fields("客戶名稱")