Funktion "finde Duplikate"
hab mir in meiner Tabelle 'Artikel' eine Funktion erstellt, die alle Artikel auf durchforsten soll
let xH := Hersteller;
let xN := Name;
let xF := 'Farbe / Ausstattung';
let xG := 'Größe / Maße';
if cnt(select Artikel where xH = Hersteller and xN = Name and xF = 'Farbe / Ausstattung' and xG = 'Größe / Maße') > 1 then
"+++ Duplikat +++"
end
das Problem, offenbar sind 60 000 Artikel zu viel, er hängt sich jetzt ständig auf ...
gibt es eine elegantere, weil effizientere lösung dafür?
danke
11 Antworten
-
Bin mir nicht sicher, ob nicht Hersteller, Name, ... unter "" gesetzt werden müssen, also "Hersteller", "Name", ...
-
Es funktioniert an sich wie ich will ... bloß hängt es sich ewig auf wenn ich dir Duplikate gefiltert in einer Ansicht versammeln will, um sie zu bearbeiten
-
Setzt das ganze Skript mal in ein "do as server ... end"
VG Ralf
-
Selber Effekt
-
Dein Skript ist auch falsch. Sehe ich leider jetzt erst
let xH := Hersteller;
let xN := Name;
let xF := 'Farbe / Ausstattung';
let xG := 'Größe / Maße';
if cnt(select Artikel where Hersteller = xH and Name = xN and 'Farbe / Ausstattung' = xF and 'Größe / Maße' = xG) > 1 then
"+++ Duplikat +++"
-
das macht einen Unterschied?
-
Sorry, scheinbart nicht mehr. Ich könnte schwören, dass man früher gezwungen war links vom "=" die Spalte der Tabelle aus dem select zu nehmen und rechts vom "=" die Variable.
Die Frage ist halt: wo lässt du dir das Formelfeld anzeigen? Nur im Formular, oder auch in der Tabellenansicht? Sei dir bewußt: packst du dieses Formelfeld in die Tabellenansicht, so wird das Skript in allen 60000 Artikeln gleichzeitig ausgeführt. Ist das Formelfeld nur in der Formularansicht zu sehen, dann wird es nur in einem Datensatz gleichzeitig ausgeführt, nämlich wenn es sichtbar wird. Der Unterschied ist enorm.
-
das ist der Punkt ... ich brauch es eigentlich nur einmal, dafür in der Tabellenansicht, um alle Duplikate zu entfernen ... danach ist alles bereinigt und ich lösch das wieder ...
-
Dafür hättest du aber auch die Massendatenänderung nutzen können. Einfach in jedes Produkt ein ja/nein Feld packen. Per Massendatenänderung die Doppelungen auf true setzen. Dann filtern und löschen
-
die idee hatte ich noch nicht - thx, versuch ich gleich
-
Hi. Anderer Ansatz. Ein Textfeld "DUPLIKAT" und ein Button (vielleicht noch do as server):
*for j in select Artikel do
let xH := j.Hersteller;
let xN := j.Name;
let xF:= j.'Farbe / Ausstattung'
let xG:=j.'Größe / Maße'
let nummer := text(number(j.Nr));
let duploArray := for i in (select Artikel)[Hersteller = xH and Name = xN and 'Farbe / Ausstattung' = xF and 'Größe / Maße' = xG] do
i.number(Nr)
end;
if contains(concat(duploArray), nummer) and number(j.Nr) != min(duploArray) then
j.(DUPLIKAT := "x")
else
j.(DUPLIKAT := null)
end
end
Content aside
- vor 2 JahrenZuletzt aktiv
- 11Antworten
- 354Ansichten