Ich habe eine db mit der Tabelle tblProbanden und dem Endlosformular frmProbanden. Der Inhalt des Feldes [Probandenname] (String) soll mit klick auf den Button [Befehl200] durch eine 20stellige Zufallsfolge von Zeichen ersetzt werden. (Alle Buchstaben und alle Ziffern) Doppelte Werte sollen nicht zugelassen werden.
Hintergrund ist, dass die Probanden-Namen nach einer bestimmen Zeit anonymisiert werden sollen, ohne dass die Messergebnisse verloren gehen.
Welches Design und welche Befehle für Befehl200 würdet Ihr mir für diesen Zweck empfehlen?
Carl
Zitat von: Carl am Oktober 11, 2017, 11:17:14
Welches Design und welche Befehle für Befehl200 würdet Ihr mir für diesen Zweck empfehlen?
Diese zufällige Folge von Zeichen beinhaltet semantisch keine Information, deshalb kann man sie sich gleich sparen. Deshalb wäre der Wert NULL angemessen, unter der Voraussetzung, daß der Probandenname nicht Schlüsselfeld oder Teil des Schlüsselfelds ist.
Hallo,
ich halte das Vorhaben auch für überflüssig. Da jeder Datensatz einen Primärschlüssel haben sollte, genügt es das Feld mit dem Namen einfach zu leeren (NULL, wie gesagt).
Da die Beziehungen über den Primärschlüssel laufen (sollten) gehen keine Messergebnisse verloren.
Carl, wenn Du ernsthaft mit Access arbeiten willst, solltest Du Steuerelementnamen wie Befehl200 nicht zulassen - taufe das Steuerelement ordentlich, z. Bsp. in ctlAnonymisiereProband (ohne weitere Typisierung, was ich mittlerweile bevorzuge) oder in cmdAnonymisiereProband oder btnAnonymisiereProband o.ä. und verwende dann durchgängig gleiche Präfixe für gleiche Steuerelementtypen.
Zum Problem: sollte man sich einer Hashfunktion (https://de.wikipedia.org/wiki/Hashfunktion) bedienen, die eindeutige Werte liefert. Das Ergebnis stellt je nach verwendetem Algorithmus ein unterschiedlich langer Zahlenwert dar, der i.d.R. nicht zum Ausgangswert zurückzuführen ist.
Diese Zahl kann man dann auch in Zeichfolgen weiter codieren - siehe z. Bsp. Base64 (https://de.wikipedia.org/wiki/Base64) oder Base32 (https://de.wikipedia.org/wiki/Base32) - eine Hexadezimaldarstellung tuts aber auch, wobei bei letzterer alle Namen gleich lang wären.
Wenn Du Dich für eine Methode entscheiden solltest, kann ich gerne Links auf entsprechenden Code posten.
Das mit den Benennungen werde ich berücksichtigen.
Die Idee mit dem Leeren des Feldes hatte ich deshalb verworfen, weil ich in den Formularen aus Platzgründen das Feld ID nicht anzeige. Und optisch sieht es komisch aus, wenn Namen-Felder leer sind. Ganz zu schweigen beim Datenexport mehrerer Tabellen in eine SPSS-Datei beispielsweise, wo dann die ID's mehrfach vorkommen. Da soll zur Identifikation des Datensatzes dann das Namensfeld dienen.
Hashen wollte ich vermeiden, weil es beispielsweise viele Leute mit dem Namen Müller gibt. Dann müsste ich erst ein Zusatzfeld mit [ID]+[PbnName], um das dann zu hashen.
Private Sub PbnNameAnonymisieren_Click()
Welcher Code muss hier stehen, damit die Schaltfläche in das Feld [PbnName] eine 12stellige Zufallskombination einträgt, die Buchstaben und Ziffern enthalten darf?
End Sub
Carl
Hallo Carl,
Vielleicht so (Luftcode)
Public Function ZufallsString() As String
Const strValidChars "StringMitGültigenZeichen"
Dim L As Integer
Dim z As Integer
Dim strResult As String
L = Len(strValidChars)
For z = 1 To 12
Randomize
strResult = strResult & Mid$(strValidChars, L*Rnd(L)+1, 1)
Next z
ZufallsString = strResult
End Function
Natürlich musst du hier oder beim Aufruf noch eine Prüfung bezügl. Eindeutigkeit einfügen.
gruss ekkehard
Hallo,
ZitatUnd optisch sieht es komisch aus, wenn Namen-Felder leer sind. Ganz zu schweigen beim Datenexport mehrerer Tabellen in eine SPSS-Datei beispielsweise, wo dann die ID's mehrfach vorkommen. Da soll zur Identifikation des Datensatzes dann das Namensfeld dienen.
Da machst Du einen Denkfehler. Die ID darf ja auch nicht mehrfach vorkommen. Und wenn Du mehrfache IDs hast so hast Du eine Abfrage mit mehreren Tabellen. Dann nutzt Dir das verfälschen auch nichts, dann bei mehreren Müllern hast Du ja auch wieder das Problem der Eindeutigkeit. Das Feld taugt dann dazu auch nicht.
Ich würde das Feld leeren und über eine Abfrage in diesem Feld die ID eintragen. Dann ist es nicht leer.
Da sich an der eigentlichen ID nichts ändert, bleiben alle Zuordnungen erhalten. Da das Namensfeld geleert wurde ist die Anonymität 100% gesichert.
Völlig problemlos.
Hm ... okay.
Wieso über eine Abfrage? ich dachte an einen Button im Formular, der auf klick den Fildinhalt verändert. Hast Du da einen code im Kopf?
Me.Name = Me.ID
Hallo,
wenn es nur wenige Datensätze sind kannst Du das natürlich mit einem Button machen. Code siehe obigen Beitrag von ekkehard.
Wenn Du mehrere Datensätze ändern willst, dann eine Aktualisierungsabfrage.