kalkendotters Geplaatst 26 februari 2008 Geplaatst 26 februari 2008 (bewerkt) 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 26 februari 2008 bewerkt door kalkendotters
weedboer Geplaatst 26 februari 2008 Geplaatst 26 februari 2008 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
weedboer Geplaatst 26 februari 2008 Geplaatst 26 februari 2008 als het geen effect heeft, dan niet he :-) Maar ik heb macro's waar beide technieken gebruikt worden...dus proberen maar. Wie niet waagt blijft maagd. t Is maar een suggestie.
weedboer Geplaatst 26 februari 2008 Geplaatst 26 februari 2008 (bewerkt) 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 26 februari 2008 bewerkt door weedboer
geo_taz Geplaatst 27 februari 2008 Geplaatst 27 februari 2008 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.
Wammus Geplaatst 23 november 2008 Geplaatst 23 november 2008 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
Aanbevolen berichten
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 accountAanmelden
Ben je al lid? Meld je hier aan.
Nu aanmelden