PDA

Vollständige Version anzeigen : Aktualisierungsabfrage mit Zufallswerten


Doif
10.07.2006, 09:38
Hallo zusammen,

Ich habe eine Tabelle tAccounts in der befinden sich Informationen über Benutzerkonten (username, password, email usw.). Mit Hilfe einer Aktualisierungsabfrage und einer VBA-Funktion wollte ich bei den Datensätzen deren Feld password gleich NULL ist ein zufällig generierter Text in das Feld password einfügen.
Die Funktion läuft wie ich es will, allerdings führt Access diese Funktion in der Aktualisierungsabfrage nur einmal aus und nimmt für alle zu aktualisierenden Datensätze den selben Wert der die Funktion zurückliefert.

Zur Veranschaulichung:
http://www.timbookedtwo.com/aktualisierung.jpg

Meine Frage:
Wie schaffe ich es, dass die Funktion für jeden Datensatz aufgerufen wird oder gibt es eine bessere (einfachere) Variante?

Gruss Dave

J_Eilers
10.07.2006, 11:04
Hi,

wie sieht denn deine Funktion und deine Abfrage aus?

Doif
10.07.2006, 11:15
Die Funktion liefert einen zufällig generierten String mit einer Länge von 8 Zeichen zurück.

Public Function generatePassword() As String
Dim pwd As String
pwd = ""
For i = 1 To 5
pwd = pwd & getCharacter 'Liefert ein zufälliges Zeichen (A-Z, a-z)
Next
For i = 1 To 3
pwd = pwd & getNummeric 'Liefert eine zufällige Zahl als Zeichen (0-9)
Next
generatePassword = pwd
End Function

Die Aktualisierungsabfrage siehst du im 1. Beitrag. Hier als SQL:

UPDATE DISTINCTROW tAccounts SET tAccounts.[password] = generatePassword()
WHERE (tAccounts.password) Is Null;


Funktioniert alles, nur will ich das er die Funktion generatePassword() für jeden Datensatz aufs Neue ausführt und nicht bei allen den selben Wert einfügt.

Arne Dieckmann
10.07.2006, 11:25
getCharacter und getNummeric sagen mir auch nichts auf Anhieb - sind das auch selbst gestrickte Funktionen, müsste man deren Code ebenfalls kennen.

Doif
10.07.2006, 11:28
Ne. Für was denn? getCharacter liefert ein zufälliges Zeichen (A-Z, a-z) und getNummeric liefert eine zufällige Zahl als Zeichen (0-9). Mehr steckt da nicht dahinter.

Arne Dieckmann
10.07.2006, 11:31
Mein Access 2000 kennt die Funktionen nicht. Merkwürdig - evtl. nutzt du eine Bibliothek, die ich nicht kenne und welche diese Funktionen mitbringt.

Vielleicht helfen dir ja die Funktionen unter Info - Spieldatensätze erzeugen zum Erzeugen von Zufallswerten.

Doif
10.07.2006, 11:36
Ach so. Nö. Ist schon selbst geschrieben. Da habt ihr den SPAM :D.


Public Function getCharacter() As String
Dim sArr(52) As String
sArr(0) = "A"
sArr(1) = "a"
sArr(2) = "B"
sArr(3) = "b"
sArr(4) = "C"
sArr(5) = "c"
sArr(6) = "D"
sArr(7) = "d"
sArr(8) = "E"
sArr(9) = "e"
sArr(10) = "F"
sArr(11) = "f"
sArr(12) = "G"
sArr(13) = "g"
sArr(14) = "H"
sArr(15) = "h"
sArr(16) = "I"
sArr(17) = "i"
sArr(18) = "J"
sArr(19) = "j"
sArr(20) = "K"
sArr(21) = "k"
sArr(22) = "L"
sArr(23) = "l"
sArr(24) = "M"
sArr(25) = "m"
sArr(26) = "N"
sArr(27) = "n"
sArr(28) = "O"
sArr(29) = "o"
sArr(30) = "P"
sArr(31) = "p"
sArr(32) = "Q"
sArr(33) = "q"
sArr(34) = "R"
sArr(35) = "r"
sArr(36) = "S"
sArr(37) = "s"
sArr(38) = "T"
sArr(39) = "t"
sArr(40) = "U"
sArr(41) = "u"
sArr(42) = "V"
sArr(43) = "v"
sArr(44) = "W"
sArr(45) = "w"
sArr(46) = "X"
sArr(47) = "x"
sArr(48) = "Y"
sArr(49) = "y"
sArr(50) = "Z"
sArr(51) = "z"
getCharacter = sArr((52) * Rnd)
End Function

Public Function getNummeric() As String
Dim sArr(10) As String
sArr(0) = "0"
sArr(1) = "1"
sArr(2) = "2"
sArr(3) = "3"
sArr(4) = "4"
sArr(5) = "5"
sArr(6) = "6"
sArr(7) = "7"
sArr(8) = "8"
sArr(9) = "9"
getNummeric = sArr((10) * Rnd)
End Function

Doif
10.07.2006, 11:53
Sorry. Hab da was falsch verstanden. :D