I am writing a FoxPro program which is accessing multiple tables and updating some of their values after running values through equations. I am trying to store the result of an equation in a variable (set) as such:
b = table1.base
ser = table2.load*b
Despite not showing some of the surrounding code, this should return a positive numeric value, however it just returns 0.0. What I have noticed is that if I print this quantity,
?table2.load*b
it indeed prints the correct result. How come this correct result is not being stored in the variable ser ? Thanks for any help.
CodePudding user response:
First, I wouldn't use "set" as a variable name because it's a reserved word.
How are you checking the value of the result? Try looking with the Debugger. It should be in the Locals window.
Tamar
CodePudding user response:
The following code would reproduce your observation, and the solution to cure the spooky symptom would be FoxPro's peculiar m.
prefix which clarifies that a certain name expression is a variable as opposed to an (alias.)column.
Don't hesitate to post back if your scenario / reason / repro is somehow different
CLEAR
CREATE CURSOR table1 (base Int)
INSERT INTO table1 VALUES (15)
CREATE CURSOR table2 (load Int)
INSERT INTO table2 VALUES (6)
LOCAL b, ser
b = table1.base
CREATE CURSOR SomethingElse(b Int Null)
INSERT INTO somethingElse VALUES (0)
ser = table2.load * b
? ser && prints 0
ser = table2.load * m.b && the m. tells FoxPro that b is a variable as opposed to an alias row/column
? m.ser && prints 90