PRB: SQL - SELECT Error: <Field_name> is not a memory variableLast reviewed: August 28, 1995Article ID: Q124203 |
The information in this article applies to:
SYMPTOMSIn an SQL Select statement, if all the tables referenced in the query are not included in the FROM clause, the command fails with this error message:
<Field name> is not a memory variable. CAUSEFoxPro does not evaluate the table aliases referenced in a WHERE clause. This is by design and is standard SQL behavior regardless of the dialect. All SQL statements have certain required components and one such component is the list of tables that fields will be drawn from and comparisons will be made against. Without a complete list of tables, FoxPro interprets the field referenced in the right half of the WHERE clause to be a memory variable, and because there is no such variable the command fails.
RESOLUTIONTo resolve this problem, the SQL statement must have all tables referenced in the SELECT statement listed in the FROM clause: CLOSE ALL USE SYS(2004)+"\TUTORIAL\Customer" IN 1 USE SYS(2004)+"\TUTORIAL\Invoices" IN 2 SELECT company,contact ; FROM customer,invoices ; WHERE customer.cno = invoices.cnoIt isn't necessary to have all the tables open. FoxPro opens the tables it needs to complete the operation. However, FoxPro can't open a table for use if it doesn't know which table it needs.
STATUSThis behavior is by design.
MORE INFORMATION
Example to Reproduce BehaviorIn the following code example, the SQL statement is extracting two fields from the customer table, but it is doing so based on a comparison of values between the CNO fields in the Customer and Invoices tables. In the FROM clause, only one table is referenced. Consequently, the command fails. CLOSE ALL USE SYS(2004)+"\TUTORIAL\Customer" IN 1 USE SYS(2004)+"\TUTORIAL\Invoices" IN 2 SELECT company,contact ; FROM customer ; WHERE customer.cno = invoices.cno |
Additional reference words: 2.00 2.50 2.50a 2.50b 2.50c 2.60 2.60a FoxMac
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |