| |
ADO.NET / DatenbankenNach 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 | |
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 | |
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 | |
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). | |
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 | |
| 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 |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. 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
|
|