Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Textdatei mit fortlaufender Nummer generieren

Begonnen von TerraAOC, Januar 18, 2021, 11:10:13

⏪ vorheriges - nächstes ⏩

TerraAOC

Hallo, ich möchte, wenn ein User Werte in Textfelder einträgt und danach zur Bestätigung einen Button drückt, das dieser Button die Werte aus dem Textfeld mit deren Bezeichnung exportiert und mit einer fortlaufenden Nummer generiert. Im Style einer CSV
also zb:
Bestellnummer;BE1234567;Artikelnummer;12345678;Menge;1;Lagerort;A4B3C
und dann soll es gespeichert werden als 1.txt und der nächste dann als 2.txt usw.
Weiß leider gar nicht wo ich da wie anfangen soll.
Die Tabelle mit den Textfeldern existiert bereits, der Button auch muss nur gucken, wie ich den Button programmiere.
Ich hab da auf die schnelle auch nichts bei Google gefunden, da das mMn sehr speziell ist und ich auch nicht weiß, welche Schlagwörter ich verwenden kann.
Außer das: https://access-basics.de/index.php/Textdateien_exportieren_und_einlesen.html
Damit hab ich das Problem mit dem Button noch, aber immerhin ein Anfang, nur leider darf ich dort nicht weiterlesen und kaufe mir nicht für 69€ irgendwelche Dinge.

Danke für eure Hilfe im Voraus.

MzKlMu

Hallo,
in dem Artikel ist alles beschrieben was Du brauchst, da musst Du nix kaufen.

Jetzt solltest du mal Dein Problem mit dem Button beschreiben.
Gruß Klaus

TerraAOC

Zitat von: MzKlMu am Januar 18, 2021, 12:05:32Jetzt solltest du mal dein problem mit dem button beschreiben.
Ich habe einen Button, nennen wir ihn mal btnBestätigung
Wenn ich diesen Button klicke, sollen alle Werte aus den einzelnen Textfeldern
txtBestellnummer, txtArtikelnummer, txtMenge und txtLagerort
in eine .txt Datei exportiert werden, diese soll einen fortlaufenden Namen bekommen.
Von diesen 4 Textfeldern sind 3 schon ausgefüllt wenn das Formular betreten wird (vorgegeben von Abfrage) und das dritte
txtMenge trägt der User per Hand ein

MzKlMu

Hallo,
das Formular ist doch an eine Tabelle gebunden und diese Tabelle muss exportiert werden, nicht die Formularfelder.
Da gibt es aber noch einiges zu klären.

Wird immer die komplette Tabelle exportiert ?
Die LfdNr muss bereits beim Anlegen des Datensatzes erzeugt und in der Tabelle gespeichert werden.

Bitte beschreibe mal das komplette Vorhaben.
Gruß Klaus

TerraAOC

#4
Zitat von: MzKlMu am Januar 18, 2021, 12:18:56Bitte beschreibe mal das komplette Vorhaben.

Ein User liest einen Auftrag bei uns in die Datenbank ein (Auftrag aus WaWi)
Danach öffnet sich ein Formular das anzeigt wo dieser Artikel im Lager liegt, wieviel benötigt wird usw.
Danach geht der User zu dem Lagerfach, sieht nach wieviel dort von diesem Artikel liegen. Also zb.
der User benötigt 2 im Auftrag und die Datenbank zeigt auch 2 an, im Regal liegt aber nur eine. Dann soll der User in das Textfeld Menge in dem Formular die tatsächliche Menge eintragen(auch wenn die Menge stimmt)
daraufhin soll, wenn alle Artikel in dem Auftrag bearbeitet sind, eine Textdatei mit allen Daten generiert werden, die später wieder ins WaWi eingelesen wird.

Besser kann ich es nicht erklären

Ich verstehe dich aber so, das ich ein leeres Feld in meiner Tabelle habe, zb MengeIst und dieses Feld wird nur befüllt durch Eingabe in die Textbox in dem Formular und dann wird die Tabelle exportiert in eine .txt
Dann bleibt nur noch das Problem mit der LfdNr und wie ich durch klick auf den Bestätigen Button automatisch die Tabelle exportiere

Edit: Nachdem ich nochmal kurz drüber nachgedacht habe, kann das so gar nicht funktionieren, da ich eine Abfrage brauche für das Formular, da die Tabelle gefiltert werden muss auf eine Abteilung.

MzKlMu

Hallo,
soll die LfdNr bei jedem Export wieder bei 1 beginnen ?

Was willst Du überhaupt mit einer LfdNr das WaWi kann ja damit nichts anfangen, die ist ja dort unbekannt.
Gruß Klaus

derArb

Hallo,
- wird im WaWi kein Lager verwaltet oder ist Dein Lager identisch dem des WaWi?
- ist Dein Lager das einzige, auf welches zugegriffen wird oder ist das ein Zwischenlager,
  welches aus einem Zentrallager zwecks schnellerem Zugriff die Artikel geliefert bekommt
  und diese als Konzessionslager verwaltet?
- Jedenfalls ist ungeklärt, welcher Anwender(User) welche Artikel zu welchem Zeitpunkt aus dem Lager entnimmt.
- Es ist auch ungeklärt, wer das Lager auffüllen darf.

Insgesamt wird wohl eine kleine Lagersoftware die Lösung sein.
Aus der kann man dann jederzeit herausfiltern, zu welchem Auftrag, welche Lagerbewegungen stattgefunden haben.
Also ganz so einfach wird's nicht werden. Mit einer step by step Erstellung ist das aber ohne weiteres bewältigbar.
Deine gewünschte Lösung ist jedenfalls insgesamt etwas wackelig im Sinne von sauberer Datenbankverwaltung.

crystal

Hallo,
ich nehme an, dass dem WaWi die Datei-Namen eigentlich egal sind. Es liest vermutlich einfach nur das ein, was in ein dafür bestimmtes Verzeichnis gelegt wird und schaut zu bestimmten Zeitpunkten oder durch User-Aktion nach, ob es dort neue Dateien gibt. Ich glaube nicht, dass das WaWi die Nummer im Datei-Namen irgendwie auswertet, allenfalls für die Reihenfolge. Eine simple fortlaufende Nummerierung wird da ohnehin Probleme bereiten, da die Sortierung der Dateien wohl nicht numerisch, sondern alphabetisch erfolgt, so dass 10.txt vor 2.txt käme - da müsste man schon führende Nullen einbauen.

Statt einer laufenden Nummer könnte man deshalb vielleicht auch Datum/Uhrzeit als Namen benutzen, damit die Datei-Namen eindeutig werden und die richtige Reihenfolge der Vorgänge erhalten bleibt.

Ich hoffe, das hilft. Ansonsten frag doch erstmal die WaWi-Admins, was sie brauchen und wie sie es verarbeiten können.

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

crystal

Ergänzung:
Es gibt in VBA die Möglichkeit, variablen STATIC zu definieren. Das bewirkt, dass der aktuelle Wert der Variablen über das Ende der Prozedur, die ihn setzt, erhalten bleibt - so lange, bis Access beendet wird (dann beginnt es wieder bei Null).
Dazu müsstest du beim Start von Access eine Variable mit STATIC definieren; in der Ereignis-Prozedur "Beim Klicken" deines Buttons wird dann diese Variable einfach um Eins hochgezählt. Der daraus resultierende Wert bleibt bestehen, wenn deine Ereignis-Prozedur beendet wird.

Siehe hierzu
https://www.herber.de/mailing/vb/html/vastmstatic.htm
was eine leicht korrigierte Version eines Original-Microsoft-Textes ist (google "vba static").

Aber Vorsicht: wenn du so einfach eine laufende Nummer generierst und eine Datei schreibst, ohne vorher nachgeschaut zu haben, ob es diese Datei schon gibt, werden die alten Daten einfach überschrieben. Schade eigentlich. Also müsstest du die Nummer solange hochzählen, bis es keine bestreffende Datei bereits gibt. Alles viel zu mühsam - die Idee mit einem Timestamp als Namen, z. B. nach dem Muster JJJJMMTTHHMMSS, halte ich für besser und einfacher (notfalls auch noch mit Zehntel- und Hundertstel-Sekunden der aktuellen Systemzeit).
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

TerraAOC

Zitat von: derArb am Januar 18, 2021, 14:57:26- wird im WaWi kein Lager verwaltet oder ist Dein Lager identisch dem des WaWi?
- ist Dein Lager das einzige, auf welches zugegriffen wird oder ist das ein Zwischenlager,
  welches aus einem Zentrallager zwecks schnellerem Zugriff die Artikel geliefert bekommt
  und diese als Konzessionslager verwaltet?
- Jedenfalls ist ungeklärt, welcher Anwender(User) welche Artikel zu welchem Zeitpunkt aus dem Lager entnimmt.
- Es ist auch ungeklärt, wer das Lager auffüllen darf.

- identisch, es behandelt Artikel und Aufträge aus dem Lager.
- das einzige
- Warum? Er(der user) nimmt den Auftrag an (wie auch immer das aussehen mag) und wenn er im betreffenden Formular ist und die Artikelnummer mit dem Lagerort und der Menge vor sich hat, geht er hin und nimmt den Artikel aus dem Lager
-Nicht der User der DB, dafür gibt es andere Leute

Zitat von: crystal am Januar 18, 2021, 15:08:28ich nehme an, dass dem WaWi die Datei-Namen eigentlich egal sind. Es liest vermutlich einfach nur das ein, was in ein dafür bestimmtes Verzeichnis gelegt wird und schaut zu bestimmten Zeitpunkten oder durch User-Aktion nach, ob es dort neue Dateien gibt. Ich glaube nicht, dass das WaWi die Nummer im Datei-Namen irgendwie auswertet
Richtig, dem WaWi ist egal wie die Dateien heißen, das ich lediglich für die Übersicht im Ordner

Zitat von: MzKlMu am Januar 18, 2021, 14:24:46soll die LfdNr bei jedem Export wieder bei 1 beginnen ?
Nein, fortlaufend beginnend bei 1 ohne Ende

Zitat von: crystal am Januar 18, 2021, 15:41:17die Idee mit einem Timestamp als Namen, z. B. nach dem Muster JJJJMMTTHHMMSS, halte ich für besser und einfacher (notfalls auch noch mit Zehntel- und Hundertstel-Sekunden der aktuellen Systemzeit).

Das klingt auch gut. Wie würde man das am einfachsten Umsetzen?

TerraAOC

Ich hab das ganze mal sehr grob angelegt so wie ich mir das vorstelle, Artikelnummer und Lagerort sind aus dem Grund Kombifelder, weil es mehrere Artikelnummern im Auftrag geben kann und ein Artikel an verschiedenen Orten liegen kann.
Nach dem Klick auf den Button, soll nun das ganze in der dazugehörigen Tabelle gespeichert werden und dann soll diese Tabelle exportiert werden, danach können die Einträge aus der Tabelle gelöscht werden, denn es gibt ja die .txt Datei.


MzKlMu

Gruß Klaus

TerraAOC

#12
Zitat von: MzKlMu am Januar 18, 2021, 16:16:15Hallo,
und wo ist da jetzt die LfdNr ?

Warum soll die da eingetragen werden? Diese ist doch nur für die exportierte Datei interessant.

Edit: Habe gerade nochmal darüber nachgedacht, würde es funktionieren wenn ich jedem DS in der Tabelle eine LfdNr zuweise(Auto-ID vielleicht?)
und dieses dann als dynamisches Bezeichnungsfeld in mein Formular integriere?

crystal

Zitat von: crystalZitat von: crystal am Heute um 15:41:17
die Idee mit einem Timestamp als Namen, z. B. nach dem Muster JJJJMMTTHHMMSS, halte ich für besser und einfacher (notfalls auch noch mit Zehntel- und Hundertstel-Sekunden der aktuellen Systemzeit).

Das klingt auch gut. Wie würde man das am einfachsten Umsetzen?

strFileName = "c:\transfer\" & Format(Now, "yyyymmdd-hhmmss") & ".txt"
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MzKlMu

#14
Hallo,
Diese ist doch nur für die exportierte Datei interessant.Es wird aber die Tabelle exportiert, also muss die LfdNr in den Datensatz.
Nimm wie angedacht den Autowert.

PS:
Was willst Du jetzt eigenlich genau, einen DAteinamen für den Export erzeugen oder jeden Datensazu nummerieren ?
So wie Du es beschrieben hast:
Zitatwenn ich jedem DS in der Tabelle eine LfdNr zuweise(Auto-ID vielleicht?)
Gruß Klaus