Ga naar inhoud
  • 0

unieke sleutel (primary key) aanzuiveren


eldeka

Vraag

Ik weet dat dit een reeds veel besproken onderwerp is maar ik vind op het forum geen antwoord op het volgende probleem.

Na importeren van gegevens in een FMP DB heb ik in het unieke sleutelveld dubbele waarden. Ik wens die gewoon te elimineren.

 

In bijlage heb ik 2 scripts gemaakt.

Script 1 zou gewoon via een Loop de dubbele records moeten verwijderen. Pas na 7 uitvoeringen van het script zijn alle dubbele records verwijderd.

Script 2 markeert eerst de dubbele records om ze nadien te selecteren en dan gezamelijk te verwijderen. Dit lukt perfect in 1 run van het script.

 

Mijn vragen:

1) wat is er fout in Script 1?

2) Kan de oplossing met Script 2 eventueel uitgebreid worden met een variabele zodat op gelijk welk veld kan geselecteerd worden?

 

Graag wat ervaring van de profs.

Dubbels.fp7

Link naar reactie

19 antwoorden op deze vraag

Aanbevolen berichten

  • 0
Het ontdubbelen is inderdaad al vaak langs gekomen. Het makkelijkste is toch proberen te voorkomen dat je dubbelen krijgt in je database.

Dat doe je door bij de import hier voorwaarden voor te maken en in de database een controle in te bouwen die dubbelen voorkomt (overslaat).

 

Betekent dit dat je voorwaarden kan instellen bij "Import records"?

Unieke waarden bepalen voor het doelveld OK, maar die worden toch bij het importeren niet gerespecteerd?

Link naar reactie
  • 0

Bij importeren kan je toch aangeven; "update matching records"?

Je kunt dan het pijtje veranderen voor een = teken om de voorwaarden aan te geven.

Op die manier kan je dus twee unieke waarden vergelijken. Als ze gelijk zijn update hij het gevonden record.

Onderaan kun je dan ook nog aangeven met een vinkje "add remaining data as new records" waardoor alle records die niet aan de voorwaarde voldoen toegevoegd worden als nieuwe records.

 

Gr. Niels

ps. Excuses voor de engels benaming, ik werk altijd in de engelse versie, dat ben ik nu eenmaal gewend.

Link naar reactie
  • 0

tackenco was me voor maar inderdaad gebruik update en ad new voor importeren van nieuwe bestanden. Zorg er ook voor dat als je geen uniek veld hebt (serie nummer bv) dat je dit maakt door meerdere velden samen te voegen met bv getasnumber. Op die manier maak je een unieke code en zal je bij import niets snel dubbele krijgen die je vervolgens weer wilt verwijderen. :D

Filemaker help file legt dit zeer goed uit trouwens :D

Methods of importing data into an existing file (engelse versie, de nederlandse moet je even zelf bedenken)

Link naar reactie
  • 0

Aan allen die hierop gereageerd hebben hartelijk dank.

 

Ik vrees echter dat er een klein misverstand is.

Ik wil namelijk in een uniek veld van een lege tabel de waarden van een externe file (bv. Excel) invoeren die niet uniek zijn.

De oplossing met matching field en de samengestelde sleutel is mij wel bekend maar biedt volgens mij geen oplossing voor dit probleemke.

Ik vermoed dat een script achteraf om de dubbels te verwijderen veruit de beste oplossing biedt.

Link naar reactie
  • 0

OK, voor achteraf kan het misschien zoiets zijn.

 

Als je een relatie aanmaakt met de zelfde tabel op basis van je unieke veld.

Je maakt een layout waar een portaal van die relatie staat.

Je ziet dan in het portaal alle records die dezelfde unieke key hebben.

één daarvan moet blijven staan en de rest mag weg.

Je kunt dan eenvoudig met een script de portaalrecords weggooien en er één overhouden.

 

Loop

Exit Loop If (Count(Portaal::unieke key) = 1)

Go to Portal Row [select; First]

Delete Portal Row [No dialog]

End Loop

 

Is dat iets?

Link naar reactie
  • 0
Aan allen die hierop gereageerd hebben hartelijk dank.

 

Ik vrees echter dat er een klein misverstand is.

Ik wil namelijk in een uniek veld van een lege tabel de waarden van een externe file (bv. Excel) invoeren die niet uniek zijn.

De oplossing met matching field en de samengestelde sleutel is mij wel bekend maar biedt volgens mij geen oplossing voor dit probleemke.

Ik vermoed dat een script achteraf om de dubbels te verwijderen veruit de beste oplossing biedt.

 

Ik heb hetzelfde probleem gehad en dit opgelost door in de lege tabel eerst een "nep"-record aan te maken. Vervolgens kun je dan bij het importeren bovenstaande functie met het vergelijken van matching fields gebruiken. Daarna de eerste aangemaakte "nep"-record weer verwijderen.

Link naar reactie
  • 0

Ik heb hetzelfde probleem gehad en dit opgelost door in de lege tabel eerst een "nep"-record aan te maken. Vervolgens kun je dan bij het importeren bovenstaande functie met het vergelijken van matching fields gebruiken. Daarna de eerste aangemaakte "nep"-record weer verwijderen.

 

Sorry, maar dit lukt me echt niet. Toch bedankt! :oops:

Link naar reactie
  • 0

Als ik het goed begrijp heb je een lege tabel met daarin een uniek veld, laten we zeggen : Kleur.

In deze tabel importeer je vanuit bijv. Excel een bestand met diverse records en een veld dat ook Kleur heet of kleuren bevat. Bijvoorbeeld: Rood, Zwart, Rood, Wit, Wit, Zwart.

De bedoeling is om in FMP een tabel op te bouwen met records die unieke kleuren bevatten? Het resultaat na import zou hier dan moeten zijn: Rood, Zwart, Wit.

Begrijp ik het zo goed?

Link naar reactie
  • 0

Ik begrijp het nog steeds niet erg goed ben ik bang.Stel je hebt een bestand met kleur wat al genoemd is.

Je wilt dus elke keer importeren en alleen records toevoegen als de kleur nog niet bestaat.

Dan doe je toch de import met als basis dat als de kleur gelijk is je niet importeer?

 

Je geeft een voorbeeld bestand maar dat is alleen een veld met als kenmerk dat het uniek moet zijn. Daar kan ik verder ook niets van maken ben ik bang?

De bedoeling van een uniek veld is dat het echt uniek is? Maakt verder niet uit als je met het wissen van de dubbelen uit de voeten kan is prima maar ik blijf het vreemd vinden? :?

Link naar reactie
  • 0
Ik begrijp het nog steeds niet erg goed ben ik bang. Stel je hebt een bestand met kleur wat al genoemd is.

Je wilt dus elke keer importeren en alleen records toevoegen als de kleur nog niet bestaat.

Dan doe je toch de import met als basis dat als de kleur gelijk is je niet importeer?

 

Je geeft een voorbeeld bestand maar dat is alleen een veld met als kenmerk dat het uniek moet zijn. Daar kan ik verder ook niets van maken ben ik bang?

De bedoeling van een uniek veld is dat het echt uniek is? Maakt verder niet uit als je met het wissen van de dubbelen uit de voeten kan is prima maar ik blijf het vreemd vinden? :?

 

Niet bang zijn beste pjotter. Het punt is dat ik een veld gedefinieerd heb dat uniek is maar ook GEEN WAARDEN inhoudt. NUL records dus.

Ik wil nu records importeren maar alleen unieke waarden toevoegen.

Dit kan in heel onze speurtocht blijkbaar alleen door de dubbele waarden nadien via een script te elimineren. En dat lukt me intussen prima.

Waarvoor dank aan alle medezoekers! :lol:

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...