Jump to content
  • 0

Loop of Replace?


Arnoud

Question

Posted

Kan iemand mij vertellen of bij veel records verschil in snelheid zit tussen:

 

Via een loopje (waarin een calculatie) records updaten of dit doen met behulp van een scriptje met vervangopdracht met calculatie. Of maakt het niets uit?

6 answers to this question

Recommended Posts

  • 0
Posted

Volgens mij is het sneller met de REPLACE-COMMANDO. Maar dat kan je natuurlijk zo meten. Wel is het belangrijk dat je "Freeze window" aanzet om de schermlayout niet na ieder record te laten bijwerken. Als je de routine dan bovendien vanuit een lijstweergave start kan je aan de schuifbalk zien of het een beetje opschiet.

  • 0
Posted

Je hebt gelijk, REPLACE is vele malen sneller.

Persoonlijk vind ik het loopje eleganter, maar dan verberg ik wel een veldje

op mijn formulier, want snelheid is ook belangrijk.

  • 0
Posted

Ik verkies een loop...

 

Je kan in een loop meerdere setfields doen ... en als je juist voor de loop naar een list layout gaat, mag zelfs een blanco zijn, dan zie je de scrollbar scrollen zo heeft de gebruiker ook nog een idee hoever de loop zit.

 

Of

 

Als het over complexe calculation gaat kan je misschien ook een

if (mod (status (currentrecordnumber) ; x ) = 0

refresh window

freeze window

end if

 

waar x een getal is, zo zal er een refresh zijn om de x aantal records. Zo zie in de status hoeveel records reeds verwerkt zijn ...

 

dit vertraagd natuurlijk de ganse loop :(

  • 0
Posted

Houdt met een vervang/replace 2 dingen goed in de gaten:

 

1: het veld moet op de layout aanwezig zijn om gereplaced te worden. Wordt een script met een replace erin geactiveerd als het te-replacen-veld niet op de huidige layout staat, dan zal de replace niet worden uitgevoerd (dit in tegenstelling tot de set field, daarvoor hoeft het veld niet op de layout aanwezig hoeft te zijn).

 

2. Werk je met meerdere mensen in de database, dan zal met de replace-actie een record wat door een andere gebruiker gelocked staat, NIET worden gereplaced. Met een loopscript-met-set-field kun je checken (Status(CurrentError)) en eventueel bijhouden welke records gelocked stonden en dat eventueel later nog eens proberen, met een replace-actie kun je dit niet noteren.

 

Een essentiele replace-actie moet daarom worden voorafgegaan door Status(CurrentUserCount) oftewel Status(HuidigeAantalGebruikers), waarmee je kunt checken dat je op dat moment de enige gebruiker bent.

  • 0
Posted

Heb een paar jaar geleden van René Ros (is hier ergens op het forum te vinden) een voorbeeldje gezien waar hij een "gecachete replace loop" gebruikte. Jongens, da's een mond vol, en nog slecht engels nederlands ook.

 

Wat ik eigenlijk bedoelde: het was een loop, maar eentje waarin eerst "gekeken" werd in het veld om te zien of het vervangen moest worden, alvorens het te vervangen. Je kan je voorstellen dat dit sneller werkt dan nodeloos indexen te updaten en stored calculations te triggeren.

 

Verder heeft Sanne heel groot gelijk i.v.m. mogelijke foutcondities in een multi-user omgeving. Zelfs single-user denk ik dat je zelfs bepaalde veldvalidaties aan je laars lapt als je een replace commando gebruikt.

  • 0
Posted

Bijkomende opmerking die niets te maken heeft met de snelheid. Ik heb het ooit meegemaakt dat de stroom uitviel terwijl ik bezig was met een replace. De schade was de moeite (precies of er iemand met een grote gom in mijn bestand was beziggeweest). Sindsdien gebruik ik altijd "loops" ipv "replace" in mijn scripts.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...