Ausgeben aller zugehörigen Fields (ganze Zeile) mit dem Eintrag Japan im Field Land aus der Tabelle Lieferanten Zeile für Zeile in MsgBox.
Hallo erst einmal,
seit einer kurzen Weile beschäftige ich mich mit Programmier Grundkenntnissen im Bereich Access VBA. Das lesen der Codes ist bis auf Kleinigkeiten kein Prob aber für das entwerfen frei Schnauze fehlt mir leider noch Einiges an Praxis und Erfahrung.
Ich habe eine Aufgabe die folgendes aus einer Datenbanktabelle auslesen und ausführen soll:
Der Access VBA Code soll aus der Tabelle Lieferanten alle Einträge mit der Bezeichnung Japan im Feld Land, ganze Zeilen nacheinder in einer Message Box ausgeben. Zudem soll mit dem Objekt Recordset die Tabelle geöffnet, Inhalte der Felder mit Semicollon getrennt in eine Datei eingetragen und die Tabelle Lieferanten wieder geschlossen werden. Eine Schleife ist Vorzugsweise zu verwenden.
Ich habe erst einmal Folgenden Code geschrieben der allerdings so modifiziert werden soll (oder neuen Code) so das man eventuell per Syntax noch eine Spalte in die Tabelle hinzufügen kann.
Sub BetimmteSaetzeAusTabelleZiehen1()
Dim rst As ADODB.Recordset
Set rst = CurrentProject.Connection.Execute("SELECT * FROM Lieferanten WHERE Land = 'Japan'")
Do Until rst.EOF
MsgBox rst.Fields("Kontaktperson") & ";" & rst.Fields("Position") & ";" & rst.Fields("Straße") & ";" & rst.Fields("Ort") _
& ";" & rst.Fields("Region") & ";" & rst.Fields("Plz") & ";" & rst.Fields("Land") & ";" & rst.Fields("Telefon") _
& ";" & rst.Fields("Telefax") & ";" & rst.Fields("Homepage")
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
End Sub
Gibt es hier eine kürzere/schnellere Lösung?
Über Codebeispiele freue ich mich sehr.
MfG
anten0
eDiT:
Also mein Chef war da schneller und die Lösung sieht wie folgt aus, für mich noch ein bisschen zu sehr Japanisch aber wenigstens verstehe ich jetzt wie der code abläuft, nur woher soll man sowas wissen wenn man keinen professionellen Übersetzer neben sich sitzen hat. Wie dem auch sei hier die Lösung:
Function LieferantenJapan()
Dim RS As Recordset
Dim DB As Database
Dim fld As Field
Dim merkstring, merk As String
Set DB = Application.CurrentDb
Set RS = DB.OpenRecordset("SELECT * FROM Lieferanten WHERE land='Japan'", dbOpenDynaset)
Do
For Each fld In RS.fields
If merkstring <> "" Then
merkstring = merkstring & ";" & fld
Else
merkstring = fld
End If
Next fld
RS.MoveNext
MsgBox merkstring
merkstring = ""
Loop Until RS.EOF = True
RS.Close
Set RS = Nothing
Set DB = Nothing
End Function
Hoffe das bringt anderen Anwendern etwas um nicht wie Ich (E...) in so einer Situation blöd dazustehen.
Viele Grüße
anten0
seit einer kurzen Weile beschäftige ich mich mit Programmier Grundkenntnissen im Bereich Access VBA. Das lesen der Codes ist bis auf Kleinigkeiten kein Prob aber für das entwerfen frei Schnauze fehlt mir leider noch Einiges an Praxis und Erfahrung.
Ich habe eine Aufgabe die folgendes aus einer Datenbanktabelle auslesen und ausführen soll:
Der Access VBA Code soll aus der Tabelle Lieferanten alle Einträge mit der Bezeichnung Japan im Feld Land, ganze Zeilen nacheinder in einer Message Box ausgeben. Zudem soll mit dem Objekt Recordset die Tabelle geöffnet, Inhalte der Felder mit Semicollon getrennt in eine Datei eingetragen und die Tabelle Lieferanten wieder geschlossen werden. Eine Schleife ist Vorzugsweise zu verwenden.
Ich habe erst einmal Folgenden Code geschrieben der allerdings so modifiziert werden soll (oder neuen Code) so das man eventuell per Syntax noch eine Spalte in die Tabelle hinzufügen kann.
Sub BetimmteSaetzeAusTabelleZiehen1()
Dim rst As ADODB.Recordset
Set rst = CurrentProject.Connection.Execute("SELECT * FROM Lieferanten WHERE Land = 'Japan'")
Do Until rst.EOF
MsgBox rst.Fields("Kontaktperson") & ";" & rst.Fields("Position") & ";" & rst.Fields("Straße") & ";" & rst.Fields("Ort") _
& ";" & rst.Fields("Region") & ";" & rst.Fields("Plz") & ";" & rst.Fields("Land") & ";" & rst.Fields("Telefon") _
& ";" & rst.Fields("Telefax") & ";" & rst.Fields("Homepage")
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
End Sub
Gibt es hier eine kürzere/schnellere Lösung?
Über Codebeispiele freue ich mich sehr.
MfG
anten0
eDiT:
Also mein Chef war da schneller und die Lösung sieht wie folgt aus, für mich noch ein bisschen zu sehr Japanisch aber wenigstens verstehe ich jetzt wie der code abläuft, nur woher soll man sowas wissen wenn man keinen professionellen Übersetzer neben sich sitzen hat. Wie dem auch sei hier die Lösung:
Function LieferantenJapan()
Dim RS As Recordset
Dim DB As Database
Dim fld As Field
Dim merkstring, merk As String
Set DB = Application.CurrentDb
Set RS = DB.OpenRecordset("SELECT * FROM Lieferanten WHERE land='Japan'", dbOpenDynaset)
Do
For Each fld In RS.fields
If merkstring <> "" Then
merkstring = merkstring & ";" & fld
Else
merkstring = fld
End If
Next fld
RS.MoveNext
MsgBox merkstring
merkstring = ""
Loop Until RS.EOF = True
RS.Close
Set RS = Nothing
Set DB = Nothing
End Function
Hoffe das bringt anderen Anwendern etwas um nicht wie Ich (E...) in so einer Situation blöd dazustehen.
Viele Grüße
anten0
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100536
Url: https://administrator.de/contentid/100536
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
Moin anten0,
Anmerkung eines interessierten Laien:
Alle Befehle, die innerhalb einer "For each"- oder sonstigen Loop-Konstruktion stehen, werden natürlich auch "For each"-mal ausgeführt.
Was bei einer Massendatenverarbeitung eben auch n-mal die eine oder andere Millisekunde mehr Laufzeit bedeutet.
Deshalb würde ich auch in diesem Winzschnipsel schon aus Prinzip versuchen, diese 'if merkstring=""-Mimik aus den beinen Schleifen ( der Schleife über alle Datensätze und der Schleife über alle Felder) rauszuhalten.
Grüße
Biber
Anmerkung eines interessierten Laien:
Alle Befehle, die innerhalb einer "For each"- oder sonstigen Loop-Konstruktion stehen, werden natürlich auch "For each"-mal ausgeführt.
Was bei einer Massendatenverarbeitung eben auch n-mal die eine oder andere Millisekunde mehr Laufzeit bedeutet.
Deshalb würde ich auch in diesem Winzschnipsel schon aus Prinzip versuchen, diese 'if merkstring=""-Mimik aus den beinen Schleifen ( der Schleife über alle Datensätze und der Schleife über alle Felder) rauszuhalten.
Function LieferantenJapan()
Dim RS As Recordset
Dim DB As Database
Dim fld As Field
Dim merkstring As String
' Anmerkung 'den zweiten String 'merk' aus Deinem Beispiel hab ich weggelassen.
Set DB = Application.CurrentDb
Set RS = DB.OpenRecordset("SELECT * FROM Lieferanten WHERE land='Japan'", dbOpenDynaset)
merkstring=";"
Do
For Each fld In RS.fields
merkstring = merkstring & ";" & fld
Next fld
RS.MoveNext
merkstring = mid(merkstring, 2, len(merkstring)-1)
' Erstes Zeichen = ";" entsorgen
MsgBox merkstring
merkstring = ";"
' Vorbelegung für nächste Runde ist wieder ";"
Loop Until RS.EOF = True
RS.Close
Set RS = Nothing
Set DB = Nothing
End Function
Grüße
Biber
Moin anten0,
sorry, da hatte ich zu flüchtig draufgeguckt.
Richtig rum natürlich so:
Grüße
Biber
sorry, da hatte ich zu flüchtig draufgeguckt.
Richtig rum natürlich so:
Dim RS As Recordset
Dim DB As Database
Dim fld As Field
Dim merkstring As String
' Anmerkung 'den zweiten String 'merk' aus Deinem Beispiel hab ich weggelassen.
Set DB = Application.CurrentDb
Set RS = DB.OpenRecordset("SELECT * FROM Lieferanten WHERE land='Japan'", dbOpenDynaset)
merkstring = ""
Do
For Each fld In RS.Fields
merkstring = merkstring & fld & ";"
Next fld
RS.MoveNext
merkstring = Mid(merkstring, 1, Len(merkstring) - 1)
' Letztes Zeichen = ";" entsorgen
MsgBox merkstring
merkstring = ""
' Vorbelegung für nächste Runde ist wieder "" (Leerstring)
Loop Until RS.EOF = True
RS.Close
Set RS = Nothing
Set DB = Nothing
End Function
Grüße
Biber