vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 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
Nach einer Suchabfrage in Access friert die Form genau 15 Sekunden ein 
Autor: lgoeldi
Datum: 17.05.21 09:49

Ich habe eine Suchfunktion mit Suchkriterien in VB.Net programmiert. Nach der Eingabe eines Suchkriteriums wird das Ergebnis in DataGridView angezeigt. Die Anzeige funktioniert sehr schnell. Nur nach der Anzeige der Daten im DataGridView bleibt das Programm kurz hängen (Keine Rückmeldung, genau immer 15 Sekunden). Suche ich danach nochmal mit dem gleichen Suchkriterium funktioniert alles einwandfrei.
Habe ich das Programm längere Zeit nicht benutzt passiert wieder das gleiche. Völlig unregelmäßig.

Ich arbeite mit keinem typisierten Dataset
Es ist eine lokale Datenbank
Datenbank ist Access 2016
Programmiert mit Visual Studio 2019
Der Code ist in einer Form geschrieben. Habe es auch in ein Modul ausgelagert, gleiches Ergebnis.


Private Function FncSuchen_IV() As Object 'frmVPInventur
        Dim parm1 As String = ("%") : Dim parm2 As String = ("%") : Dim parm3 _
          As String = ("%")
        Dim parm4 As String = ("%") : Dim parm5 As String = ("%") : Dim parm6 _
        As String = ("%")
        Dim parm7 As String = ("%") : Dim parm8 As String = ("%") : Dim parm9 _
        As String = ("%Z1%")
        Dim DatenM As New DataSet
 
        Dim Debitor_ZDIS As String : Dim Name1 As String : Dim Ort As String : _
          Dim PLZ As String : Dim Strasse As String  'Dim Telefon1 As String
 
        parm1 = parm1 + txtVPNrSuchen_IV.Text + parm1
        parm2 = parm2 + txtFirmaSuchen_IV.Text + parm2
        parm3 = parm3 + txtOrtSuchen_IV.Text + parm3
        parm4 = parm4 + txtPLZSuchen_IV.Text + parm4
        parm5 = parm5 + txtStrasseSuchen_IV.Text + parm5
 
 
        Dim Zaehler As String = "0"
        DGVSuchen1_IV.Visible = True
        DGVSuchen1_IV.Size = New Size(792, 316)
        DGVSuchen1_IV.Location = New Point(9, 56)
 
        DBopenLocal()
        conLocal.Open()
 
        cmdLocal.CommandText = "SELECT DISTINCT [tblKNA1_ZDIS.Debitor]," & _
          "[tblKNA1_ZDIS.Name1], [tblKNA1_ZDIS.Ort], [tblKNA1_ZDIS.PLZ]," & _
          "[tblKNA1_ZDIS.Strasse]
                            FROM tblKNA1_ZDIS
                            WHERE tblKNA1_ZDIS.Debitor LIKE '" & parm1 & "' And _
                              tblKNA1_ZDIS.Name1 LIKE '" & parm2 & "' And _
                              tblKNA1_ZDIS.Ort LIKE '" & parm3 & "'
                            And tblKNA1_ZDIS.PLZ LIKE '" & parm4 & "' And _
                            tblKNA1_ZDIS.Strasse LIKE '" & parm5 & "' 
                            ORDER BY tblKNA1_ZDIS.Debitor"
 
        DGVSuchen1_IV.Rows.Clear()
        readerLocal = cmdLocal.ExecuteReader
        Dim LaufendeNr As String = Nothing
        Do While readerLocal.Read
            Zaehler = CStr(CInt(Zaehler) + 1)
            Debitor_ZDIS = CStr(readerLocal("tblKNA1_ZDIS.Debitor"))
            Debitor_ZDIS = Debitor_ZDIS.Substring(4)
            Name1 = CStr(readerLocal("tblKNA1_ZDIS.Name1"))
            Ort = CStr(readerLocal("tblKNA1_ZDIS.Ort"))
            Strasse = CStr(readerLocal("tblKNA1_ZDIS.Strasse"))
            PLZ = CStr(readerLocal("tblKNA1_ZDIS.PLZ"))
            DGVSuchen1_IV.Rows.Add(Zaehler, Debitor_ZDIS, Name1, PLZ, Ort, _
              Strasse)
            btnSuchenVP_IV.Text = Zaehler + " VP's gefunden"
            btnSuchenVP_IV.Refresh()
        Loop
 
        DGVSuchen1_IV.Refresh()
        If Debitor_ZDIS = "" Then
            DGVSuchen1_IV.Visible = False
            MsgBox("Keinen VP gefunden")
        End If
 
        DGVSuchen1_IV.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        DGVSuchen1_IV.Refresh()
 
        cmdLocal.Cancel()
        readerLocal.Close()
        conLocal.Close()
 
    End Function
Danke in Voraus
lgoeldi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach einer Suchabfrage in Access friert die Form genau 15 Sekunden ein 
Autor: effeff
Datum: 17.05.21 20:00

Du hast datenbanktechnische Unzulänglichkeiten in Deinem Code.

1. Daten werden nicht direkt in eine DataGridView geschrieben, sondern in eine DataTable, die als DataSource daran gebunden ist.
2. Du brauchst keinen Reader, sondern kannst mit einer Datenbankabfrage, einem DataAdapter und einem DataSet, in welchem die DataTable gehalten wird, arbeiten.
3. Du brauchst dann auch keinen Zähler mitlaufen lassen, sondern kannst ab Ende einfach abfragen, wieviel Zeilen die DataTable hat (RowsCount).
4. Ohne Reader brauchst Du auch nicht ständig das DataGridView zu refreshen - das nimmt unnötig Ressourcen.

BTW: Deine Parameterstrings kannst Du auch einfacher deklarieren:

parm1 = String.Concat("%", txtVPNrSuchen_IV.Text, "%")
 
Hier deklarierst Du sogar ein DataSet, benutzt es aber gar nicht. Warum?
 
<pre><code>Dim DatenM As New DataSet

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach einer Suchabfrage in Access friert die Form genau 15 Sekunden ein 
Autor: lgoeldi
Datum: 18.05.21 09:27

Hallo effeff,

danke erstmal für Deinen Hinweis.

Das füllen des DGV erfolgt sofort in Millisekunden nur danach bleibt er manchmal für genau 15 Sekunden hängen.
Dies ist aber immer unterschiedlich.

VG
lgoeldi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach einer Suchabfrage in Access friert die Form genau 15 Sekunden ein 
Autor: Manfred X
Datum: 18.05.21 10:03

Hallo!

Wo bleibt das Programm stehen und wartet?
Setze ein Label auf die Form, in das Du im Code immer protokollierst,
welche Aktion gerade startet (Refresh dabei nicht vergessen).

Wenn die Verzögerung am Verhalten der Datenbank hängt, fülle eine Datatable
in einem Hintergrundprozess und unterbreche die Datenbindung, bis das Laden
der DB-Abfrage jeweils abgeschlossen ist (vgl. dazu die Antwort von effeff).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Nach einer Suchabfrage in Access friert die Form genau 15 Sekunden ein 
Autor: lgoeldi
Datum: 18.05.21 11:21

Hallo Manfred X,

danke für Deine Antwort und Hinweis.
Das Programm bleibt nach dem füllen des DGV stehen (genau 15 Sekunden).
Dies ist aber nicht immer. Wenn ich danach das gleiche Suchkriterium eingebe funktioniert es wunderbar.

Das mit dem protokolieren habe ich noch nie gemacht.
Ich habe es mal mit Haltepunkten an verschiedenen Zeilen versucht.
Ist aber nicht identifizierbar wo das Programm 15 Sekunden lang nicht reagiert.

Vielleicht sollte ich das ganze mal mit DataTable und DataSource nochmal neu schreiben.

VG
lgoeldi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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