| |
ADO.NET / DatenbankenAnzeige größerer Datenmenge ist sehr langsam | | | Autor: JuppG | Datum: 25.03.16 16:22 |
| Hallo zusammen,
Ich möchte ein VB6-Projekt auf vb 2013 umstellen.
Im Prinzip klappt das ganz gut, aber ich habe ein schweres Problem mit dem Datenzugriff. Die von mir geschriebene Routine ist einfach zu lahm.
Die Aufgabe:
Anzeige eines Formulars mit zwei Dattagridviews und einem Einzelsatz.
Es sollen alle Kunden mit Rapporten (Aufträgen), die einen bestimmten Status (oder auch mehrere) haben, in einem Datagridview angezeigt werden.
Dann sollen sofort die Aufträge des Kunden aus der ersten Zeile des Datagridviews mit dem vorgegebenen Status in dem zweiten Datagridview angezeigt werden.
In der Einzelanzeige soll dann sofort die Anlage (Gerät), falls im Auftrag vorhanden, angezeigt werden.
Vorgabe des Kunden sind sowohl dieser Ablauf als auch die Verwendung einer Access-Datenbank.
Der Connection-String verweist auf eine Access-Datenbank auf einem Server.
Die eigentliche Lesen ist in eine Funktion ausgelagert.
Fehlerbehandlung und andere Zwischenschritte habe ich weggelassen, um das Wesentliche zu zeigen.
Mengengerüst:
Kunden ca. 5.000 - 6.000
Papporte ca. 30.000
Anlagen ca. 15.000 (nicht jeder Auftrag betrifft eine Anlage)
Unter VB6 wird das Formular innerhalb weniger als einer Sekunde komplett angezeigt, in der neuen Version benötigt es mehr als 10 Sekunden und ist nicht akzeptabel für den Kunden.
Da ich sicher bin, dass es an meiner Programmierung liegt, hier der Source Code:
Dim zDTR As New DataTable, zDTK As New DataTable, zSel As String
Erster Schritt: Lesen der Kunden mit einem bestimmten Status ind das erste Datagridview (im Debugger Verzögerung mittel):
zSel = "SELECT DISTINCT Kunde.KDNr, Feld2, ..., Feldn, Rapport.Status " & _
"FROM Kunde INNER JOIN Rapport ON Kunde.KdNr = Rapport.KdNr WHERE (Rapport.Status = 'A" OR Rapport.Status = 'D') "
zDTK = LeseDaten(zSel, Allg_Connstr, Allg_DBArt)
Me.DataGridView1.DataSource = zDTK
Me.DataGridView1.Rows(0).Selected = True
Zweiter Schritt: Lesen der Rapporte des Kunden mit dem vorgegebenen Status ind das zweite Datagridview (im Debugger Verzögerung hoch):
zSel = "SELECT RapportNr, Feld2, ..., Feldn " & _
"FROM KundenRapporteAbfrage " & _
"WHERE KdNr = " & Me.DataGridView1.Rows(0).Cells(0).Value & " AND (Status = 'A" OR Status = 'D') "
zDTR = LeseDaten(zSel, Allg_Connstr, Allg_DBArt)
Me.DataGridView2.DataSource = zDTR
Me.DataGridView2.Rows(0).Selected = True
Dritter Schritt: Lesen der einzelnen Anlage, falls vorhanden (Diesen Schritt zeige ich der Vollständigkeit halber, im Debugger läuft er ohne Verzögerung:
FuelleRapport
Private Sub Fuelle_Rapport()
Dim zSel As String, zRapportNr As Integer, zDT As DataTable
zRapportNr = Me.DataGridView2.SelectedRows(0).Cells(0).Value
zSel = "SELECT * " & _
"FROM Kunden_Rapporte_Abfrage " & _
"WHERE RapportNr = " & zRapportNr & " "
zDT = LeseDaten(zSel, Allg_Connstr, Allg_DBArt)
If zDT.Rows.Count > 0 Then
Me.RapportNr.Text = zDT.Rows(0).Item("RapportNr")
Me.Feld2.Text = zDT.Rows(0).Item("Feld2")
...
Me.Feldn.Text = zDT.Rows(0).Item("Feldn")
End If
End Sub
Private Shared Function LeseDaten(ByVal zSelStr As String, ByVal zConnStr As String) As DataTable
On Error GoTo ErrProz
Dim Conn1 As New OleDbConnection(zConnStr)
Dim zDA As New OleDbDataAdapter(zSelStr, Conn1)
Dim zDT As New DataTable()
Conn1.Open()
zDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
zDA.Fill(zDT)
Conn1.Close()
Return zDT
End Function | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|