graudon
Goto Top

Script um für eine Access- Abfrage Datensätze in jeweils eine Datei zu exportieren

Problem: ich möchte das Ergebnis einer Access-Abfrage für jeden einzelnen Datensatz eine eigene Text-Datei ausliefern. Die Abfrage läuft in Access und hätte z.B. 4 Ergebnisse. Ich würde jetzt mittesl VBA-Script die Abfrage starten. Im Ergebnis wünsche ich mir dann halt 4 Dateien, wobei jeder Dateiname u.a. eine Zufalszahl beinhaltet..
Müsste ich jetzt über For Each .. Next gehen, um für jeden Datensatz eine txt-Datei zu schreiben? ich würde gerne das*.vbs-Sript in den Windows-Sceduler legen, um es z.B. alle 15 min laufen zu lassen. Oder geht das noch anders?

Content-Key: 333412

Url: https://administrator.de/contentid/333412

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: 132692
132692 28.03.2017 aktualisiert um 08:52:48 Uhr
Goto Top
Problem
Erst mal Moin, oder hat man dir keinen Anstand beigebracht?!

Aus der hohlen Hand z.B. so (Pfade, Spaltennamen etc. anpassen)
Sub Test()
Dim rec, fso, fname, outline
Set fso = CreateObject("Scripting.FilesystemObject")  
Const OUTPATH = "c:\Data"  
Set rec = Currentdb.OpenRecordset("DeineAbfrage")  
while not rec.EOF
    fname = OUTPATH & "\record_" & GetRandomValue & ".txt"  
    while fso.FileExists(fname)
        fname = OUTPATH & "\record_" & GetRandomValue & ".txt"  
    wend
    outline = Join(Array(rec.Fields("Spalte1").Value,rec.Fields("Spalte2").Value,rec.Fields("Spalte3").Value),";")  
    fso.OpenTextfile(fname,2,True).Writeline(outline)
    rec.MoveNext
wend
End Sub

Function GetRandomValue()
    dim chars, out, i, r
    chars = "abcdefghijklmnopqrstuvwxyz1234567890"  
    for i = 1 to 10
        Randomize
        r = Int ((36 - 1 + 1) * Rnd + 1)
        out = out & Mid(chars,r,1)
    Next
    GetRandomValue = out
End Function
Trotz keinem Gruß
Gruß p.
Mitglied: Graudon
Graudon 28.03.2017 um 09:09:48 Uhr
Goto Top
Hi pattern und Moinmoin,

recht hast du, ist wohl gestern etwas spät geworden.... sorry!

Ok, mit While läuft er dann durch die Ergebnisliste durch, bis alle Datensätze verarbeitet wurden, also ist for each...next obsolet face-smile.

Ich habe, wenn die Schnittstelle zum Auswertesystem dann mal so bedient wurde noch eine 2. Aufgabe, nämlich, dass via Abfrage je Record ein Termin in den OL-Kalender eingetragen wird. Die Daten für subject, start, duration, body und eine Termin-ID werden durch die Abfrage bereitgestellt.

Die notwendige Deklaration des Kalenders nache ich dann ganz normal, setze aber in die While -Wend Schleife die Werte... Ein Wert ist die eindeutige Temin-ID. Den würde ich als Userproperty zum Termin eintragen, so dass ich prüfen kann, ob es schon einen Termin mit dieser ID gibt um ggf. diesen ein Update zu verpassen.

Müsste doch gehen
?

Dank und Grüsse
Mitglied: 132692
132692 28.03.2017 aktualisiert um 09:17:28 Uhr
Goto Top
Klar, machbar ist alles. Hat aber jetzt so viel mit der Frage zu tun wie ein Fisch mit ner Kuh.
Mitglied: Graudon
Graudon 28.03.2017 um 09:20:00 Uhr
Goto Top
Ah, ok, naja, ich probiere das nachher dann mal einfach aus ...

Besten Dank für die Hilfe

g
Mitglied: 132692
132692 28.03.2017 um 09:36:51 Uhr
Goto Top
Na dann, noch einen Haken dran und fertig.

Gruß p.
Mitglied: Graudon
Graudon 28.03.2017 um 14:45:09 Uhr
Goto Top
Für die Zeile 5 bekomme ich einen Laufzeitfehler, da ein Objekt noch zu definieren wäre.

Set rec = Currentdb.OpenRecordset("TEST_SMS")

Wobei TEST_SMS die Abfrage in der (aktuell geöffneten) ACCESS-DB ist. Hm, welches Objekt müsste ich noch definieren?
Mitglied: 132692
132692 28.03.2017 aktualisiert um 14:54:29 Uhr
Goto Top
Das Skript ist zum Ausführen in Access ausgelegt, nur dort existiert CurrentDB.
Außerhalb musst du erst mit CreateObjekt das Access-Application-Object erzeugen.
http://stackoverflow.com/questions/20403424/script-to-open-access-datab ...
Also besser die Makros in die DB packen, und im Skript nur Access starten und darin dann das Makro.
Mitglied: Graudon
Graudon 28.03.2017 um 15:14:14 Uhr
Goto Top
jou, das geht face-wink)
Mitglied: Graudon
Graudon 28.03.2017 um 15:58:42 Uhr
Goto Top
kann ich nochmal auf die Kuh mit dem Fisch zurückkommen? face-wink

Kann ich aus Access heraus auch Outlook z.B. einen Termineintrag übergeben? Ich dachte an sowas als Beispiel. Als *.vbs funktioniert es. Ich würde gerne die Parameter des Termins mit den Ergebnissen einer Abfrage füllen.

Dim objOL,objNS
DIM app, prop


Set objOL = CreateObject("Outlook.Application")
Set objNS = objOL.GetNamespace("MAPI")
Set folderCalendar = objNS.Folders("mail123@mail.de").Folders("Kalender (Nur dieser Computer)").Items
Set app = folderCalendar.add
Set prop = app.UserProperties.Add("T-ID", 1, false)

WITH app
app.Start = #03/27/2017 18:00:00#
app.Duration = 120
app.Subject = "Dies ist ein Test"
app.Location = "BEI MIR"
app.ReminderSet = False
app.body = "Schreiben wir hier ein paar Notizen rein"
prop.Value = "123456789"
app.Save
app.display
END WITH
Mitglied: 132692
132692 28.03.2017, aktualisiert am 29.03.2017 um 08:53:16 Uhr
Goto Top
kann ich nochmal auf die Kuh mit dem Fisch zurückkommen?
Das ist nicht der Sinn eines Forums das man zig unterschiedliche Fragen in einen einzigen Thread packt, das verwirrt nur die User die hier vorbei kommen und anhand des Titels etwas ganz anderes erwarten!
Kann ich aus Access heraus auch Outlook z.B. einen Termineintrag übergeben?
Ja.
Wie du die Felder des Records ansprichst siehst du ja oben rec.Fields("SpalteX").Value. Die weist du jeweils deinen Feldern zu fertig.
Mitglied: Graudon
Graudon 28.03.2017 um 16:17:27 Uhr
Goto Top
Danke dir und schönen Abend noch !

g