Neuigkeiten:

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

Mobiles Hauptmenü

Autowert nur positive Zahlen

Begonnen von datekk, Januar 23, 2014, 17:19:28

⏪ vorheriges - nächstes ⏩

datekk

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?

Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MzKlMu

Hallo,
der Schlüssel ist doch eigentlich egal, im Regelfall ist der doch gar nicht zusehen, weil ausgeblendet.
Gruß Klaus

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

datekk

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?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

Hondo

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

ebs17

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
Vielleicht verstehst Du schneller das, womit sich dort der TE schwer tut.
Mit freundlichem Glück Auf!

Eberhard

datekk

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?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

DF6GL

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.



Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

datekk

#8
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:="
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

DF6GL

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.)


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

datekk

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?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MzKlMu

Hallo,
stelle den Cursor auf DLookup und drücke F1.
In der Hilfe findest Du eine genaue Beschreibung und Beispiele.
Gruß Klaus

datekk

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....
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

DF6GL

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... 
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

datekk

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?
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps