vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Anzeige 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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Anzeige größerer Datenmenge ist sehr langsam2.923JuppG25.03.16 16:22
Re: Anzeige größerer Datenmenge ist sehr langsam1.545Manfred X25.03.16 17:21
Re: Anzeige größerer Datenmenge ist sehr langsam1.397JuppG11.04.16 15:16

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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