Emailadressen in Untertabelle aufräumen, Duplikate entfernen
Es ist sicher ganz einfach, aber ich verzweifle gerade am Aufräumen meiner Addressdatenbank mit 1000en Kontakten, und würde mich sehr über Unterstützung freuen.
Ich habe 2 Baustellen:
1. Emailadressen ergänzen
Meine Adressen liegen in der Tabelle "Kontakte"
Die Email-Adressen liegen in der Untertabelle "E-Mails" der Tabelle "Kontakte".
Ich habe viele Einträge innerhalb von "Kontakte" bei denen keine Emailadresse verlinkt ist. Dafür habe ich andere Einträge, die eine Emailadresse im Feld "Kontakte.Kundennummer" haben, und deren Vor- und Nachname mit Vor- und Nachname von Einträgen ohne Emailadresse übereinstimmen.
Wie kann ich sinngemäß anordnen, dass bei allen Einträge, bei denen das Feld Kundennummer leer ist und bei denen es mehr als einen Eintrag für die Kombination vor- und Nachname gibt, in der untertabelle ein neuer Eintrag für die Emailadresse mit der Info aus dem Feld Kundennummer von Einträgen übernommen wird, die eben genau dieselben Vor- und Nachname haben, aber wo Kundennummer nicht leer ist?
Habe schon verschiedenes probiert (cnt, ...etc ) aber es führt leider zu nichts.
2. doppelte/dreifache Einträge zusammenführen
Viele Einträge sind mehrfach vorhanden, aber natürlich praktischerweise mit verschiedenen ausgefüllten Feldern...
Meist gibt es einen Datensatz der unbedingt zu erhalten ist, weil er mit anderen Tabellen verknüpft ist. Ich möchte das nicht alles händisch durchgehen und hätte gern, dass alle ausgefüllten Felder in diesem einen Datensatz hinzugefügt werden bzw. wenn keiner der Dubletten mit anderen Tabellen verknüpft ist, dass dann auch alle Information in einem Datensatz kummuliert wird und die nun nutzlosen Datensätze gelöscht werden.
Ein wenig kompliziert macht, dass in der Tabelle zwar Felder wie Vorname, Nachname, Kundennummer, etc. vorhanden sind, aber Adressen, Emailadressen und Telefonnummern jeweils in eigenen Untertabellen liegen...
Dazu noch eine Frage: kennt ihr einen Befehl um auszulesen, ob ein bestimmter Datensatz mit irgendeiner anderen Tabelle verknüpft ist, ohne dass ich alle verknüpften Tabellen in der Formularansicht durchschauen muss, ob dort etwas ausgewählt ist? Also quasi eine Formel für die Tabellenansicht, die beantwortet: ist dieser Datensatz mit irgendetwas ausserhalb dieser Tabelle verknüpft?
Liebe Grüße!
3 Antworten
-
Hallo Iris,
das zusammenlegen von Datensätzen ist in der Tat nicht so einfach. Da muss einiges manuell gemacht werden, oder man schreibt sich für bestimmte Aufgaben extra Formeln.
Z.B. kann man sich ein Formelfeld machen welches mit dem styled-Befehl checkt, ob ein eintrag in der Untertabelle existiert...
if cnt(UNTERTABELLE) = 0 then
styled("", "red")
end
Dieses Formelfeld kann man sich in eine Ansicht ziehen und dann beim schnellen durchscrollen schonmal sehen wo die Untertabelle leer ist...
Der Rest ist etwas komplizierter und vor allem sehr Performance-hungrig wenn es viele Kontakte sind...
-
Zu 1.) Auf den einzelnen Kontakt-Datensatz bezogen, könnte man die Prüfung auf vorhandene E-Mail-Einträge und ggf. Übernahme der E-Mail-Adresse aus dem Feld Kundennummer eines anderen Datensatzes evtl. so o. ä. vornehmen (nicht getestet, deshalb ohne Gewähr):
if not 'E-Mails' then
let me := this;
let myMail := first((select Kontakte[lower(Vorname + Nachname) = lower(me.Vorname + me.Nachname) and contains(Kundennummer, "@")]).Kundennummer);
let newMail := create 'E-Mails';
newMail.(Kontakte := me);
newMail.(Mailadresse := myMail)
end
Das ließe sich, wenn es funktionieren würde, dann auch in eine Schleife packen. Aber vielleicht hilft es schon mal als Ansatz.
Zu 2.) Das dürfte komlizierter werden. Deshalb auch hier nur eine spontane Überlegung zur grudsätzlichen Vorgehensweise. Man bräuchte ja Kriterien, anhand derer der "beste" (vollständigste, relevanteste) Datensatz bestimmt und durch Inhalte der Duplikate ergänzt werden könnte. Als Alternative wäre es vielleicht sinnvoller, gleich einen neuen Datensatz zu erstellen und diesen mit den Werten der vorhandenen zu füllen. Diesen neuen Datensatz könnte man mit einem zusätzlichen Ja/Nein-Feld als "relevant" markieren, um später die Duplikate mit den verstreuten Daten löschen zu können.
In dem betreffenden Script müsste man jedes Feld durchgehen, prüfen, ob in den Duplikaten ein Wert dafür eingetragen ist und diesen in den neuen Datensatz übernehmen. Bei mehreren tausend Datensätzen würde so ein Script aber wohl recht lange laufen, so dass es auf jeden Fall mit "do as server" ausgeführt werden sollte. Außerdem wäre eine schrittweise Abarbeitung der Tabelle denkbar (jeweils 500 Datensätze oder so).
Nur so als Idee.
-
PS: Eine Möglichkeit, mit der sich überprüfen lässt, ob ein Datensatz mit irgendeiner Tabelle verknüpft ist, gibt es m. W. nicht. Man müsste wohl schon jede tabellarische Verknüpfung einzeln darauf prüfen, ob tatsächlich Datensätze verknüpft wurden. Also wie oben am Beispiel der Untertabelle 'E-Mails':
"if 'E-Mails' then ..." bzw. "if not 'E-Mails' then ..."
oder mit "if cnt('E-Mails') > 0 then ..." bzw. "if cnt('E-Mails') < 1 then ..."
Das müsste man halt für jede verknüpfte Tabelle machen.
Content aside
- vor 2 JahrenZuletzt aktiv
- 3Antworten
- 143Ansichten