Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ausgeben aller zugehörigen Fields (ganze Zeile) mit dem Eintrag Japan im Field Land aus der Tabelle Lieferanten Zeile für Zeile in MsgBox.

Frage Entwicklung VB for Applications

Mitglied: anten0

anten0 (Level 1) - Jetzt verbinden

29.10.2008, aktualisiert 31.10.2008, 5752 Aufrufe, 5 Kommentare

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.

Mit freundlichen Grüßen
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
Mitglied: Biber
29.10.2008 um 18:57 Uhr
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.

01.
Function LieferantenJapan() 
02.
Dim RS As Recordset 
03.
Dim DB As Database 
04.
Dim fld As Field 
05.
Dim merkstring As String 
06.
' Anmerkung 'den zweiten String 'merk' aus Deinem Beispiel hab ich weggelassen. 
07.
 
08.
Set DB = Application.CurrentDb 
09.
Set RS = DB.OpenRecordset("SELECT * FROM Lieferanten WHERE land='Japan'", dbOpenDynaset) 
10.
merkstring=";" 
11.
Do 
12.
 
13.
    For Each fld In RS.fields 
14.
          merkstring = merkstring & ";" & fld 
15.
    Next fld 
16.
 
17.
    RS.MoveNext 
18.
 
19.
    merkstring = mid(merkstring, 2, len(merkstring)-1) 
20.
    ' Erstes Zeichen = ";" entsorgen 
21.
    MsgBox merkstring 
22.
 
23.
    merkstring = ";" 
24.
    ' Vorbelegung für nächste Runde ist wieder ";" 
25.
Loop Until RS.EOF = True 
26.
 
27.
RS.Close 
28.
Set RS = Nothing 
29.
Set DB = Nothing 
30.
 
31.
End Function
Grüße
Biber
Bitte warten ..
Mitglied: anten0
31.10.2008 um 10:07 Uhr
Hallo Biber!

Danke für die Anmerkung! Ja, das mit der Laufzeit stimmt aber durch die If Konstruktion wird das Sonderzeichen/Trennzeichen Semikolon am Anfang des Strings vermieden. Dein Beispiel zeigt mir immer eines am Anfang der Ausgabe(MsgBox) vom String.

Ich als Totallaie habe da noch zu wenig Wissen für mid und len oder die Positionierung stimmt nicht, behaupte ich mal einfach so als Totallaie.

Wenn ich das erste merkstring = ";" auskommentiere, funktionierts in der ersten MsgBox, allerdings nicht in den nächsten.

Hast du ne Idee?

Grüße
an10zero
Bitte warten ..
Mitglied: Biber
31.10.2008 um 11:07 Uhr
Moin anten0,

sorry, da hatte ich zu flüchtig draufgeguckt.
Richtig rum natürlich so:
01.
Dim RS As Recordset 
02.
Dim DB As Database 
03.
Dim fld As Field 
04.
Dim merkstring As String 
05.
' Anmerkung 'den zweiten String 'merk' aus Deinem Beispiel hab ich weggelassen. 
06.
 
07.
Set DB = Application.CurrentDb 
08.
Set RS = DB.OpenRecordset("SELECT * FROM Lieferanten WHERE land='Japan'", dbOpenDynaset)  
09.
merkstring = "" 
10.
Do 
11.
 
12.
    For Each fld In RS.Fields 
13.
          merkstring = merkstring & fld & ";" 
14.
    Next fld 
15.
 
16.
    RS.MoveNext 
17.
 
18.
    merkstring = Mid(merkstring, 1, Len(merkstring) - 1) 
19.
    ' Letztes Zeichen = ";" entsorgen 
20.
    MsgBox merkstring 
21.
 
22.
    merkstring = "" 
23.
    ' Vorbelegung für nächste Runde ist wieder "" (Leerstring) 
24.
Loop Until RS.EOF = True 
25.
 
26.
RS.Close 
27.
Set RS = Nothing 
28.
Set DB = Nothing 
29.
 
30.
End Function
Grüße
Biber
Bitte warten ..
Mitglied: anten0
31.10.2008 um 11:20 Uhr
Moinsen Biber,

hätte mir eigentlich auch einfallen können ... funktioniert einwandfrei!

Schönen Tag noch!
Grüße
an10zero
Bitte warten ..
Mitglied: bastla
31.10.2008 um 11:30 Uhr
... oder, um noch ein Len() einzusparen:
01.
... 
02.
Do 
03.
    merkstring = "" 
04.
    ' Vorbelegung mit Leerstring 
05.
 
06.
    For Each fld In RS.Fields 
07.
          merkstring = merkstring & ";" & fld 
08.
    Next fld 
09.
 
10.
    RS.MoveNext 
11.
 
12.
    merkstring = Mid(merkstring, 2) 
13.
    ' Erstes Zeichen = ";" entsorgen 
14.
    MsgBox merkstring 
15.
 
16.
Loop Until RS.EOF = True 
17.
...
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Backup
gelöst Datensicherung von Daten, auf denen die ganze Zeit gearbeitet wird (8)

Frage von Windows11 zum Thema Backup ...

Internet Domänen
gelöst Domain Host Eintrag In Richtfunk Netz (7)

Frage von Betact zum Thema Internet Domänen ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...