Zufallsnummer Generieren nach kriterien?

Diskutiere Zufallsnummer Generieren nach kriterien? im Datenbanken Forum im Bereich Software Forum; Guten Tag Forum, ich suche nach einer Möglichkeit eine Nummer ähnlich einer Ident.nummer zu generieren. Ich bin absoluter beginner und hoffe auf...
Status
Für weitere Antworten geschlossen.
Z

Zottelhias

Gast
Guten Tag Forum,

ich suche nach einer Möglichkeit eine Nummer ähnlich einer Ident.nummer zu generieren.
Ich bin absoluter beginner und hoffe auf euer verständiss.
Die Nummer soll aus 9 Ziffern bestehen, mit den Zahlen von 0 bis 9. Die erste Zahl darf nie eine 0 sein.
Die Zahlenkombination darf nie doppelt vorkommen.

Hier beispiele: Richtig = 100104820 ; Falsch 1. = 010652930 Falsch weil Null am anfang.
Falsch 2. = 01385972 Falsch weil Null am anfang und die 9te Zahl fehlt.

Ich hoffe Ihr könnt mir helfen.

Bitte erklärt es für absolute beginner.


Freundliche Grüße

Zottelhias
 
DerZong

DerZong

MODERATOR/FAQ-Team
Team
Mitglied seit
12.10.2004
Beiträge
4.701
Alter
42
Habe noch nicht ganz durchdrungen, was du willst :confused
Willst du eine Auflistung der Ergenisse dieser "Zufallszahlen" oder willst du eine Methode, die solche Zahlen "ausspuckt"?

Wenn letzteres, sollte man schon wissen, mit welcher Programmier- oder Scriptsprache (oder gar Pseudocode :cheesy) die Methode erstellt werden soll.
Zumindest müsste die Methode einen "internen Speicher" haben, um zu prüfen, ob eine Zahlenkombination schon ermittelt wurde :hm
 
Z

Zottelhias

Gast
Hallo DerZong,

ich suche eine Methode, die mir solche zufallszahlen ausspuck.

Natürlich, da gebe ich Dir recht. Wenn Du nicht weist, mit was ich etwas erstellen will, dann kannste schlecht was sagen. Das ganze soll in MS Access 2010 umgesetzt werden.
Es sollte nicht der Feldatentyp "AutoWert" verwendet werden und auch nicht der Name "ID".
Wir nennen es mal "Verwaltungs-ID" oder "Aktenzeichen".

!!!!GANZ WICHTIG: DIE KOMBINATIONEN SOLLEN EINZIGARTIG SEIN UND NIE DOPPELT AUFTAUCHEN!!!!

Gruß

Zottelhias
 
DerZong

DerZong

MODERATOR/FAQ-Team
Team
Mitglied seit
12.10.2004
Beiträge
4.701
Alter
42
...
Das ganze soll in MS Access 2010 umgesetzt werden.
...
:cheesy
Oha, das ist zumindest aus meiner Sicht nicht so erfreulich - Mit Access respektive dem wahrscheinlich notwendigen VB hab ich fast gar nichts am Hut bzw. stehe ich auf Kriegsfuss. Aber zumindest ist ja schonmal ein wichtiger Anhaltspunkt für andere Helfer gegeben. Vielleicht weiß Peter Schirmer hier mehr :hm
Aber zumindest ist das Problem mit dem Festhalten der bereits vergebenen IDs gelöst - die sollten in einer separaten Spalte mit "Unique"-Attribut abgelegt werden (wenn sie nicht sogar der Primary Key der Tabelle sein sollten). Jetzt bräuchtest du nur noch eine Methode, die bei Neuanlage eines Datensatzes nach deinen Vorgaben entsprechend die nächste "Nummer" festlegt :hehe
 
automatthias

automatthias

vernunftgeplagt
Mitglied seit
21.04.2006
Beiträge
8.883
Access enthält irgend einen VB Dialekt. Da sollte es eine Funktion random() oder rnd() o.ä. geben. Damit könnte man 9 einstellige Zufallszahlen erzeugen, wobei man bei der ersten halt sicher stellen muss, dass es nicht 0 ist.
 
Mike

Mike

i7-6700HQ
Team
Mitglied seit
21.09.2006
Beiträge
24.383
Standort
in der Nähe eines Rechners
Access enthält irgend einen VB Dialekt. Da sollte es eine Funktion random() oder rnd() o.ä. geben. Damit könnte man 9 einstellige Zufallszahlen erzeugen, wobei man bei der ersten halt sicher stellen muss, dass es nicht 0 ist.
dim x as long
x=rnd()*999999999+100000000

ergibt Zufallszahlen von 100000000 bis 999999999. Durch die Angabe von + 100000000 wird eine führende Null (für diesen Thread) ausgeschlossen.
Durch die Definition von X als LONG werden auch Dezimalzahlen ausgeschlossen.
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Access enthält irgend einen VB Dialekt. Da sollte es eine Funktion random() oder rnd() o.ä. geben. Damit könnte man 9 einstellige Zufallszahlen erzeugen, wobei man bei der ersten halt sicher stellen muss, dass es nicht 0 ist.
Ich habe mal spontan gegoogelt, random() gibt es in VBA nicht. Man könnte aber folgende Funktion nutzen:
http://www.cpearson.com/excel/RandomNumbers.aspx

Dim Low As Double
Dim High As Double
Low = 11 '<<< CHANGE AS DESIRED
High = 20 '<<< CHANGE AS DESIRED
R = (High - Low) * Rnd() + Low
Ich würde es so machen, dass für jede Stelle der Zahlenkombination eine Zufallszahl ermittelt wird. Dann würde ich eine Prüfung einbauen, ob die Zahl der Definition entspricht (z. B. erste Ziffer keine Null) und so lange fortfahren, bis alle Stellen gefüllt sind. Das Problem ist nur, dass ich in Access nicht weiß, wie man etwas auslesen kann. Die Prüfung auf doppeltes Vorkommen muss ja noch stattfinden.

Im Grunde müssen nur alle bisherigen Einträge in ein Array einlesen und dann über alle Einträge laufen und prüfen, ob die neue Kombination schon vorhanden ist.
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Anbei eine Lösung in Excel. Der Code sollte sich ohne weiteres in Access verwenden lassen. Nur das Auslesen der bisherigen Nummern wüsste ich nicht in Access zu lösen. Da kenne ich die Objekthierarchie nicht. :(

Anhang anzeigen Zufallszahlen.zip

Public Function Zufallszahl(ByVal Beginn As Byte, ByVal Ende As Byte) As Integer

Dim R As Byte
Dim AW As String
Dim Low As Double
Dim High As Double

Low = Beginn '<<< CHANGE AS DESIRED
High = Ende '<<< CHANGE AS DESIRED
R = (High - Low) * Rnd() + Low

Zufallszahl = R

End Function

Sub Ausgabe()

'Quelle der Fragestellung: http://www.winboard.org/datenbanken/148922-zufallsnummer-generieren-nach-kriterien.html#post1162434

Dim I As Byte
Dim Z As Byte
Dim Kombination As String

'Zeichenfolge mit 10 Ziffern erzeugen
For I = 1 To 10

'Erste Ziffer => prüfen, ob Null
If I = 1 Then

'Keine Null
Z = Zufallszahl(0, 9)
If Not Z = 0 Then

Kombination = Kombination & Z

End If

'Wenn Zufallszahl doch Null
If Z = 0 Then

'Solange weiter Zufallszahlen erzeugen, bis es keine Null ist
Do

Z = Zufallszahl(0, 9)

Loop Until Z > 0

Kombination = Kombination & Z

End If

End If

'Restliche Ziffern (2 bis 9)
If I > 1 Then

Z = Zufallszahl(0, 9)
Kombination = Kombination & Z

End If

Next I

'Ausgabe der Ziffer
MsgBox ("Ermittelte Kombination: " & Kombination)
MsgBox ("Länge der Kombination: " & Len(Kombination))

End Sub
 
Z

Zottelhias

Gast
Hallo automatthias,

ja, diesen kenne ich, ich kann aber mit diesen funktionen nicht umgehen. Ich brauche jemanden der mir das sehr einfach und gut erklären kann. Ich bin mit Access nicht sehr versiert. Einfache Sachen kann ich noch, aber wenns ums programieren geht, dann habe ich große Probleme.
Am besten wäre noch, wenn mir jemand Code vorschreiben kann und ihn mir hier veröffentlicht. Wie gesagt ich bin absoluter neuling und habe keine erfahrung. Ich würde mich sehr freuen.

Sorry, war zu langsamm.



Grüße

Zottelhias
 
Z

Zottelhias

Gast
Danke für die ersten hilfen.
Ich hoffe mir kann noch jemand helfen, was das auslesen der bereitsvergebenen Nummern ermöglicht und vielleicht auch mit gewissheit sagen kann, das der Code in Access 2010 funktioniert. Bitte nicht falsch verstehen, ich möchte nur 100 % sicher sein. Ich hoffe ich verletzte damit keinen.

Bezüglich meiner Bedenken will ich hier noch erwähnen, dass es Funktiniert und das ich damit die Bedenken auf Funktion ausräumen will. Habe es in einer Testdatenbank mal probiert.


Danke und gruß

Zottelhias
 
Zuletzt bearbeitet von einem Moderator:
Z

Zottelhias

Gast
Hallo Forum,

entschuldigt das ich nochmals was nachfragen muss, aber kann ich dieses Modul dann auch eindeutig einer Spalte der Tabelle zuordnen? Also angenommen meine Tabelle hat x Spalten, davon ist die erste die "Normale" ID von Access und die Zweite wie im erstenbeitrag erwähnt, die sogenannte "Verwaltungs-ID". Jetzt will ich noch, dass das Modul wo ich den Code reinschreibe, diesen auch automatisch in die dafür vorgesehene Spalte einfügt. Ist das möglich und kann mir dabei wer behilflich sein?


Vielen dank und Grüße

Zottelhias
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Hier ist die Datenbank. Ich habe eine simple Datenbank erstellt, die die Lösung gut wiedergibt.
Anhang anzeigen test.zip

Einfach auf Modul 3 doppelklicken. Dort sieht man dann folgendes:

Option Compare Database

Sub Start()

'Vorgaben definieren
'Anzahl der Zufallszahlen, die generiert werden sollen
AnzahlZufallszahlen = 5

'Länge der Zufallszahlen = Anzahl der Ziffern
LängeZufallszahlen = 3

'Und los geht's!
Start2

End Sub
Die Zahlen 3 und 5 bitte ggf. abändern. Sie passen zur Datenbank und funktionieren auch. Der Quellcode ist etwas umfangreicher, daher ist es sinnlos ihn hier zu posten. Er ist im Archiv enthalten.

HTH!

:D
 
Z

Zottelhias

Gast
Danke für das Bemühen des Forums, bin echt erleichtert, dass dieses Forum sehr gut Funktioniert.
Das muss ich einfach mal sagen. Ich bin nicht einfach in der Handhabung, aber ich bin sehr erfreut, dass ich hier immer hilfe finde. Vielen, vielen dank an alle.
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Keine Ursache. :satisfied

Bevor ich es vergesse: Die Zahlen sind natürlich keine Zufallszahlen, da sie über eine Logik immer wieder hergeleitet werden können. Aus diesem Grunde sind sie eben nicht zufällig. Ich wollte es nur noch mal klarstellen. :)
 
automatthias

automatthias

vernunftgeplagt
Mitglied seit
21.04.2006
Beiträge
8.883
Bevor ich es vergesse: Die Zahlen sind natürlich keine Zufallszahlen, da sie über eine Logik immer wieder hergeleitet werden können. Aus diesem Grunde sind sie eben nicht zufällig. Ich wollte es nur noch mal klarstellen. :)
Gibt es dafür nicht auch noch eine Zusatzfunktion seed() oder ähnlich, um die rnd()-Funktion zu initialisieren? Ich habe da früher unter C/C++ immer die aktuelle Zeit, umgerechnet in "long" als Seed genommen, sodass also die Zufääligkeit etwas besser ist.
 
Z

Zottelhias

Gast
Vergest den Beitrag #11 von mir.

Die Funktion, dass die Zahlen eingelesen werden um kontroliert werden zu können, sowie die des erstellens Automatischgenerierter Nummern, gefallen mir sehr gut. Vielleicht ist es möglich, mir noch zusagen,
für was Modul 1, 2, 3 im einzelnen gut sind.

Es gibt jetzt noch ein bis zwei kriterieen, welche die Sache sehr vereinfachen würden.
Ist es möglich, die Kontrollfunktion welche ermittelt, ob doppelte Zahlenwerte vorhanden sind und die Funktion welche die Automatischgenerierte Zahl einer spalte in der Tabelle zu zuordnen und ihr bei zu bringen, dass sich diese Zahl Automatisch in einen Datensatz einfügt, wenn dieser neu erstellt wird?
Wenn ja, wie?


Gruß

Zottelhias
 
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
In VBA gibt es seed offensichtlich nicht. Aber diese Funktion Randomize. Dennoch sind die Zahlen nicht zufällig, da hinter der Funktion Randomize eine berechenbare Logik steckt. Und das wollte ich zum Ausdruck bringen. Mehr gibt es bei MSDN
http://msdn.microsoft.com/de-de/library/office/gg264511(v=office.15).aspx

Gibt es dafür nicht auch noch eine Zusatzfunktion seed() oder ähnlich, um die rnd()-Funktion zu initialisieren? Ich habe da früher unter C/C++ immer die aktuelle Zeit, umgerechnet in "long" als Seed genommen, sodass also die Zufääligkeit etwas besser ist.
Was ich noch sagen wollte: Sich in VBA zu bewegen ist doch recht unhandlich, wenn man dagegen das .NET-Framework oder andere Sprachen kennt, die "mehr" können. Dennoch ist VBA mächtiger als man denkt. Vieles lässt sich auch über externe Aufrufe erledigen (.NET Funktionen nutzen, die über COM bereitgestellt werden). :satisfied
 
Zuletzt bearbeitet:
Peter Schirmer

Peter Schirmer

Dienstleister / Moderator
Mitglied seit
14.04.2006
Beiträge
7.060
Alter
39
Standort
7th Avenue, Ecke XP und Vista, 8ter Stock, Wohnung
Vielleicht ist es möglich, mir noch zusagen,
für was Modul 1, 2, 3 im einzelnen gut sind.
Die dienen nur zur Strukturierung des Codes. Das habe ich mir angewöhnt, um die Übersicht zu behalten.

Es gibt jetzt noch ein bis zwei kriterieen, welche die Sache sehr vereinfachen würden.
Ist es möglich, die Kontrollfunktion welche ermittelt, ob doppelte Zahlenwerte vorhanden sind und die Funktion welche die Automatischgenerierte Zahl einer spalte in der Tabelle zu zuordnen und ihr bei zu bringen, dass sich diese Zahl Automatisch in einen Datensatz einfügt, wenn dieser neu erstellt wird?
Wenn ja, wie?
In dem Beispiel-Archiv habe ich folgenden Code ergänzt, der die Zahlenkombination als neuen Datensatz schreibt, wenn sie gültig ist. Es ist ganz einfach:

Public Function Datensatz_schreiben(ByVal ZF As String)

'Neue Pseudo-Zufallszahl schreiben
'Quelle: http://dbwiki.net/wiki/Access_Anfänger:_Wie_greife_ich_in_VBA_auf_die_Werte_einer_Tabelle_zu?

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String

Set db = CurrentDb ' Datenbank definieren
strSQL = "SELECT * FROM Test" ' beliebigen SQL definieren; Test ist die Tabelle
Set rs = db.OpenRecordset(strSQL) ' Recordset öffnen

'Andere beispielhafte mögliche Aktionen:
rs.AddNew ' Wenn neuer Datensatz eingefügt werden soll
rs!Vorname = "Winboard"
rs!Zuname = ".org"
rs!Zufallszahl = ZF
rs.Update 'Änderungen am / neuen Datensatz speichern

rs.Close
Set rs = Nothing
Set db = Nothing

End Function
Um zu sehen, wie es funktioniert, gehe zu Modul 3. Klicke dort in den Quelltext und drücke F8. Damit gehtst du Schritt für Schritt durch den Quellcode und kannst sehen, wie er arbeitet. Wenn du mit der Maus über Variablen fährst siehst du auch deren Wert.

Anhang anzeigen test.zip
 
Z

Zottelhias

Gast
Ich bedanke mich nochmals bei allen. Ich weis diese Arbeit zu würdigen und das es nicht selbstverständlich ist. Vorrerst werde ich mich in den Urlaub begeben und am Donnerstag wieder eintrudeln.

Ich wünsche allen viel spass.


Güße

Zottelhias
 
Status
Für weitere Antworten geschlossen.
Thema:

Zufallsnummer Generieren nach kriterien?

Sucheingaben

aktenzeichen generieren

Zufallsnummer Generieren nach kriterien? - Ähnliche Themen

  • Mein Surface Pro 4 (I-7 mit 8gb ram) Was kann es an Graphik generieren

    Mein Surface Pro 4 (I-7 mit 8gb ram) Was kann es an Graphik generieren: Hallo, ich habe eine Frage zu meinem Surface pro 4 ( I-7 core und 8gb Ram) ich möchte gerne Fishing Bareants sea auf Steam kaufen aber ich...
  • PIN zum anmelden laesst sich nicht generieren

    PIN zum anmelden laesst sich nicht generieren: Folgendes Problem unter Windows 10 PRO: In den Einstellungen unter Konten > Anmeldeoptionen > PIN > Hinzufuegen passiert nichts wenn ich drauf...
  • HTML-Mail generieren

    HTML-Mail generieren: Hallo Zusammen Ich hab da mal eine Frage. Wenn ich einen Text aus einem Word oder dem Internet kopiere und danach ins Outlook wechsle und...
  • Warum hat die MS-Telefonhotline mir bei einer Telefonanfrage ungefragt einen neuen Schlüssel generie

    Warum hat die MS-Telefonhotline mir bei einer Telefonanfrage ungefragt einen neuen Schlüssel generie: Habe soeben wegen meiner schon vor einigen Stunden hier im Forum angefragten Neuinstallationsproblemen: "Gestern Abend hat bei unserem alten...
  • Binäre poissonverteilte Zufallszahlen in Excel mit oder ohne VBA generieren

    Binäre poissonverteilte Zufallszahlen in Excel mit oder ohne VBA generieren: Hallo alle zusammen! Ich sitze etwas verzweifelt über mein Finance Assignment, deren Deadline am Sonntag Mitternacht ist. Ich scheitere an...
  • Ähnliche Themen

    Oben