Top-Themen

Aktuelle Themen (A bis Z)

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.

Mitglied: anten0

anten0 (Level 1) - Jetzt verbinden

29.10.2008, aktualisiert 31.10.2008, 5900 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.

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
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 ..
Ähnliche Inhalte
PHP
MySQLi - Problem mit fetch field()
Frage von Maik87PHP1 Kommentar

Hallo zusammen, ich bin seit einigen Tagen dabei eine etwas größere Eigenentwicklung von der MySQL-Schnittstelle auf MySQLi umzubauen. Bis ...

VB for Applications

Text mit Msgbox Ausgeben bei verarbeitung

gelöst Frage von VBSnoob123VB for Applications1 Kommentar

Hallo, hat sich erledigt. hab mich entschlossen das Script in Html darzustellen und die anzeige direkt mit in die ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

Tipp von gdconsultSicherheits-Tools3 Kommentare

Hallo! Ich habe gerade ein nettes kleines Tool fertiggestellt. Damit kann die Passwort-Spalte einer CSV-Datei der reihe nach gehen ...

Batch & Shell

Teile eines Powershell Skriptes in einer Tabelle ausgeben

gelöst Frage von ReneBueBatch & Shell3 Kommentare

Hallo, ich habe mir mit ein bisschen Hilfe ein Skript zusammengebastelt, welches bestimmte AD-Benutzer herrausfiltert und Anzeigt. Anschließend werden ...

Neue Wissensbeiträge
CMS
Erneut kritische Zero-Day-Lücke in Drupal
Tipp von Reini82 vor 8 StundenCMS

Laut einem Bericht auf t3n gibt es eine Schwere Sicherheitslücke in Drupal die auch schon ausgenutzt wird. Betroffen sind ...

Sicherheit

MikroTik-Router patchen, Schwachstelle wird ausgenutzt

Information von kgborn vor 1 TagSicherheit

Am 23. April 2018 wurde von Mikrotik ein Security Advisory herausgegeben, welches auf eine Schwachstelle im RouterOS hinwies. Mikrotik ...

Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 1 TagWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

iOS
Updates für Iphone und Co
Information von sabines vor 1 TagiOS

Gestern abend ist iOS 11.3.1 erschienen, ein kleineres Update, dass einige Lücken schließt und "Lahmlegen" nach einem Display Tausch ...

Heiß diskutierte Inhalte
Windows Server
Alten DC entfernen
gelöst Frage von smartinoWindows Server27 Kommentare

Hallo zusammen, ich habe hier eine Umgebung übernommen und erstmal einen DCDIAG gemacht. Dabei fällt auf, daß eine ganze ...

Ausbildung
Wie gelingt ein guter Einstieg in die FiSi-Ausbildung? (Umschulung)
Frage von SiAnKoAusbildung26 Kommentare

Schönen guten Tag, ich bin SiAnKo und habe seit dem 1.04.2018 eine Umschulung als FiSi angefangen. Ich möchte natürlich ...

Batch & Shell
Mit Powershell den Inhalt einer Excel mit einer Text Datei abgleichen
gelöst Frage von Bommi1961Batch & Shell21 Kommentare

Hallo zusammen, ich muss den Inhalt einer Excel Datei (Mappe1) mit dem Daten einer Text Datei abgleichen. Die Daten ...

Windows 10
Unter Windows 10 Home 64Bit (1709) kommt Fehler beim Aufruf von verschiedenen Systemprogrammen wie z.B. Gerätemanager
Frage von bitshopWindows 1017 Kommentare

Hallo, beim meinem Onkel haben wir seit längerem das Problem, dass z.B. beim Aufruf des Gerätemanagers eine Fehlermeldung kommt ...