online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon cat_wisel vom 10.09.2019, 17:49 Options

laufende Nummer in unterformular

Hallo,
ich weiß, wurde schon oft beschrieben, aber klappt bei mir net.

2 tabellen- lieferanten und -bestellungen
Schlüssel LiefNr und BestNR.
Beziehung ist die LiefNr
Das Formular wird über eine Kombibox mit den Lieferanten-Daten
aufgefüllt(zuordnung über eine LiefNr). Durch einen Button starte ich nun
das Bestellformular. Eindeutige Zuordnung zum Lieferanten ist hier die LiefNr. Im Ufo-Endlosformular werden Bestelldaten eingetippt.
lfdNr, ArtikelNr usw.
Die lfdNr soll sich automatisch erhöhen.
LN ArtikelNr
1 299
2 354
3 486
usw.
jegliche Recherche im Net ( 4 Tage, endlose Stunden) brachten keine funktionierende Lösung.
Hier alle Codes bzw. Versuche aufzuführen ist sicher Sinnlos.
Am Ende steht immer im Feld LN #Name.
Auch versuche mit Text bzw Zahlenfeld brachten nix.
Ein Dummi-Lösung, Schritt für Schritt wäre ideal.....
Access 2002
Und bitte keine Links zu Donkarl usw.--Dort war ich schon!!!!


Antwort schreiben

Antwort 1 von RalfH vom 11.09.2019, 07:20 Options

Hallo cat_wisel,

Die lfdNr sollte in der Tabelle des Unterformulares als Autowert definiert werden, dann müsste das eigentlich klappen.
Gruß Ralf

Antwort 2 von cat_wisel vom 11.09.2019, 11:28 Options

Danke für die Antwort Ralf,
dass habe ich bereits versucht. Leider musste ich feststellen, dass sich der Autowert ständig erhöht. Soll heißen, sobald ich einen neuen Artikel mit entsprechend neuer ArtikelNr eingebe, ist dort die laufende NR(LN)
automatisch der nächst höhere Wert und beginnt somit(Beisp.) mit 2,3 oder ähnl. Ich möchte jedoch die Artikel einer erhaltenen Rechnung erfassen. Da fällt der Autowert flach. Denn jede neue Rechnung hat immer wieder eine neue laufende NR 1. So soll dasss auch hier sein.

Antwort 3 von lleopard vom 11.09.2019, 12:21 Options

hi cat_wisel,

irgendwie lese ich immer wieder, daß die Leutz Unterformulare in Ihren Formularen benutzen und dann nicht damit klarkommen.

Warum einfach wenns auch kompliziert geht...

Zitat:
Das Formular wird über eine Kombibox mit den Lieferanten-Daten
aufgefüllt(zuordnung über eine LiefNr). Durch einen Button starte ich nun
das Bestellformular. Eindeutige Zuordnung zum Lieferanten ist hier die LiefNr. Im Ufo-Endlosformular werden Bestelldaten eingetippt.
lfdNr, ArtikelNr usw.


Das Bestellformular ist - wie ich vermute - ein zuvor unsichtbares UF, das du dann einblendest?

Und im UF tippt man keine lfdNr ein, weil die sollte tatsächlich ein AutoWert-Feld sein.

Also nochmal von Vorne...

Du hast ein Bestellformular und lädst über ein KF die Lieferanten-/Kundendaten, die wiederum aus einer Tabelle kommen. Soweit so gut.

Nun willst du für diesen Lieferanten eine neue Bestellung eintickern. Dafür gibt es wahrscheinlich einen Button Bestellung?!

Es ist doch nun viel einfacher ein neues Formular zu erstellen und die LiefNr, also den eindeutigen Bezeichner zu übergeben.

LfdNr ist wie gesagt ein AutoWert, auch der wird nicht händisch gefüllt.

Das neue Formular öffnet sich also: DoCmd.OpenForm "Bestellung"

und nun übergibst du Forms!Bestellung!LiefNr.Value = LiefNr.Value

und auf dieselbe art auch andere Werte wie firmenbezeichnung oä die auch in der Tabelle Bestellung uU zu finden sein könnte.

Dann füllt der Mitarbeiter die Felder der Bestellung und speichert die Werte...

an deiner Stelle würde ich ein ungebundenes Formular erstellen und die eingegebenen Daten dann über ein Recordset-Objekt an die Tabelle Bestellung übergeben. Das hat den Vorteil, daß du die Eingaben vorher noch prüfen kannst. Stimmt zB die Artiekelnummer, usw...

Fragen? ;-)

Gruß Leo

Antwort 4 von lleopard vom 11.09.2019, 12:25 Options

Nachtrag: Grundsätzlich sollte jede Tabelle einen AutoWert mit Primärschlüssel vorweisen können.

Wenn du nun zB über LiefNr in der Tabelle Bestellungen einem Kunden eine eigene Nummer gegeben hast und willst nur dessen Einträge jeweils um 1 erhöhen, benötigst du nur eine kleine VBA Routine um das zu realisieren. Du könntest zB ja einfach die Datensätze zählen und diesen Wert dann um 1 erhöhen, wenn man einen neuen Eintrag generiert.

zB

dim cc = long

cc = Dcount("*","Bestellungen", "LiefNr=" & LiefNr.Value)
cc = cc+1

diesen Wert übergibst du dann zB an das Feld Rechnungsnummer oä

Gruß leo

Antwort 5 von cat_wisel vom 11.09.2019, 15:06 Options

Danke für die Hilfen zur Lösung des Problemes,

Habe alles gelesen, würde aber gern bei folgendem Ansatz, sofern realisierbar, bleiben:

Steuerelementinhalt von LfdNr:

=Nz(DomMax("LfdNr";"tblBestellungen");0)+1

..leider ist nun im Endlosformular bei jedem neuen Datensatz
eine "1" vordefiniert. Es wird nicht hochgezählt....leider.
hier fehlt wohl ne Art Schleife damit der Wert als $ ? deklariert wird und sich dann jeweils erhöht?.

Antwort 6 von lleopard vom 11.09.2019, 15:23 Options

Hallo Cat,

Zitat:
Steuerelementinhalt von LfdNr:

=Nz(DomMax("LfdNr";"tblBestellungen");0)+1

..leider ist nun im Endlosformular bei jedem neuen Datensatz
eine "1" vordefiniert. Es wird nicht hochgezählt....leider.
hier fehlt wohl ne Art Schleife damit der Wert als $ ? deklariert wird und sich dann jeweils erhöht?.


Du kannst doch nicht im Endlosformular dem Feld LfdNr diese Formel übergeben! Wahrscheinlich auch noch im Entwurf und dann in die Eigenschaften! Nene! Dat geht net!

Eigentlich ist dieser Wert doch vorgegeben, wenn du den Kunden im Hauptformular auswählst. Warum schreibst du den nicht einfach in ein Feld und übergibst diesen Wert dann dem neuen Eintrag?

Gruß Leo

PS: Oder reden wir aneinander vorbei?

Antwort 7 von cat_wisel vom 11.09.2019, 16:46 Options

ja lleopard, dem ist wohl so
der Wert LfdNr ist abhängig von der Anzahl der Bestellungen.
Vielleicht wird es deutlicher wenn die LfdNr >Pos> heißen würde:

Pos ArtikelNr
1 255
.........neuer Datensatz
2 287
..........neuer Datensatz
3 456

so soll es sein Stichwort (Endlosformular)
..diese POS-Nr soll sich natürlich automatisch erhöhen; zwar könnte ich sie immer manuell eintragen, aber das ist lästig.
Außerdem soll an dieser Stelle ein Autowert umgangen werden.

Antwort 8 von cat_wisel vom 12.09.2019, 11:52 Options

Für alle Interessierte mit dem selben Problem.

Habe das Problem wie folgt gelöst :

zunächst habe ich die Anweisungen auf dieser Seite

http://support.microsoft.com/kb/503950/de
genau befolgt!!

..leider brachte dies nicht das gewünschte Ergebnis, aber Sicherheitshalber macht das genau so wie es dort steht.

Nur habe ich statt das Feld Positionen neu in meine Tabelle aufzunehmen, den Code von MS geändert. So wurde aus "Positionen" das Feld im Code "Pos".

Dann habe ich im Netz, leider weiß ich nicht mehr woher, der Verfasser möge es verzeihen, folgenden Code gefunden:

Private Sub Form_Dirty (Cancel As Integer)
'prüfen ob es sich um einen neuen Datensatz handelt
If Me.NewRecord Then
ME.Pos!=Nz(DMax("Pos","tblBestellung"),0)+1
End If
End Sub

Der Code steht nun im EigenschaftenFenster Ereignis unter bei geändert! Den MS code habe ich bis auf den "Vor Löschbestätigung" wieder entfernt.

Was hier immer als "Pos" steht, muss bei euch der vergebene Feldname sein. Kann LfdNr oder wie auch immer heißen.
"tblBestellung" ist meine Tabelle die Bestellung heißt.
Das tbl schreibe ich vor jede Tabelle um direkt zu erkennen dass es sich um eine Tabelle handelt. Genauso schreibe ich vor jeden Formularnamen fml für Formular.

Ich benutze Access 2002, dass in meiner OfficeXP CD enthalten ist.

Man sollte immer in einer KOPIE seiner Datenbank herum experimentieren......Erfahrung macht klug.
Es mag zwar umständlich sein, aber ich habe nach jeder Änderung die Datenbank geschlossen, dann neu öfffnen und fortfahren.
Viel Glück an jeden der so macht. Das Problem hatte mich 5 Tage beschäftigt.
Aber nun funktioniert das richtig gut.
Dank an alle die geholfen haben, sei es durch Kommunikation, oder durch nachlesen können auf Websides.

Antwort 9 von Teddy7 vom 12.09.2019, 13:21 Options

Dann wollen wir mal noch hinzufügen, dass das nur funktioniert, wenn nur ein Benutzer damit arbeitet.

Ansonsten ist halt die Gefahr gegeben, dass 2 Leute gleichzeitig diese Funktion benutzen und dann KANN es dazu kommen, dass beide die gleiche Position vergeben.

In diesem Fall sollte man eine eigene Tabelle machen, in der die letzte vergebene Position pro Buchstabe steht, und mit VBA-Code bei Neuanlage eines Satzes diese Tabelle lesen(und sperren) und die neue Position wieder hinterlegen.

Gruß
Teddy

Ähnliche Themen

Access Unterformular
nela  22.05.2007 - 325 Hits - 5 Antworten

Unterformular mit toolbox/spreadsheet erstellt
mister  02.07.2007 - 168 Hits - 3 Antworten

Abfragenverweis in Unterformular
mbalrog  20.08.2007 - 128 Hits - 2 Antworten

Unterformular gefiltert, keine Änderung im Hauptformular
Problemchen87  13.04.2008 - 205 Hits - 4 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 20:06:00 2026