|
Tipp 0527
|
Große Datenmengen im MS(H)FlexGrid anzeigen
|
|
|
Autor/Einsender: Datum: |
|
Lothar Kriegerow 14.02.2007 |
|
Entwicklungsumgebung: |
|
VB 6 |
|
|
Oft ist es erforderlich, größere Datenmengen einer Datenbank in einer Tabelle anzuzeigen. Das MS(H)Flexgrid ist zwar sehr leistungsfähig, aber
enthält z.B. ein Recordset mehr als ~31.000 Datensätze, ist eine Anzeige nicht mehr möglich, von der dem User zugemuteten Wartezeit
während des Füllvorgangs einmal ganz abgesehen.
|
Professionelle Programme arbeiten daher mit einem kleinen Trick und zeigen immer nur so viele Daten an, wie sie auch der User auf dem Bildschirm
überblicken kann. Hierzu stellt sogar das Grid die in der Praxis kaum beachtete Eigenschaft RowIsVisible zur Verfügung, mit der
festgelegt und vor allem auch abgefragt werden kann, welche Zeile noch sichtbar ist.
|
Darauf baut dieses Beispiel auf, und so werden immer nur so viele Daten aus einem zuvor geladenem Recordset geholt und angezeigt, wie benötigt werden.
Daher ist nicht nur eine sehr schnelle Anzeige der Daten gewährleistet, sondern auf diesem Weg können alle Datensätze eines Recordsets dem
User zugänglich gemacht werden, auch wenn er mehrere hunderttausend Datensätze enthält.
|
|
|
Option Explicit
Dim CON As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim RecSeiten As Long
Dim SeitenGroesse As Long
Dim Start As Long
Sub Tabelle()
Dim F As Integer
With MSFlexGrid1
.Top = 50
.Left = 50
.Row = 0
.Cols = 5: .FixedCols = 0: F = -1
F = F + 1: .ColWidth(F) = 700: .Col = F: .CellAlignment = 4
.Text = "Nr"
F = F + 1: .ColWidth(F) = 1800: .Col = F: .CellAlignment = 4
.Text = "Name"
F = F + 1: .ColWidth(F) = 1800: .Col = F: .CellAlignment = 4
.Text = "Strasse"
F = F + 1: .ColWidth(F) = 1700: .Col = F: .CellAlignment = 4
.Text = "Ort"
F = F + 1: .ColWidth(F) = 3000: .Col = F: .CellAlignment = 4
.Text = "Name2"
End With
End Sub
Private Sub Form_Load()
Set CON = New ADODB.Connection
Set Rs = New ADODB.Recordset
CON.CursorLocation = adUseClient
CON.Open "Provider=Microsoft.Jet.Oledb.4.0;Data Source=Demo.mdb"
Rs.Open "Select * from Adressen", CON, adOpenStatic, _
adLockOptimistic
Start = 0
VScroll1.ZOrder 0
Tabelle
End Sub
Sub GridFuellen(StartRec As Long, NumRecords As Long)
Dim X As Long, j As Integer
With MSFlexGrid1
If StartRec <= 1 Then StartRec = 1
.Redraw = False
.Rows = 1
For X = StartRec To (StartRec + NumRecords - 1)
If X <= Rs.RecordCount Then
.Rows = .Rows + 1: .Row = .Rows - 1
Rs.AbsolutePosition = X
For j = 0 To Rs.Fields.Count - 1
If Not IsNull(Rs(j)) Then
.Col = j
Select Case j
Case 0
.CellAlignment = 6
Case 1
.CellForeColor = RGB(140, 150, 250)
Case 3
.CellAlignment = 4
End Select
.Text = Rs(j)
End If
Next j
Else
Exit For
End If
Next X
.Redraw = True
End With
End Sub
Private Sub Form_Resize()
If Me.Height < 1500 Then Exit Sub
Dim X As Long
With MSFlexGrid1
.Height = Me.Height - 500
.Width = Me.Width - 200
.Rows = 400
.TopRow = 1
X = 1
Do Until X = 400
If .RowIsVisible(X) = False Then
SeitenGroesse = X - 2
Exit Do
End If
X = X + 1
Loop
.Rows = 1
RecSeiten = (Rs.RecordCount / SeitenGroesse)
VScroll1.Max = RecSeiten
VScroll1.Min = 0
GridFuellen Start, SeitenGroesse
VScroll1.Top = .Top + 30
VScroll1.Left = (.Width - VScroll1.Width) + 15
.LeftCol = 0
VScroll1.Height = .Height - 50
End With
End Sub
Private Sub MSFlexGrid1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 33 And VScroll1.Value > 0 Then _
VScroll1.Value = VScroll1.Value - 1
If KeyCode = 34 And VScroll1.Value < VScroll1.Max Then _
VScroll1.Value = VScroll1.Value + 1
End Sub
Private Sub VScroll1_Change()
If VScroll1.Value = 0 Then Start = 1
If VScroll1.Value * SeitenGroesse >= Start Then
Start = VScroll1.Value * SeitenGroesse + 1
Else
Start = VScroll1.Value * SeitenGroesse + 1
End If
If Start < 1 Then Start = 1
GridFuellen Start, SeitenGroesse
End Sub
|
|
|
|
Um diesen Tipp ausführen zu können, muss ein Verweis auf die Microsoft ActiveX Data Objects 2.x Library in das Projekt eingebunden werden.
|
|
Windows-Version |
95 |
|
|
98 |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
VB-Version |
VBA 5 |
|
|
VBA 6 |
|
|
VB 4/16 |
|
|
VB 4/32 |
|
|
VB 5 |
|
|
VB 6 |
|
|
|
|
Download (17,2 kB)
|
Downloads bisher: [ 405 ]
|
|
|