memvar

Post Reply
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

memvar

Post by jds »

How to convert the name of a memory variable into the name of a field and use the variable name as a field name?
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: memvar

Post by hmpaquito »

FIELD->
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: memvar

Post by nageswaragunupudi »

Interesting test:

Code: Select all

#include "fivewin.ch"

function Main()

   PRIVATE Salary := 30

   USE CUSTOMER

   subfunc()


return nil

//----------

function subfunc()

   local salary := 10

   ? salary, field->salary, memvar->salary

return nil
 
Regards

G. N. Rao.
Hyderabad, India
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: memvar

Post by jds »

The question is f.e.
select sales
goto top
cproduct:=sales->name

select products
locate for products->cproduct="smart"
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: memvar

Post by nageswaragunupudi »

Code: Select all

   PRIVATE cproduct

   select sales
   goto top
   cproduct:=sales->name

   select products
   locate for products->&cproduct="smart"
 
OR

Code: Select all

   local cproduct

   select sales
   goto top
   cproduct:=sales->name

   select products
   locate for products->&(cproduct)="smart"
 
OR

Code: Select all

   sales->( dbgotop() )
   select products
   locate for products->&(sales->name)="smart"
   // or
   locate for &(sales->name)="smart"
 
Regards

G. N. Rao.
Hyderabad, India
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: memvar

Post by jds »

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
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: memvar

Post by nageswaragunupudi »

Code: Select all

sum all temp1->&(calias) to ntotalias
 
All the snippets I posted were after testing. If you adopt them correctly, they should work.
Regards

G. N. Rao.
Hyderabad, India
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: memvar

Post by jds »

By 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
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: memvar

Post by nageswaragunupudi »

Please try this program as it is in your fwh\samples folder

Code: Select all

#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 nil
 
Regards

G. N. Rao.
Hyderabad, India
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: memvar

Post by jds »

Hallo,
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"??
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: memvar

Post by nageswaragunupudi »

"Alert 38836300.00"?
This alert box show the total as 38836300.00.
That means the program worked correctly.

Now, apply the same logic to your situation.
Regards

G. N. Rao.
Hyderabad, India
jds
Posts: 106
Joined: Sat Dec 05, 2009 12:44 pm

Re: memvar

Post by jds »

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
......
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Re: memvar

Post by James Bott »

JDS,

I am not exactly sure what you are trying to do, but if you use database objects you don't need to use local variables for fields--that is built into the database object.

oCustomer:Name

Is actually a buffer that contains a copy of the data in the NAME field.

Also you never need to use workareas or aliases with database objects.

Here is an example of how to build a database object for a customer database:

Code: Select all

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.
Now you can do:

Code: Select all

oCustomer:= TCustomer():New()

msgInfo( oCustomer:name )
Have you read the articles that I provided the links to in your other message thread with the same title as this one? If not, please do.

James
FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Post Reply