Newbies dalailaptop Posted April 14, 2004 Newbies Posted April 14, 2004 I can't seem to do this, though it makes sense to me. I'm trying to set up a comparison like this: fieldOne fieldOperatorChosen fieldTwo where fieldOne and fieldTwo are values and fieldOperatorChosen is a value chosen from a value list with "=, ?, <, >" as options. I know i can do it by branching off into different script versions, e.g. if fieldOperatorChosen="<" then perform script compareLessThan... and so forth. But there has to be a better way. I've tried getField(fieldOperatorChosen) and getField("fieldOperatorChosen") but the validation never works. I have a feeling I'm missing something obvious, at least I hope I am. FileMaker Version: Dev 7 Platform: Mac OS X Panther
The Shadow Posted April 14, 2004 Posted April 14, 2004 This looks like an ideal usage for the new Evaluate() calculation function!: Evaluate( Quote(fieldOne) & fieldOperatorChosen & Quote(fieldTwo) ) The Quote() is needed to protect the contents of the field from the evaluate (imagine fieldOne containing the string 3+4, for instance). I'm also not sure what you expect from ?, or is that just my browser futzing up the not= mark?
Newbies dalailaptop Posted April 14, 2004 Author Newbies Posted April 14, 2004 Disregard the following. I messed around with it and referenced a calculation field instead of the twice removed field in the original attempt. Thanks again. Editted: Thought that worked but i was wrong. I don't think I know how to use this function. I'm putting it in a script to test like so: If fieldOne & fieldOperatorChosen & fieldTwo Set Field [matchFlag; "Match"] where it means If Yes = Yes Then matchFlag="Match" so i can do stuff later in the script... I tried If [Evaluate (Quote(fieldOne) & fieldOperatorChosen & Quote(fieldTwo))] Set Field [matchFlag; "Match"] But that's not actually working like i thought, it just happened to screw up correctly on the first test record, but actually returned that match for all records. I tried adding a test like If [Evaluate (Quote(fieldOne) & fieldOperatorChosen & Quote(fieldTwo) "=1")] but no dice again. Is the evaluate function putting a value somewhere that I can test, there is scant little in the help or manuals about it?
The Shadow Posted April 15, 2004 Posted April 15, 2004 Well, I tried this out myself also, and have a sample file. It seems the expression needs to have double Quote() calls: Evaluate( Quote(Quote(fieldOne)) & compareWith & Quote(Quote(fieldTwo)) ) This struck me as odd, and I'll admit I'm not real clear yet on why one isn't enough. The Evaluate() function takes a string and evaluates it as a calculation, exactly so you can do this sort of thing, for example: Evaluate( "3 + 4" ) returns 7 and Evaluate( "3 " & comparesWith & " 4" ) returns the results of "3 < 4", "3 = 4", or "3 >= 4" depending on the value of comparesWith. Hope this helps.
The Shadow Posted April 15, 2004 Posted April 15, 2004 Actually, a better way would be to delay the field expansion until the Evaluate(): Evaluate( "matchTest::fieldOne " & matchTest::compareWith & " matchTest::fieldTwo" ) where matchTest is the table containing these fields. Then you shouldn't need any extra quoting at all. (but I haven't tried it).
Recommended Posts
This topic is 7530 days old. Please don't post here. Open a new topic instead.
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now