Home > database >  FoxPro How To Correctly Update a Variable Based On Table Values
FoxPro How To Correctly Update a Variable Based On Table Values

Time:09-09

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
  • Related