PDA

Vollständige Version anzeigen : Einzelne Datensätze nacheinander in jeweils eine neue Datei exportieren


igelmann
07.11.2000, 13:20
Hallo Leute,
ich möchte aus einer Access Datenbank alle Datensätze einzeln nacheinander in jeweils eine neue Datei exportieren. Dabei soll der Dateiname ein Wert aus einem Feld des Datensatzes sein.

Der Hintergrund der Aktion ist die automatisierte Erstellung von HTML Seiten.
Mit allen Datensätzen funktioniert es, aber ich möchte jeden einzelnen Datensatz (wahrscheinlich am besten über den Report) in eine Datei exportieren.

Wie könnte ich zur einer Schleife kommen ??
Vielen Dank im voraus !!

Martin Igelmann

schmacko
07.11.2000, 14:30
Mit dem eingebauten Export funktioniert das so meines Wissens nicht. Da Du wohl in eine html-Datei exportieren willst, kannst Du den Export in eine Textdatei programmieren. Versuch mal, den folgenden Code in ein modul zu kopieren und für Deine Bedürfnisse anzupassen:

Sub ExportInTextDatei()


Dim FileNr As Long
Dim Datei As String
Dim rs As Recordset

'----------------------------------------------------------------------------------
'RecordSet-Objekt mit der entsprechenden Tabelle und evtl. Kriterien initialisieren
'----------------------------------------------------------------------------------
Set rs = CurrentDb.OpenRecordset("SELECT Dateiname, irgendwas, nochwas FROM tblDaten WHERE xyz= dingsbums", dbOpenSnapshot)

If rs.BOF And rs.EOF Then
Exit Sub
End If

rs.MoveFirst

Do Until rs.EOF
'----------------------------------------------------------------------------------
'Pfad und Name der Datei festlegen
'----------------------------------------------------------------------------------
Datei = "C:\xyz\" & rs.Fields("Dateiname")

'----------------------------------------------------------------------------------
'Freie Nummer für Eingabedatei ermitteln
'----------------------------------------------------------------------------------
FileNr = FreeFile

'----------------------------------------------------------------------------------
'Datei erstellen oder überschreiben,
'----------------------------------------------------------------------------------
Open Datei For Output As #FileNr

Print #1, rs.Fields("irgendwas") & rs.Fields("nochwas")
Close #FileNr
rs.MoveNext
Loop

rs.Close
Set rs = Nothing

End Sub

igelmann
07.11.2000, 15:13
Hallo Schmacko,
vielen Dank für deine prompte Hilfe.
Allerdings ist mir das etwas zu hoch. Könntest du mir freundlicherweise dein Modul noch mal etwas auffüllen, wenn dabei gilt: Datenbank "test" , Tabelle "Adressenliste" Formular "Adressenliste" Datenfelder aus der Tabelle "Vorname" , "Nachname" , "Dateiname" , "Adresse".

Nochmals vielen Dank

Martin

schmacko
07.11.2000, 15:31
Wenn ich jetzt richtig veratnden habe, hast Du den zu exportierenden Datensatz in einem Formular geöffnet.
Die entsprechenden felder werden im Formular angezeigt und heißen dort genauso wie die Tabellenfelder, richtig ?
dann ist es noch um einiges einfacher. Du erstellst Dir auf dem Formuar eine Befehlsschalfläche (Button), dessen eigenschaft "Beim klicken" (OnClick) Du auf [Ereignisprozedur] stellst. dann drückst Du die drei ... und bibst zwischen den Prozedurnamen und End Sub folgenden Code ein:

Dim FileNr As Long
Dim Datei As String

'----------------------------------------------------------------------------------
'Pfad und Name der Datei festlegen
'----------------------------------------------------------------------------------
Datei = "C:\xyz\" & Me.Dateiname

'----------------------------------------------------------------------------------
'Freie Nummer für Eingabedatei ermitteln
'----------------------------------------------------------------------------------
FileNr = FreeFile

'----------------------------------------------------------------------------------
'Datei erstellen oder überschreiben,
'----------------------------------------------------------------------------------
Open Datei For Output As #FileNr

Print #1, "Vorname: " & Me.Vorname & " Nachname: " & Me.Nachname
Print #1, "Adresse: " & Me.Adresse
Close #FileNr

Natürlich mußt Du die Pfadangaben (hier: C:\xyz) noch anpassen. Gleiches gilt, wenn Deine Formularfelder anders als die Tabellenfelder heißen.
Die Prozedur erstellt dann im angegebenen Pfad eine Textdatei mit dem Dateinamen,d er im Feld Dateiname angegeben ist. In der Ersten Zeile steht "Vorname: " sowie der jeweilige Vorname, "Nachname: " sowie der jeweilige Vorname
In der zweiten Zeile steht die Adresse. wenn Du das ganze noch ein wenig anders ausgeben willst, dann sieh mal in der Hilfe zum Print #-Befehl nach.
Ich hoffe, das klappt so, weil's ab jetzt dann kostet ;-)

gruß, Schmacko

igelmann
07.11.2000, 16:49
Hallo Schmacko,
hiermit überweise ich dir 100 cybercoins ;-)
Nochmals vielen Dank !!!!

Ansonsten gilt: Selig sind die geistig Armen (ICH!!)

Mit deiner letzten Antwort kann ich jetzt die einzelnen Datensätze als einzelne Dateien exportieren !!! Hurra.

Der Gedanke dabei war, dass ich nur das Beiwerk des "Templates" (Print #1 etc.) ändern muss, um auf diese Weise mit den Datensätzen entsprechend viele einzelne HTML Dateien erstellen zu können.
Wenn das Design einer HTML Seite geändert wird, muss man deine Prozedur mit den Datensätze per Hand durchlaufen lassen.

Vielleicht bekomme ich aus deiner Antwort 1 und zwei ja noch eine Schleife hin ...

Viele Grüße

Martin

schmacko
08.11.2000, 10:07
Freut mich, Dir geholfen zu haben. Die Schleife habe ich schon in Antwort 1 beschrieben. Das Recordset-Objekt kannst Du mit der jeweiligen Bedingung so anpassen, daß es genau die Datensätze auswirft, die Du benötigst. Wenn Du SQL-mäßig nicht so fit bist, kannst Du Dir auch eine Abfrage zusammenklicken, die die entsprechenden Daten enthält. Diese kannst Du dem Recordset-Objekst als Datenquelle mitgeben:

Angenommen, die Abfrage heißt qryDatenAusgabe. Dann initialisierst Du das Recordset-Objekt wie folgt:

Set rs = CurrentDb.OpenRecordset("qryDatenAusgabe", dbOpenSnapshot)

Wenn Du alle Daten einer Tabelle willst, brauchst Du keine Abfrage, dann gibst Du einfach den Tabellennamen statt des Abfragenamens ein!

Rest wie in Antwort 1 (Natürlich mit den Feldbezeichnungen aus Antwort 2).

Ich hoffe, es klappt.
Gruß, Schmacko
(Sollte es nicht ab jetzt kosten ???)