Spring naar bijdragen

macroprobleempje.. snapnie..


Xaa

Aanbevolen berichten

ReizenReizen

Waarom werkt dit niet zoals ik denk dat het zou moeten werken?

 

# clear all geodor values
CancelFilter
MFilter Expression=len($d_UserData)>0
If $_FilterCount>0
 MsgOk Msg="Changing wps now, found $_FilterCount caches"
 GOTO Position=Top
 WHILE .not. $_EOL
$d_User2=""
$d_UserData=""
GOTO Position=Next
 ENDWHILE
ELSE
 MsgOk Msg="Nothing to be changed!!"
EndIf

 

Het zegt braaf dat er bijv 80 punten gevonden worden, maar dan wordt er maar 1 aangepast, en daarna is de lus kennelijk meteen klaar. Huh?

 

Even uit mijn hoofd, zou ik zeggen dat na het wissen van de userdata je meteen op een nieuwe 'positie' in het filter springt. Waardoor je dus meteen het eind van de filter bereikt.

In dat geval is het dus op te lossen door:

a ) van achter naar voren het filter af te werken

of

b ) aldoor naar top te springen

bewerkt door kalkendotters
Link naar opmerking
Deel via andere websites

Volgens mij is het zoiets als het volgende:

 

  WHILE NOT($_EOL)
$d_User2=" "
$d_UserData=" "
GOTO Position=Next
 ENDWHILE

 

Let vooral op de eerste regel waarin de while-lus wordt gestart.

Daarnaast kan je ook een spatie tussen de twee quotes zetten. Daarmee verdwijnt alles, maar krijg je toch geen aanduiding dat de notes ingevuld zijn.

 

My 2 cent...

 

Groeten,

Hans

Link naar opmerking
Deel via andere websites

OK...ik heb een beetje gezocht en gevonden:

 

Het statement

$d_User2=" "
$d_UserData=" "

wordt slechts éénmaal uitgevoerd, ook al zit je in een while-loop tot EOL. Nadat bovenstaande statements uitgevoerd zijn, komt de EOL boolean automatisch op TRUE te staan. Met andere woorden: De loop wordt slechts eenmaal uitgevoerd.

 

Hoe los je dit op? met Global Replace

 

Simpel:

- Klik op 'databases'

- Klik op 'global replace'

- Bij het veld 'Replace' kies je voor "User Data"

- Het veld 'With' laat je leeg

- Bij 'replace options' kies je voor 'replace'

- Klik op save en geef de naam "U1"

 

Doe net hetzelfde maar dan je kiest dan voor het veld 'User Data 2' en geef je de naam 'U2'.

 

Deze twee global replaces kan je dan gebruiken in je macro, als volgt:

CANCELFILTER
MFilter Expression=len($d_UserData)>0
IF $_FilterCount>0
MsgOk Msg="Changing wps now, found $_FilterCount caches"
Replace Settings="U1"
Replace Settings="U2"
ELSE
MsgOk Msg="Nothing to be changed!!"
ENDIF
CANCELFILTER

 

Succes ermee!

Hans

bewerkt door weedboer
Link naar opmerking
Deel via andere websites

Ik liep ook tegen het probleem aan waarbij die While lus op een onverwacht einde stopte.

Een hele tijd zitten zoeken maar geen reden kunnen vinden. :)

 

Toen viel mij op dat ctrl-end me niet het laatste record toonde, maar een ander... Ik heb toen mijn database gereorganiseerd en dat loste direct het probleem op. :cry:

Link naar opmerking
Deel via andere websites

  • 8 months later...

Ik zat vandaag met hetzelfde probleem zoals hierboven genoemd; $_EOL nog lang niet bereikt maar toch stopt de WHILE loop na de eerste actie. De hier geboden workaround middels GlobalReplace was voor mij niet mogelijk omdat ik slechts een deel van de data wil wissen en niet het hele veld leeg moest maken. Dus moest ik verder zoeken.

 

Een eerste oplossing (maar erg traag) was het mfilter steeds opnieuw instellen en dan: WHILE $_filtercount > 0 Dat werkte maar was niet vooruit te branden.

 

Dus verder en dieper gezocht en toen kwam uiteindelijk de (eigenlijk wel erg voor de hand liggende) oplossing:

 

Sort by=Natural

 

Zie ook dit draadje op het forum van GSAK

 

Dit draadje is al oud maar ik plaats mijn gevonden oplossing hier toch maar, wie weet heeft iemand er ooit iets aan

Link naar opmerking
Deel via andere websites

Maak een account aan of meld je aan om een opmerking te plaatsen

Je moet lid zijn om een opmerking achter te kunnen laten

Account aanmaken

Maak een account aan in onze gemeenschap. Het is makkelijk!

Registreer een nieuw account

Aanmelden

Ben je al lid? Meld je hier aan.

Nu aanmelden
  • Onlangs hier   0 leden

    • Er kijken geen geregistreerde gebruikers naar deze pagina.
×
×
  • Nieuwe aanmaken...