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

Frage Entwicklung VB for Applications

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, 5858 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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Windows Server
DNS Forwarding an andere Domäne
Frage von detox91Windows Server9 Kommentare

Hallo, für Testzwecke haben wir bei uns eine zweite Windows Domäne (B.local) aufgebaut, welche komplett unabhängig und isoliert der ...