Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: datekk am Januar 23, 2014, 17:19:28

Titel: Autowert nur positive Zahlen
Beitrag von: datekk am Januar 23, 2014, 17:19:28
Hallo,

ich habe eine Tabelle in welcher der Schlüssel per Zufall erstellt wird. Leider werden hier auch negative Schlüssel vergeben, also mit einem Minuszeichen vorher.

Ist es möglich dies so zu konfigurieren, dass ausschließlich positive Schlüssel erstellt werden?

Titel: Re: Autowert nur positive Zahlen
Beitrag von: MzKlMu am Januar 23, 2014, 17:51:57
Hallo,
der Schlüssel ist doch eigentlich egal, im Regelfall ist der doch gar nicht zusehen, weil ausgeblendet.
Titel: Re: Autowert nur positive Zahlen
Beitrag von: ebs17 am Januar 23, 2014, 19:26:20
Wenn Du Autowert (Counter) statt Zufallswert verwendest, hättest Du ein paar Versuche im positiven Bereich frei (bis etwa 2,14 Mrd.), ehe der Wertebereich in den gleich großen negativen Bereich geht.
Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 03, 2014, 10:18:17
ok. vielen Dank an Euch. Wie ist es dann z.B. Möglich, Auftragsnummern nach einem gewissen Schema zu erstellen? Z.B. 2014-00010 welche fortlaufend vergeben werden?
Titel: Re: Autowert nur positive Zahlen
Beitrag von: Hondo am Februar 03, 2014, 12:48:40
Ja, erstelle dazu in einem Modul eine öffentliche Funktion die dir den Auftragsnummer liefert.
Beispiel:
Public function getAuftragsnummer() As String
    ' Todo:
    ' 1. letzte Nummer aus Tabelle holen => DLOOKUP()
    ' 2. Zählnummer extrahieren => clng(right(LetzteNummer,len(letzteNummer)-5))
    ' 3. Zählnummer um 1 erhöhen => Zählnummer = Zählnummer + 1
    ' 4. Jahr + Bindestrich + Nullen vorhängen => getAuftragsnummer = Year(Now()) & "-" & left("00000",5-len(Zählnummer)) & Zählnummer
End Function

Gruß Andreas
Titel: Re: Autowert nur positive Zahlen
Beitrag von: ebs17 am Februar 03, 2014, 12:57:41
Atomare Informationen (Jahr + lfd. Nummer) würde man besser in getrennten Tabellenfeldern ablegen. Das hat etliche positive Effekte.

Siehe auch fortlaufende Nr in Abfrage erzeugen (http://www.access-o-mania.de/forum/index.php?topic=19051.0)
Vielleicht verstehst Du schneller das, womit sich dort der TE schwer tut.
Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 10, 2014, 15:45:35
vielen Dank für die Antworten

@ hondo:

Ich habe das Modul erstellt. Nur wie benutze ich es? Die Auftragsnummer soll ja fest zum Datensatz gespeichert werden - also in einer Tabelle. Wenn ich jetzt in der Tabelle ein berechnetes Feld einfüge, dann kann ich den Ausdruck "=getauftragsnummer()" nicht benutzen. Wie ist es also gemeint?
Titel: Re: Autowert nur positive Zahlen
Beitrag von: DF6GL am Februar 10, 2014, 19:11:54
Hallo,

schreib den Funktionsaufruf in die Eigenschaft "Standardwert" des entspr. gebundenen Textfeldes...

Besser wäre aber, die Nummer vor den akt. Speichern des (neuen) Datensatzes zu berechnen und zuzuweisen.

Sub Form_BeforeUpdate(Cancel as Integer)
If Me.Newrecord Then Me!AuftrgNr= getauftragsnummer()
End Sub


Vorsicht ist geboten, wenn die DB in einer Mehrbenutzer-Umgebung benutzt werden soll.



Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 11, 2014, 12:29:50
Ok... Ich erhalte eine Fehlermeldung: Fehler beim Kompilieren: Syntaxfehler. Der Debugger öffnet sich. DLOOKUP() ist markiert.

Die Zeile clng(right(LetzteNummer,len(letzteNummer)-5))
ist rot geschrieben....

Mein vollständiges Modul sieht so aus:

Option Compare Database

Public Function getAuftragsnummer() As String

DLookup ()
CLng(Right(letzteNummer, Len(letzteNummer) - 5)))

Zählnummer = Zählnummer + 1
getAuftragsnummer = Year(Now()) & "-" & Left("00000", 5 - Len(Zählnummer)) & Zählnummer


End Function

Schon bei der Eingabe von DLookup () erhalte ich die Fehlermeldung "Fehler beim Kompilieren: Erwartet:="
Titel: Re: Autowert nur positive Zahlen
Beitrag von: DF6GL am Februar 11, 2014, 16:54:14
HAllo,

und was sagt Dir jetzt die Codezeile   

DLookup ()

??

Dlookup() ist eine Funktion, die einen Wert zurückliefert, dessen Position (Feld in der Tabelle) durch die anzugebenden (und hier fehlenden) Funktions-Parameter definiert wird.

Zudem muss der zurückgelieferte Wert an eine Variable oder auch ein Textfeld übergeben werden...

(Abschreiben allein genügt doch nicht....Solche Codevorschläge müssen schon an die akt. Situation angepasst werden.)


Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 12, 2014, 09:24:38
Um ehrlich zu sein, mir sagt das gar nix. Ich habe keinen Plan davon.  :)

Kannst Du mir ein Beispiel geben, damit ich die Funktion verstehe und auf meine Bedürfnisse anpassen kann?
Titel: Re: Autowert nur positive Zahlen
Beitrag von: MzKlMu am Februar 12, 2014, 09:38:44
Hallo,
stelle den Cursor auf DLookup und drücke F1.
In der Hilfe findest Du eine genaue Beschreibung und Beispiele.
Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 12, 2014, 10:23:52
Sorry, das ist ja wirklich ausführlich beschrieben, aber ich habe keine Ahnung was ich da eingeben muss. DLookUp soll die letzte Nummer (ID?) aus meiner Tabelle "AngebotAuftrag" holen. Bitte gebt mir eine Hilfestellung...

Wenn die letzte ID gemeint ist, dann wird das bei mir auch nicht gehen, da die IDs zufällige Nummern sind. Mal 1000000 mal -250045....
Titel: Re: Autowert nur positive Zahlen
Beitrag von: DF6GL am Februar 12, 2014, 10:55:37
Hallo,

wenn Du einen Autowert für die ID ( oder Auftragsnummer) hast und dieses Feld zur eigenen Manipulation hernehmen willst, so geht das schlicht und einfach nicht (mehr).

Es bleibt dann nur , ein weiteres Feld für diesen Zweck hinzuzufügen und den Wert für dieses Feld entspr. der Berechnungsvorgabe (z. B. mit einer eigengeschriebenen Funktion) für alle Datensätze zu ermitteln ....
Inwieweit das Ganze sinnvoll im Hinblick auf schon vorhandene Daten ist, ist weiter zu hinterfragen. 

Das ganze Problem ist unter "Designfehler" einzuordnen... 
Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 12, 2014, 11:19:53
Ok. Das konnte ich mir schon vorstellen. In meiner Tabelle "Angebote" habe ich ein Feld Namens "Auftragsnummer" erstellt. In dieses Feld soll die Nummer im Format 2014-12345 fortlaufend (oder auch gern per Zufall errechnet) gespeichert werden. Weitere Datensätze sind nicht betroffen. Es ist alles neu. Designfehler sind ausgeschlossen.

Wie wird nun diese Lookup Funktion aufgebaut?
Titel: Re: Autowert nur positive Zahlen
Beitrag von: DF6GL am Februar 12, 2014, 11:54:21
Hallo,

als eine Möglichkeit und beispielhaft:


Schreib in die Eigenschaft "Standardwert" des gebundenen Textfeldes  "Auftragsnummer" Folgendes hinein:

="" & Jahr(Datum()) & "-" & Format(Nz(DomMax("Val(Right(nz([AuftragsNummer],0),5))";"Angebote");0)+1;"00000")



Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 12, 2014, 12:58:09
Schade, wieder keinen Erfolg zu vermelden... Fehlermeldung:

"Der von Ihnen eingegebene Ausdruck ist syntaktisch falsch.

Sie haben einen Operanden oder Operator nicht angegeben, Sie haben ein ungültiges Zeichen oder Komma eingegeben, oder Sie haben einen Text eingegeben, ohne diesen in Anführungszeichen zu setzten."

::)
Titel: Re: Autowert nur positive Zahlen
Beitrag von: DF6GL am Februar 12, 2014, 13:59:26
Hallo,

prüf mal, ob der Ausdruck wirklich korrekt und ohne zusätzliche Zeichen (Zeilenschaltungen)  in die Eigenschaft-Zeile kopiert wurde....Evtl. markiere und kopiere den Ausdruck mit dem Kontextmenü (rechte Maustaste)...
Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 12, 2014, 15:07:57
Ja, bereits mehrfach nachgesehen... Als Beweis hier die Zeile, welche ich diesmal aus dem Codegenerator rauskopiert habe:

="" & Jahr(Datum()) & "-" & Format(Nz(DomMax("Val(Right(nz([AuftragsNummer],0),5))";"Angebote");0)+1;"00000")

Da muss sich ein Fehler eingeschlichen haben.
Titel: Re: Autowert nur positive Zahlen
Beitrag von: DF6GL am Februar 12, 2014, 15:42:21
Hallo,


schau nochmal nach, ich bin mir sicher, dass in der Eigenschaftenzeile noch Zeichen drinstehen, auch wenn es nur (unsichtbare) Zeilenschaltungen sind.... 

Das Verhalten konnte ich hier nachvollziehen, und das Kopieren und Einfügen Deines geposteten Ausdrucks hat bei mir (nach Anpassung an meine  Feldnamen) den gewünschten Effekt gezeigt.
Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 12, 2014, 17:34:13
Nix, es geht nicht... Welchen Typ muss das Tabellenfeld "Auftragsnummer" haben? Bei mir ist es aktuell "kurzer Text"... ggf. liegt es daran?...
Titel: Re: Autowert nur positive Zahlen
Beitrag von: DF6GL am Februar 12, 2014, 18:39:23
Hallo,


lad mal die DB  (evtl. nur neue DB mit dem Formular und der Tabelle) hier hoch (repariert/komprimiert, gezippt).

Das Feld muss den Datentyp "Text" haben.

Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 13, 2014, 10:32:40
Hallo Franz,

Du hast eine PM von mir erhalten.

LG
Titel: Re: Autowert nur positive Zahlen
Beitrag von: datekk am Februar 20, 2014, 17:01:45
Die Frage ist gelöst. Es waren einfach nur Semikolons statt Kommas in der genannten Formel. Hier die richtige Schreibweise:

="" & Jahr(Datum()) & "-" & Format(Nz(DomMax("Val(Right(nz([AuftragsNummer],0),5))","Angebote");0)+1;"00000")

Also 1000 Dank für Deine Hilfe DF6GL.
Daumen Hoch für so einen Einsatz hier :)