0

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

null
    • Josef_Koenig
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Bin mir nicht sicher, ob nicht Hersteller, Name, ... unter "" gesetzt werden müssen, also "Hersteller", "Name", ...

    • Astavakra
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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 

    • Icarus_Ralf_Becker
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Setzt das ganze Skript mal in ein "do as server ... end"

     

    VG Ralf

    • Astavakra
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Selber Effekt

    • Icarus_Ralf_Becker
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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 +++"

    • Astavakra
    • vor 2 Jahren
    • Gemeldet - anzeigen

    das macht einen Unterschied?

    • Icarus_Ralf_Becker
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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.

    • Astavakra
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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 ... 

    • Icarus_Ralf_Becker
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • Astavakra
    • vor 2 Jahren
    • Gemeldet - anzeigen

    die idee hatte ich noch nicht - thx, versuch ich gleich 

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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
  • 324Ansichten