Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Tabelleneintrag soll automatisch erhöht werden WIE??





Frage

Hallo zusammen! Ich habe folgendes Problem. Ich habe eine Tabelle erstellt indem sich eine AuftragsNr befindet. Dazu habe ich ein Formalur mit einem Button " Neuer Auftrag" Jetzt möchte ich gerne das ich jedesmal wenn ich den Button klicken die letzte Auftrags NR aus der Tabelle gelesen wird und dann um 1 erhöht wird und in dem Feld im Formular eingetragen wird. Nur ich habe keine Ahnung wie ich das mache. BITTE UM HILFE und um Rat! Danke Gruss Sascha

Antwort 1 von El Bobbele

Hallo Sascha!

Das hier sollte helfen:

Private Sub Form_BeforeInsert(Cancel As Integer)
    Me.AuftragsNr = Nz(DMax("AuftragsNr", "tblAuftraege") + 1, 1)
End Sub


Das Ereignis "Vor Eingabe" wird ausgelöst, wenn die Eingabe in einem *neuen* Datensatz begonnen hat. Das dürfte in deinem Fall ideal sein.

Gruss
El Bobbele



Antwort 2 von Grummel

Hi Sascha,

es geht auch mit einem Makro, dass du z.B. an die Eigenschaft "Bei Fokuserhalt" bindest:

SetzenWert
Bedingung: [Formulare]![dein Formularname]![AuftragsNR]ist Null
Aktion: SetzenWert
Element: [Formulare]![dein Formularname]![AuftragsNR]
Ausdruck: DomletzterWert("[dein Tabellenname]";[AuftragsNR]+1)

Die Bedingung ist notwendig, damit ein neuer Wert nur gesetzt wird, wenn das Feld AuftragsNR leer ist.

Bei Ausdruck kannst du auch die Funktion DomMax verwenden. Hierbei wird nicht nach dem letzten Wert, sondern nach dem höchsten Wert gesucht.

Gruß G.

Antwort 3 von SAMAneedhelp

Vielen Dank.


Ich schau gleich mal nach ob eines von eure Vorschlägen funktioniert.



Antwort 4 von SAMAneedhelp

Hi :(

Habe es nach dem Marko versucht. Funktioniert nicht!!!!

Es kommt immer aktion fehlgeschagen.

Hilfe @ Grummel

Antwort 5 von Grummel

Hi Sascha,

prüfe doch mal unter
FORMULARE / CODE / EXTRAS / VERWEISE
in welchen Kästchen ein Haken ist.

Gruß G.


Antwort 6 von Grummel

Hi Sascha,

Die Meldung Aktion fehlgeschlagen deutet darauf hin, dass dein Access die Bedingung
....Ist NULL nicht interpretieren kann. Ich hatte sowas auch schon mal. Daher der Hinweis auf die Verweis-Einträge.
Bei mir sind folgende Verweise aktiv (Häkchen im Kasten):
* Visual Basic for Application
* Microsoft Access 11.0 Object Library utility
* Microsoft Visual Basic for Application Extensibility 5.3
* Microsoft Office XP Web Components
* Microsoft DAO 3.6 Objrct Library

Mit diesen Verweisen funktioniert das Makro.

Gruß G.



Antwort 7 von SAMAneedhelp

hi Grummel

würde dir jetzt gerne berichten das es funktioniert, aber ist tuts leider nicht.

Ich habe Access 2000 und nicht xp.
Also weichen die verweise etwas ab. ich habe ältere versionen
Ich hoffe du hast noch einen Tipp für mich!

Mein Makro
2 Aktioen ( Setzen Wert)

1:
Feld : [Formulare]![Neu Auftrag]![Aufnr] Ist Null
Ausdruck : leer ( nicht eingetragen

2
Feld: [Formulare]![Neu Auftrag]![Aufnr]
Ausdruck : DomMax("[auftrag]";[Aufnr]+1)

Bitte wieder um Hilfe.

Antwort 8 von Grummel

Hi Sascha,
weiterer Hilfeversuch.

Zunächst, unter A2000 laufen solche Makros auch.

Aber zu deiner Makrogestaltung:
Du brauchst nur 1 Zeile im Makro.

Zunächst schaltest du im Makroeditor die Spalte "Bedingung" ein (Klick auf das Ikon in der Symbolleiste)

in diese Spalte (Zeile 1) gibst du die Bedingung ein: [Formulare]![Neu Auftrag]![Aufnr] Ist Null
In der Spalte Aktion wählst du SetzenWert aus.

In dem Optionsfeld (unten links) gibst du ein:

bei Element [Formulare]![Neu Auftrag]![Aufnr]
das ist der Name deines Steuerelements.

bei Ausdruck gibst du die Domänfunktion ein
DomMax("[auftrag]";[Aufnr]+1)

So sollte es funktionieren.
Viel Glück!

Gruß G.





Antwort 9 von SAMAneedhelp

hi Grummel

Also es funktioniert noch nicht! Aber ich bin noch in guter Hoffnung. Es muss doch mal klappen.


ich habe jetzt das makro so erstellt wie du es mir gesagt hast.

Wenn ich jetzt im Formular den Button klicken passiert nichts.
Keine meldung nichts.

hast du noch eine Ahnung wieso und warum?

Ich hoffe du bist nicht mit deinem Latein am ende!

Gruss Sascha

Antwort 10 von Grummel

Hi Sascha,

was macht denn dein Button, bzw. was soll er machen?

Ich empfehle dir, das Makro an die Eigenschaft "bei Fokuserhalt" des Steuerelementes "Aufnr" zu binden.

Wenn du nun z.B. über deinen Button zu einem "Neuen Datensatz" wechselst, und der Fokus kommt zum Steuerelement Aufnr, wird das Makro gestartet und eine um 1 erhöhte Auftrags-Nr eingetragen.
Wechselst du jedoch zu einem vorhandenen Datensatz, der bereits ein Auftrags-Nr hat, wird das Makro nicht ausgeführt (Bedingung in dem Makro).

Gib mir Meldung ob es funzt. Es wäre lächerlich, wenn wir das nicht hinkriegten.

Gruß G.

Antwort 11 von Grummel

Hi Sascha,
habe noch was wichtiges vergessen:

Die Aktion SetzenWert verlangt in der Option "Element" den Namen des Steuerelements.
Also bei Element [Formulare]![Neu Auftrag]![Aufnr]
Kontrolliere bei dem Steuerelement [Aufnr], ob es der Name des Steuerelements ist, nicht der Text, der hinter Steuerelemntinhalt steht.

Sollte in beiden der gleiche Text stehen, ist es sowieso egal.

Gruß G.

Antwort 12 von SAMAneedhelp

Hi Grummel

Ja genau der Button soll genau das machen was du in Antwort 10 geschildert hast.

Hast du ICQ dann kannst du mir mal deine Nr geben oder per email schicken.
Dann adde ich dich und wir machen das schnell zusammen.
Wenn du möchtest und zeit dafür hast.

Denn es ist noch immer alles beim alten. :(

Gruss Sascha

Antwort 13 von El Bobbele

Moin ihr beiden!

Die DomMax-Funktion wird in Antwort 8 falsch verwendet:

Syntax:
DomMax(<Feld>;<Tabelle>)

DomMax("[AufNr]";"[Auftrag]) + 1

Eigentlich ging ich davon aus, dass Makros in der Form bereits ausgestorben sind. Wenn ich sehe, wie umständlich die sind, dann ist das kein Wunder. Ich rate daher jedem DRINGEND, auf deren Einsatz zu verzichten, wenn es nicht wirklich sein muss (Stichwort Autoexec-Makro). Es gibt für Makros immer andere Lösungen.

@Sascha
A propos andere Lösungen. Was ist eigentlich aus meinem Lösungsvorschlag geworden? Hast du den überhaupt probiert?

Gruss
El Bobbele

Antwort 14 von SAMAneedhelp

Hi EL und Grummel

Danke für deinen Tipp EL:

Es funktioniert zu 90%

Jetzt ist noch folgendes Problem...

Es funktioniert erst wenn ich zum letzten Datensatz gehe( per Navigation)( der ist komplett leer, keine Einträge) und dann den Button drücken. Danach wird die richtig Zahl eingefügt!

Hab ihr einen Idee wenn wie das funktioniert wenn ich z.b bei auftrag 21 von 129 bin und dann automatisch ganz nach hinten springe und dann das Marko ausführen möchte.
Wenn es so ist haben wir ( ihr ) es geschaft.

Wie funktioniert das?

Kurz zu deiner Lösung EL:
ich habe das ausprobiert aber ich komme mit vb gar nicht klar und wußte nicht wie ich das machen soll und wo ich das einfügen sollte.



Bitte um Rat
Vielen dank schonmal
Sascha

Antwort 15 von Grummel

Hi Sascha, guten Morgen.

Sorry für meinen Dreher bei der DomMax-Syntax. War keine Absicht, aber El Bobbele hat es ja gerade gebogen.

Ich vermute, du hast den Button nicht richtig konfiguriert.
Lege doch einfach einen neuen mit Hilfe des Befehlschaltflächenassistenten an:

Toolbox / Befehlsschaltfläche
Im sich öffnenden Assistenten dann Datensatzoperation / Neuen Datensatz hinzufügen

Dann kannst du von jedem beliebigen Datensatz zu einer leeren Maske springen und neue Daten eingeben.

Gruß G.


Antwort 16 von SAMAneedhelp

OLE

Ich danke euch beiden ( verbeuge mich)!!!!!!


ES FUNKTIONIERT: SUPER MEGA FREU***



Bis dann vielleicht nochmal!!!


Gruss Sascha

Antwort 17 von El Bobbele

Moin ihr beiden!

@Sascha
Wenn du mit VBA nicht zurechtkommst, dann musst du halt was sagen. Ein Hilfeforum funktioniert halt nur durch Kommunikation zwischen Helfer und Hilfesuchenden. Mit ein wenig Aufwand mehr hätte das schon funktioniert. :-)

@Grummel
Tut mir leid, wenn ich dir nach der vielen Mühe, die du in diesem Beitrag geleistet hast, deinen Lösungsweg mehr oder weniger schlechtgeredet habe. Das ist mit Sicherheit nicht angenehm, sowas lesen zu müssen. :-/

Gruss
El Bobbele

Antwort 18 von Knubbel

Hi,

Zitat:
Eigentlich ging ich davon aus, dass Makros in der Form bereits ausgestorben sind.


Warum hat Billy-Boy wohl so viel Entwickler angestellt?
Warum ist die Makro-Technik immer noch in Access vorhanden?
Es sind nicht alle Access-Anwender gleichzeitig Programmierer. VBA ist sicher vielseitiger als die Makros, aber vieles lässt sich für Nichtprogrammierer halt auch durch Makros lösen.

mfg Knubbel


Antwort 19 von El Bobbele

Hi Knubbel!

Zitat:
Warum hat Billy-Boy wohl so viel Entwickler angestellt?

Also die Frage musst du mir mit dem aktuellen Zusammenhang mal erklären.

Zitat:
Warum ist die Makro-Technik immer noch in Access vorhanden?

Hmm, aus Kompatiblitätsgründen zu Access 2.0? :-)

Zitat:
Es sind nicht alle Access-Anwender gleichzeitig Programmierer.

Wer sagt denn, dass man Programmierer sein muss? In der Tat ist es ja so, dass man als Makro-Umsteiger kaum "echte" VBA-Kenntnisse benötigt, da nahezu alle Makro-Ausdrücke allein durch simple DoCmd-Anweisungen abgedeckt werden. Wer also Zeit und Energie in die Erlernung der Makro-Syntax gesteckt hat, kann genausogut das DoCmd-Äquivalent lernen und anwenden. Bis dahin werden noch nicht einmal 1% von VBA genutzt, von "Programmierung" kann also noch gar keine Rede sein.

Für Makro/VBA-Umsteiger bietet VBA jedoch Riesenvorteile. Einerseits macht es die DoCmd-Anweisung leicht, bisherige Vorgehensweisen zu übertragen, während man sich parallel mit der VBA-Umgebung vertraut machen kann. Mit der Zeit eignet man sich immer mehr VBA-Wissen und es dauert nicht mehr lange, bis man die Grenzen der Makroprogrammierung überschritten hat.

Ich sage das jetzt mal in aller Deutlichkeit: Nur Access und VBA zusammen bilden das Duo, dass die Anwendung zu einem machtvollen Instrument werden lassen. Die Makro-Programmierung ist dagegen nur eine Sackgasse, die früh endet und Access in seinen Möglichkeiten regelrecht kastriert.

So, jetzt habe ich sicherlich einige Makro-Nutzer vor den Kopf gestossen. Wie kann dieser arrogante El Bobbele nur solche Sprüche loslassen und die Arbeit von Makro-Anwendern dermaßen denunzieren? So ähnlich lautete auch sicherlich deine Frage, lieber Knubbel, die dich zum Verfassen deines Beitrages bewogen hat, nicht wahr? :-) Tatsache ist aber, dass ich die Arbeit und Leistung von jedem respektiere, so wie sie ist. Ich helfe nur dabei, diese Arbeit nach Möglichkeit zu verbessern. Und dazu gehört nach meiner Auffassung, die Makro-Nutzer auch zum Umstieg auf VBA zu bewegen (ggfs. mit Nachdruck, s.o. *g*). Man muss ja VBA nicht zu 100% beherrschen, es reicht ja vorerst der reine Umstieg. Mit ein wenig Interesse, Neugier, Lernwille und den entsprechenden Erwartungen schaukelt man sich dann soweit, wie man kann und will. Die Möglichkeiten werden auf jeden Fall immer vielfältiger sein, als die von der reinen Makro-Programmierung, das kann ich versichern.

Deswegen will ich jeden ermuntern, sich zumindest einmal mit VBA zu befassen und sich davon ein Bild zu machen - es ist schliesslich kein Monster und beisst auch nicht. Erst dann kann man guten Gewissens eine akzeptable Entscheidung für oder gegen VBA treffen. VBA ist in Access eine viel zu wertvolle Komponente, als dass man es ungesehen ignorieren kann.

Gruss
El Bobbele

Antwort 20 von SAMAneedhelp

Hey Jungs

Ich finde es ja voll nett das mein fehler so eine Diskussion hervorgerufen hat.
Aber ich hab schon wieder ein neues Problem!!

Also schaut es euch mal an und hilft mir bitte.


:D Gruss Sascha

Antwort 21 von Knubbel

Hi El Bobbele

[Quote]So, jetzt habe ich sicherlich einige Makro-Nutzer vor den Kopf gestossen. Wie kann dieser arrogante El Bobbele nur solche Sprüche loslassen und die Arbeit von Makro-Anwendern dermaßen denunzieren?


Du hättest Wahlkampf-Redner werden sollen!

Kein Mensch (auch nicht ich) hat die Leistungsfähigkeit von VBA in Frage gestellt.

Dennoch hat die in Access integrierte Makro-Technik seine Berechtigung.

mfg Knubbel




Antwort 22 von El Bobbele

Hi Knubbel!

Zitat:
Dennoch hat die in Access integrierte Makro-Technik seine Berechtigung.


Welche denn? Bekommst du mehr als fünf handfeste Argumente zusammen, die eine solche Aussage rechtfertigen? Beim Wahlkampf zählen schliesslich Argumente, keine Phrasen. :-)

Gruss
El Bobbele

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: