Você está na página 1de 2

1. Option Explicit 2. 3. 4. ' variables y constantes 5. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 6. 7. ' para la conexin ado 8. Private cn As ADODB.Connection 9.

' recordset principal 10. Private rs As ADODB.Recordset 11. ' recordset desconectado 12. Private rs2 As ADODB.Recordset 13. 14. ' cantidad de registros por pgina 15. Const PAGE_SIZE = 50 16. 17. Dim Registro As Integer 18. 19. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 20. 21. 22. Private Sub Form_Load() 23. 24. Dim sql As String 25. Dim cadena As String 26. Set cn = New ADODB.Connection 27. 28. 'ConnectionString 29. cadena = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ 30. "C:\Archivos de programa\Microsoft " & _ 31. "Visual Studio\VB98\biblio.MDB" 32. 33. cn.ConnectionString = cadena 34. 35. ' Abre la base de datos 36. cn.Open 37. 38. ' Crea dos recordset 39. Set rs = New ADODB.Recordset 40. 41. ' El recordset desconectado que se asigna a la funcin que lo pagina 42. Set rs2 = New ADODB.Recordset 43. 44. ' cadena sql para la tabla Authors dela base de datos biblio.mdb _ 45. del directorio de vsual basic 46. sql = "SELECT * FROM Authors Order By Au_Id" 47. 48. 'Propiedades del recordset 49. With rs 50. .CursorLocation = adUseClient 51. .PageSize = PAGE_SIZE 52. .Properties("Initial Fetch Size") = PAGE_SIZE 53. 54. ' Abre 55. .Open sql, cn, adOpenKeyset, , adAsyncFetchNonBlocking 56. 57. 'asigna el recordset devuelto por la funcin al dataGrid 58. Set DataGrid1.DataSource = Paginar_Recordset(rs) 59. 60. End With 61. 62. ' Nmero de registro actual ( en este caso 50 por pgina ) 63. Registro = PAGE_SIZE 64. 65. Command1(0).Caption = " |<< " 66. Command1(1).Caption = " < " 67. Command1(2).Caption = " > " 68. Command1(3).Caption = " >>| " 69. 70. 71. End Sub 72. 73. 74. 'Botones para navegar por las pginas 75. Private Sub Command1_Click(Index As Integer) 76. 77. Dim Pagina_Actual As Long 78. 79. With rs 80. Select Case Index 81. 82. ' Primera pgina del recordset 83. Case 0 84. Pagina_Actual = 1 85. Registro = PAGE_SIZE 86. ' Anterior pgina del recordset 87. Case 1 88. Pagina_Actual = .AbsolutePage - 1 89. Registro = Registro - PAGE_SIZE 90. If Registro < PAGE_SIZE Then 91. Registro = PAGE_SIZE 92. End If 93. ' Siguiente pgina 94. Case 2 95. Pagina_Actual = .AbsolutePage + 1 96. Registro = Registro + PAGE_SIZE 97. If Registro > rs.RecordCount Then 98. Registro = rs.RecordCount 99. End If 100. ' Ultima 101. Case 3 102. Pagina_Actual = .PageCount 103. Registro = rs.RecordCount 104. End Select 105. 106. ' Si estamos en la primera o ltima pagina sale 107. If Pagina_Actual < 1 Or Pagina_Actual > .PageCount Then 108. Exit Sub 109. End If 110. 111. ' Establece la Pgina actual al rec 112. .AbsolutePage = Pagina_Actual 113. 114. ' Asigna el recordset paginado al control Datagrid 115. Set DataGrid1.DataSource = Paginar_Recordset(rs) 116. ' visualiza en el caption la pgina actual y los registros 117. Me.Caption = Me.Caption & " - Registro actual: " & Registro & _ 118. " de " & rs.RecordCount & " registros ." 119. 120. End With 121. 122. End Sub 123.

124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237.

'funcin que retorna el recordset ya paginado '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function Paginar_Recordset(recset As ADODB.Recordset) As ADODB.Recordset Dim Fila As Long Dim Campo As Field Dim P As Long P = IIf(recset.AbsolutePage > 0, recset.AbsolutePage, 1) 'Recordset desconectado With rs2 ' Si el recordset est abierto entonces lo cierra If .State = adStateOpen Then .Close End If ' Define y Crea los campos al recordset con Append For Each Campo In recset.Fields .Fields.Append Campo.Name, Campo.Type, _ Campo.DefinedSize, Campo.Attributes Next Campo ' Lo Abre para agregarle los registros rs2.Open For Fila = 1 To PAGE_SIZE ' si est en el final sale If recset.EOF Then Exit For End If ' va aadiendo los registros .AddNew ' Recorre los campos For Each Campo In recset.Fields ' Asigna el nombre del campo rs2(Campo.Name) = Campo.Value Next Campo 'Actualiza el recordset desconectado y el otro recordset .Update ' mueve al siguiente registro recset.MoveNext Next Fila ' Mueve al primer registro .MoveFirst ' Establece la pgina actual recset.AbsolutePage = P End With ' devuelve a la funcin el conjunto de datos, es decir el recordset paginado Set Paginar_Recordset = rs2 ' Muestra la pgina actual en el caption del formulario Me.Caption = " Pgina: " & CStr(rs.AbsolutePage) & _ " de " & CStr(rs.PageCount) End Function ' redimensiona y posiciona el datagrid y los cuatro commandbutton '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Form_Resize() Dim i As Integer Dim tTop As Single On Local Error Resume Next ' posiciona y redimensiona el datagrid DataGrid1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight - 350 ' posiciona y redimensiona los commandbutton tTop = DataGrid1.Top + DataGrid1.Height Command1(0).Move 0, tTop, 600, 350 For i = 1 To 3 Command1(i).Move Command1(i - 1).Left + Command1(i - 1).Width, _ tTop, 600, 350 Next End Sub 'Descarga los recordset, la conexin ado y los cierra ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Form_Unload(Cancel As Integer) Set DataGrid1.DataSource = Nothing If Not rs2 Is Nothing Then If Not rs2.State = adStateClosed Then rs2.Close End If Set rs2 = Nothing End If If Not rs Is Nothing Then If Not rs.State = adStateClosed Then rs.Close End If Set rs = Nothing End If If Not cn Is Nothing Then If Not cn.State = adStateClosed Then cn.Close End If Set cn = Nothing End If End Sub

Você também pode gostar