How to convert the name of a memory variable into the name of a field and use the variable name as a field name?
How to convert the name of a memory variable into the name of a field and use the variable name as a field name?
FIELD->
#include "fivewin.ch"
function Main()
PRIVATE Salary := 30
USE CUSTOMER
subfunc()
return nil
//----------
function subfunc()
local salary := 10
? salary, field->salary, memvar->salary
return nilThe question is f.e.
select sales
goto top
cproduct:=sales->name
select products
locate for products->cproduct="smart"
PRIVATE cproduct
select sales
goto top
cproduct:=sales->name
select products
locate for products->&cproduct="smart" local cproduct
select sales
goto top
cproduct:=sales->name
select products
locate for products->&(cproduct)="smart" sales->( dbgotop() )
select products
locate for products->&(sales->name)="smart"
// or
locate for &(sales->name)="smart"Thank you India but it does not work with the macro ampersand. I tried that already yesterday and I tried it again today but it gives errors by compiling
the real source code is as follows:
select temp2
goto top
calias:=temp2->alias
select temp1
sum all temp1->calias to ntotalias
sum all temp1->&(calias) to ntotaliasBy compiling no problem but while calling the procedure I got the error message:
"error base/1449 syntax error : &" (ampersand)
PS: I am a non professional programmer working for free at the food bank of my home town
#include "fivewin.ch"
function Main()
local cfield, nTotSal
DBCREATE( "TMP.DBF", {{ "FLD", "C", 10, 0 }}, NIL, .T., "TMP" )
APPEND BLANK
FIELD->FLD := "SALARY"
CLOSE DATA
USE TMP NEW
cField := TMP->FLD
USE CUSTOMER NEW
SUM ALL CUSTOMER->&( cField ) TO ntotsal
? ntotsal
return nilHallo,
The customer.dbf file that is within the fwh/samples map does not contain a fld field??
By compiling and launching the program that you suggest, I become an alert saying "Alert 38836300.00"??
"Alert 38836300.00"?
hallo,
Can you try my situation? The compiling is OK but when launching I got an error message
.....
select temp2
goto top
do while .NOT. eof()
calias:=temp2->alias
cnaam:=temp2->naam
select temp1
sum all temp1->&( calias ) to ntotalias
oPrn:say(nRow, 10*fntArial2:nWidth, cnaam, fntArial3)
oPrn:say(nRow, 50*fntArial2:nWidth, STR(ntotalias,3), fntArial1)
nRow += 1.3 * fntArial1:nHeight
select temp2
skip 1
enddo
......
CLASS TCustomers from TDatabase
Method New()
ENDCLASS
Method New( lShared ) Class TCustomers
Default lShared:= .T.
::Super:New(,"cust",,lShared)
If ::Use()
::SetOrder("CUSTNO") // Primary key
::Gotop()
Endif
Return self
// Note that this assumes you have set your databases to automatically open thier indexes when you open a database.oCustomer:= TCustomer():New()
msgInfo( oCustomer:name )