Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1828to1832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Aus MDB in Listbox in falscher Reihenf.

Aus MDB in Listbox in falscher Reihenf.
17.05.2021 18:26:48
Ronald
Hallo an alle!
Ich beziehe Daten aus meiner MDB und will sie Listboxen zuweisen. Jedoch stimmt hier die Reihenfolge nicht. Und genau während dem Zuweisen zur Listbox
funktioniert das Debuggen nicht, also es zeigt nichts an, weswegen ich nicht weiß, wieso er das so macht. Daher bitte ich Euch um Hilfe, um Ideen. Hier mein Code:

Public Sub a_DB_Verbindung_aufbauen()
With cn
.CursorLocation = adUseClient
.Mode = adModeShareDenyNone
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Softwerk ERP\Softwerk\SoftWERK_ERP.mdb;Persist Security Info=False;"
End With
End Sub
...

Public Sub b_SQL_Abfrage_Listbox_PrivatKd()
strQuery = "SELECT * FROM tKunden "
Set rs = cn.Execute(strQuery)
End Sub
...

Public Sub c_Handling_PrivDaten_fuer_Auswahl_holen()
Dim i As Integer
i = 1
Do While Not rs.EOF
frmAuswahl.lstAuswahlKundennummer_KV.AddItem rs.Fields("fKDNummer").Value
frmAuswahl.lstAuswahlNachname_KV.AddItem rs.Fields("fKdNachname").Value
frmAuswahl.lstAuswahlVorname_KV.AddItem rs.Fields("fKdVorname").Value
frmAuswahl.lstAuswahlOrt_KV.AddItem rs.Fields("fKdOrt").Value
rs.MoveNext
i = i + 1
Loop
End Sub
In der Listbox erscheint es von oben nach unten in folgender Reihenfolge: 2, 3, 1 und in der MDB wäre es von oben nach unten 1, 2, 3.
Vielen Dank im Voraus für Eure Vorschläge und Ideen.
Gruß Ronald

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SQL-String anpassen!
17.05.2021 19:33:53
Jowe
Hallo versuchs mal so:

Public Sub b_SQL_Abfrage_Listbox_PrivatKd()
If strAusgewaehlterDatensatz_KV = "" Then
strAusgewaehlterDatensatz_KV = "KD-00003"
End If
strQuery = "SELECT * FROM tKunden ORDER BY fkdNummer ASC"
Set rs = cn.Execute(strQuery)
End Sub
Gruß
Jochen
AW: leicht verändert
17.05.2021 19:38:05
Jowe
Sorry, ich hatte zunächst einen Deiner älteren Codeschnipsel benutzt :-)

Public Sub b_SQL_Abfrage_Listbox_PrivatKd()
strQuery = "SELECT * FROM tKunden ORDER BY fkdNummer ASC"
Set rs = cn.Execute(strQuery)
End Sub

Anzeige
AW: leicht verändert
17.05.2021 21:29:08
Ronald
Vielen Dank. Hat bestens funktioniert.
Jedoch klappt es mit der Schleife nicht so. Diese hier:

Public Sub c_Handling_der_Datensaetze()
Dim i As Integer
intAnzeigeZaehler = intAnzeigeZaehler + 1
If intAnzeigeZaehler = 1 Then
Do
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
rs.MoveNext
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV 'hier ist strAusgewaehlterDatensatz_KV = True aber er _
verläßt die Schleife nicht. Wieso?
ElseIf intAnzeigeZaehler > 1 Then
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
End Sub
Loop Until Variable = Wunschwert, und sobald die Variable diesen Wunschwert hat, sollte doch aus der Schleife rausgegangen werden. Wieso tut er das nicht?
Es ist ja sicherlich nicht die Idee, daß ich in die Zeile über "Loop Until..." das hier einfüge:

If rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Then
Exit Do
End if
Was könnte dann das Problem sein, daß die Schleife nicht verlassen wird? Oder habe ich die Schleife falsch konfiguriert?
Anzeige
AW: vllt. Schleife leicht verändert mit EXIT DO
17.05.2021 22:11:04
Jowe
ich würd es so machen:

Public Sub c_Handling_der_Datensaetze()
Dim i As Integer
Dim intAnzeigeZaehler As Long
intAnzeigeZaehler = intAnzeigeZaehler + 1
If intAnzeigeZaehler = 1 Then
Do
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
 If rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Then Exit Do
rs.MoveNext
Loop
ElseIf intAnzeigeZaehler > 1 Then
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
End Sub
Gruß
Jochen
Anzeige
AW: vllt. Schleife leicht verändert mit EXIT DO
17.05.2021 22:18:10
Ronald
Super. War meine Idee doch nicht so schlecht. Wäre nur noch fehlerbehaftet. Aber so funktioniert es super. Vielen lieben Dank!!
Jetzt werde ich nur noch probieren, wie Datensätze aktualisiert bzw. gelöscht werden und dann bin ich fast am Ende.
Wünsche noch einen schönen Abend.
Gruß Ronald
AW: Gerne, danke für die Rückmeldung
17.05.2021 22:27:31
Jowe
AW: vllt. Schleife leicht verändert mit EXIT DO
18.05.2021 08:31:03
Yal
Hallo Ronald,
beachte bitte auch meine Antwort zu deiner gestern noch als offene Frage gekennzeichneten Thread:
https://www.herber.de/forum/archiv/1828to1832/t1830879.htm#1831582
Die Lösung von Jowe funktioniert, das ist gut, aber ich sehe 2 Verbesserungspotentiale:
_ sicherstellen, dass die Schleife nicht in endlos abschweift (wobei spätestens bei rs.EOF kommt eine Fehlermeldung, aber dafür Abbruch)
_ die Userform-Element sollte nur aktualisiert, wenn der richtige Datensatz gefunden ist, nicht bei jeden.
VG
Yal
Anzeige
AW: vllt. Schleife leicht verändert mit EXIT DO
18.05.2021 09:01:23
Ronald
"Die Userform-Element sollte nur aktualisiert, wenn der richtige Datensatz gefunden ist, nicht bei jeden."
Mit aktualisieren meinst Du das Zuweisen der Werte an die Textboxen?
Gruß Ronald
ja. oT
18.05.2021 09:28:14
Yal
AW: ja, da hat Yal recht...
18.05.2021 11:06:41
Jowe
Hallo Yal, hallo Ronald,
...wobei ich nur das kleine Problem "Austieg bei Treffer" im Fokus hatte und im Übrigen davon ausging, dass Ronald den Hinweis noch umsetzen würde.
Ich kenne leider noch nicht den Stand der jetzt aktuellen Arbeitsmappe.
Und Ronald hat ja auch noch einiges vor:
Stichworte: NEUE Datensätze, LÖSCHEN von Datensätzen, AKTUALISIEREN/ÄNDERN von Datensätzen
Hallo Ronald - bin gespannt wie's weitergeht :-))
Gruß
Joche
Anzeige
Wir führen den Fall der Langzeitbetreuung ;-) oT
18.05.2021 11:17:00
Yal
AW: Wir führen den Fall der Langzeitbetreuung ;-) oT
18.05.2021 11:19:15
Ronald
Ich fühle mich gut aufgehoben. Danke :-)
Gruß Ronald
PS: Hinsichtlich Löschung von Datensätzen. Die sollen natürlich nicht wirklich gelöscht werden. Sondern Status auf inaktiv oder gelöscht und sollen einfach
nicht mehr angezeigt werden. Das machts sicher einfacher. Aber alles zu seiner Zeit ;-)
AW: Wir führen den Fall der Langzeitbetreuung ;-) oT
18.05.2021 11:41:06
Jowe
so könnte das zB. auch aussehen :=)

Public Sub c_Handling_der_Datensaetze()
Dim i As Integer
Dim intAnzeigeZaehler As Long
On Error GoTo FB_DSHandling
intAnzeigeZaehler = intAnzeigeZaehler + 1
If intAnzeigeZaehler = 1 Then
Do
rs.MoveFirst
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Or rs.EOF
'Verwenden
If rs.EOF Then
MsgBox "Kundennummer nicht gefunden!"
Else
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
'frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
'frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
'frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
End If
Exit Sub
FB_DSHandling:
MsgBox "Es ist ein Fehler " & Err.Number & " in der Suche aufgetreten!", vbCritical + vbOKOnly, "Hinweis"
Debug.Print Err.Number
End Sub

Anzeige
AW: ups noch etwas ändern...
18.05.2021 11:44:43
Jowe
hier:

If intAnzeigeZaehler = 1 Then
Do
' rs.MoveFirst  ----das muss noch weg!!!
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Or rs.EOF

bzw durch rs.MoveNext ersetzt werden. oT
18.05.2021 12:02:03
Yal
AW: .rs.MoveFirst muss vor die Schleife!
18.05.2021 13:26:48
Jowe
rs.MoveFirst muss vor die Schleife! -> jein
18.05.2021 13:33:37
Yal
wenn der Recordset gerade abgefragt worden ist, kann man davon ausgehen, dass der Zeiger auf dem ersten Datensatz steht.
Eigentlich wäre gezielter -und richtiger-, eine neue Abfrage mit dem Kundennummer als Filter anzustossen.
VG
Yal
AW: rs.MoveFirst muss vor die Schleife! -> jein
18.05.2021 13:51:52
Ronald
Stimmt, aber dann kann man nicht mehr vorwärts oder rückwärts navigieren. Aber als normale Anzeige des einzelnen ausgewählten Datensatzes ist möglich.
Anzeige
Noch offen?
18.05.2021 15:24:51
Yal
Hallo Ronald,
ich sehe in deinem letzten Beitrag keine Frage. Habe ich was übersehen?
VG
Yal
AW: Noch offen?
18.05.2021 15:45:51
Ronald
Alles gut :-)
Ich hätte höchstens auf Widerspruch bei einer Falschaussage meinerseits gehofft. Wobei ich sagen muß, daß dies ja möglich sein soll, also das Navigieren.
Vielen Dank!
Gruß Ronald
AW: Noch offen?
18.05.2021 15:51:43
JoWE
Du könntest jetzt erst einmal die aktuelle Arbeitsmappe einstellen
AW: Noch offen?
18.05.2021 15:52:36
JoWE
Du könntest jetzt erst einmal die aktuelle Arbeitsmappe einstellen
Navigieren
18.05.2021 19:05:27
Yal
Hallo Ronald,
Nein, kein Wiederspruch: beim Navigieren klar ein Recordset über alles und dann MoveNext und MovePrevious. Wobei es kommt darauf an, wieviele Datensätze deine Abfrage zurückgibt.
Aber bei Details über ein einzigen Datensatz kann man gezielt diese Information direkt aus der Datenbank holen.
In deinem Beispiel sind es sehr wenige Datensätze, aber ab ca. -schätze ich mal- 100 Datensätze ist es schneller gezielt den richtigen Datensatz aus der DB zu holen, als durchzugehen. Es liegt an der optimierten Suchmethode der Datenbank (siehe binary tree).
Ausserdem kannst Du für die Liste eine lesende Recordset (keine Reservierung) und für den einzelne ein schreibende Recordset verwenden. Also für dich reserviert, da kann währenddessen niemand drauf scheiben (ok: in deinem Fall nicht relevant).
VG
Yal
Anzeige
AW: ups noch etwas ändern...
21.05.2021 11:23:57
Ronald
Chris hat recht. Bei diesem Code habe ich, wie es bereits erwähnt wurde, MoveFirst durch MoveNext ersetzt, ...

If intAnzeigeZaehler = 1 Then
'rs.MoveFirst
Do
rs.MoveNext 'ehemals MoveFirst
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Or rs.EOF
'Verwenden
If rs.EOF Then
MsgBox "Kundennummer nicht gefunden!"
Else
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
... habe aber nun tatsächlich das Phänomen, daß ich den ersten Datensatz nicht aufrufen kann, ohne daß er Error bringt. Ab dem zweiten ists kein Thema.
Spaßeshalber habe ich MoveNext auskommentiert. Folge: Erster Datensatz kommt problemlos. Ab dem zweiten Datensatz Endlosschleife :-)
Also MoveNext wieder rein. Ich glaube, das Einfachste hierbei wäre dafür zu sorgen, daß die Schleife, wenn sie am Ende angekommen ist, vorne wieder
weitermacht. Denn irgendwann kommt die Schleife zum ersten Datensatz. Oder wie wäre es mit:

Public Sub c_Handling_der_Datensaetze()
'suchen und finden von Anfang an
intAnzeigeZaehler = intAnzeigeZaehler + 1
If intAnzeigeZaehler = 1 Then
'rs.MoveFirst
Do
If rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Then
Exit Do
Else
rs.MoveNext
End If
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Or rs.EOF
'Verwenden
If rs.EOF Then
MsgBox "Kundennummer nicht gefunden!"
Else
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
ElseIf intAnzeigeZaehler > 1 Then
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
frmMain.cmdFelderAktualisieren_KV.Enabled = True
Call d_privKD_Textbox_zu_String 'Sicherheitskopie anlegen, zum Abfragen, ob was geändert wurde
End Sub
Hab da noch eine kleine If-Abfrage in die Do-Schleife reingefummelt. Ist fast die elegantere Lösung.

Anzeige
Bleib bei nur eine offenen Thread
21.05.2021 15:25:41
Yal
und zwar am besten die neueste. Das Do While Thema habe ich dort beantwortet.
Sonst wird es für uns ziemlich anstrengend :-)
VG
Yal

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige