rdd filter

Post Reply
Ehab Samir Aziz
Posts: 334
Joined: Fri Oct 14, 2005 1:54 pm

rdd filter

Post by Ehab Samir Aziz »

I can not find that filter DBSETFILTER(&bFilter,cFilter) is applied to the database . Please can somebody explain why ?

Code: Select all


STATIC FUNCTION listmete( oWnd )
*--------------------------

local oDlg, oCol 

local oBrw
local nfor,x,cFilter:="",bFilter:=""
local V_me_mc_serl:= space(7)

REQUEST ADS 
rddRegister( "ADS", 1 ) 
rddsetdefault( "ADS" ) 
AdsSetDeleted(.T.) 
SET SERVER LOCAL 
SET FILETYPE TO CDX 





select 1
USE cust
INDEX ON upper(cust->cu_acct) TO cust
INDEX ON upper(cust->cu_name) TO cust1
INDEX ON upper(cust->cu_coun) TO cust2
INDEX ON upper(cust->cu_city) TO cust3
INDEX ON upper(cust->cu_gove) TO cust4
INDEX ON upper(cust->cu_stre) TO cust5
INDEX ON upper(cust->cu_phon) TO cust6
INDEX ON upper(cust->cu_fax ) TO cust7
INDEX ON upper(cust->cu_mobi) TO cust8
INDEX ON upper(cust->cu_man ) TO cust9
INDEX ON upper(cust->cu_appr) TO cust10
set INDEX TO cust

select 2
USE cont
INDEX ON cont->CT_CU_ACCT+dtoc(cont->ct_strd) TO cont
INDEX ON cont->CT_CU_acct TO cont1
INDEX ON cont->ct_strd TO cont2
INDEX ON cont->ct_endd TO cont3
INDEX ON cont->CT_machno TO cont4
INDEX ON cont->CT_mamc TO cont5
INDEX ON cont->ct_paymet TO cont6
INDEX ON cont->ct_payamt TO cont7
INDEX ON cont->ct_currenc TO cont8
INDEX ON cont->ct_excmet TO cont9
INDEX ON cont->ct_excamt TO cont10
INDEX ON cont->ct_minvol TO cont11
INDEX ON cont->ct_ctna TO cont12
SET INDEX TO cont1

select 3
use mach
index on mach->MC_CU_ACCT to mach
index on UPPER(mach->MC_CU_name) to mach1
index on UPPER(mach->MC_ct_ctna) to mach2
index on UPPER(mach->MC_model) to mach3
index on UPPER(mach->MC_TYPE)+UPPER(mach->MC_model) to mach4
index on (mach->MC_serial) to mach5
index on UPPER(mach->MC_meres) to mach6
index on UPPER(mach->MC_brn) to mach7
index on UPPER(mach->MC_gateway) to mach8
set index to mach5
go top

select 4
use mete
index on mete->ME_mc_serl to mete
index on str(mete->year) + str(mete->month) to mete1
index on mete->me_date to mete2
set index to mete


if MsgGet( "Serial Machine", "Enter Serial Machine", @V_me_mc_serl,;
              "..\lupa.bmp" )
      select 3
      use mach
      set index to mach5
      MSGINFO(IndexKey()) 
      if ! DbSeek( (V_me_mc_serl ))
         MsgAlert( "I don't find that serial" )
      endif
   endif



? V_me_mc_serl
cFilter :="mete->me_mc_serl" + '=="' + (V_me_mc_serl) + '"'

? cFilter 
bFilter = "{||"+cFilter+"}"
? bFilter 

select 4
use mete
DBSETFILTER(&bFilter,cFilter)
mete->(DBGOTOP())



   DEFINE DIALOG oDlg of oWnd FROM 0,0 TO 45,128 TITLE "Meter reads browse "

   oBrw := TXBrowse():New( oDlg ) 
   oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLCELL
   oBrw:nColDividerStyle    := LINESTYLE_BLACK
   oBrw:nRowDividerStyle    := LINESTYLE_BLACK
   oBrw:lColDividerComplete := .t.
   oBrw:nHeaderLines        := 1
   oBrw:nFooterLines        := 1
   oBrw:nDataLines          := 1
   oBrw:lFooter             := .t.
   oBrw:SetRDD()
   oBrw:CreateFromCode()
   oBrw:nTop = 0
   oBrw:nLeft = 0
   oBrw:nWidth = 1000
   oBrw:nHeight =600



   for nFor := 1 to Fcount()


   if nFor=27
      oBrw:aCols[ nFor ]:cHeader       := FieldName( nFor )
      oBrw:aCols[ nFor ]:cFooter       := alltrim(STR(TOTALEM2(),12,0))
      loop
   endif

      *oBrw:aCols[ nFor ]:cHeader       := FieldName( nFor )
      *oBrw:aCols[ nFor ]:cFooter       := FieldName( nFor )
   next


   *oBrw:CreateFromCode()
   *oBrw:UpStable()           // Corrects same page stabilizing Bug
   oBrw:Refresh(.t.)            // Repaint the ListBox





ACTIVATE DIALOG oDlg ON INIT (oBrw:SetSize( 1000, 600 ),BuildButtons( oDlg ),oDlg:Refresh(.t.),oBrw:Refresh(.t.))

RETURN NIL
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Post by Armando »

Ehab:

Try with the traditional way

select 4
use mete
DBSETFILTER( {| | mete->me_mc_serl == V_me_mc_serl },;
"mete->me_mc_serl == V_me_mc_serl" ))
mete->(DBGOTOP())

Good luck, Armando
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Ehab Samir Aziz
Posts: 334
Joined: Fri Oct 14, 2005 1:54 pm

Post by Ehab Samir Aziz »

a strange problem has occured . I did the syntax before . The reult of of program is a previous result of another machine serial not the serial entered . I do not have any other function withthe same name !!!!

Code: Select all

STATIC FUNCTION listmete( oWnd )
*--------------------------

local oDlg, oCol 

local oBrw
local nfor,cFilter:="",bFilter:="",x:=""
local V_me_mc_serl:= space(7)

REQUEST ADS 
rddRegister( "ADS", 1 ) 
rddsetdefault( "ADS" ) 
AdsSetDeleted(.T.) 
SET SERVER LOCAL 
SET FILETYPE TO CDX 





select 1
USE cust
INDEX ON upper(cust->cu_acct) TO cust
INDEX ON upper(cust->cu_name) TO cust1
INDEX ON upper(cust->cu_coun) TO cust2
INDEX ON upper(cust->cu_city) TO cust3
INDEX ON upper(cust->cu_gove) TO cust4
INDEX ON upper(cust->cu_stre) TO cust5
INDEX ON upper(cust->cu_phon) TO cust6
INDEX ON upper(cust->cu_fax ) TO cust7
INDEX ON upper(cust->cu_mobi) TO cust8
INDEX ON upper(cust->cu_man ) TO cust9
INDEX ON upper(cust->cu_appr) TO cust10
set INDEX TO cust

select 2
USE cont
INDEX ON cont->CT_CU_ACCT+dtoc(cont->ct_strd) TO cont
INDEX ON cont->CT_CU_acct TO cont1
INDEX ON cont->ct_strd TO cont2
INDEX ON cont->ct_endd TO cont3
INDEX ON cont->CT_machno TO cont4
INDEX ON cont->CT_mamc TO cont5
INDEX ON cont->ct_paymet TO cont6
INDEX ON cont->ct_payamt TO cont7
INDEX ON cont->ct_currenc TO cont8
INDEX ON cont->ct_excmet TO cont9
INDEX ON cont->ct_excamt TO cont10
INDEX ON cont->ct_minvol TO cont11
INDEX ON cont->ct_ctna TO cont12
SET INDEX TO cont1

select 3
use mach
index on mach->MC_CU_ACCT to mach
index on UPPER(mach->MC_CU_name) to mach1
index on UPPER(mach->MC_ct_ctna) to mach2
index on UPPER(mach->MC_model) to mach3
index on UPPER(mach->MC_TYPE)+UPPER(mach->MC_model) to mach4
index on (mach->MC_serial) to mach5
index on UPPER(mach->MC_meres) to mach6
index on UPPER(mach->MC_brn) to mach7
index on UPPER(mach->MC_gateway) to mach8
set index to mach5
go top

select 4
use mete
index on mete->ME_mc_serl to mete
index on str(mete->year) + str(mete->month) to mete1
index on mete->me_date to mete2
set index to mete


if MsgGet( "Serial Machine", "Enter Serial Machine", @V_me_mc_serl,;
              "..\lupa.bmp" )
      select 3
      use mach
      set index to mach5
      MSGINFO(IndexKey()) 
      if ! DbSeek( (V_me_mc_serl ))
         MsgAlert( "I don't find that serial" )
      endif
   endif



? V_me_mc_serl
cFilter :="mete->me_mc_serl" + '=="' + (V_me_mc_serl) + '"'

? cFilter 
bFilter = "{||"+cFilter+"}"
? bFilter 

/*select 4
use mete
DBSETFILTER(&bFilter,cFilter)
mete->(DBGOTOP())*/
*V_me_mc_serl:="0731370"
select 4 
use mete 
DBSETFILTER( {| | 4->me_mc_serl == V_me_mc_serl },; 
"4->me_mc_serl == V_me_mc_serl" ) 
4->(DBGOTOP()) 


   DEFINE DIALOG oDlg of oWnd FROM 0,0 TO 45,128 TITLE "Meter reads browse "

   oBrw := TXBrowse():New( oDlg ) 
   oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLCELL
   oBrw:nColDividerStyle    := LINESTYLE_BLACK
   oBrw:nRowDividerStyle    := LINESTYLE_BLACK
   oBrw:lColDividerComplete := .t.
   oBrw:nHeaderLines        := 1
   oBrw:nFooterLines        := 1
   oBrw:nDataLines          := 1
   oBrw:lFooter             := .t.
   oBrw:SetRDD()
   oBrw:CreateFromCode()
   oBrw:nTop = 0
   oBrw:nLeft = 0
   oBrw:nWidth = 1000
   oBrw:nHeight =600



   for nFor := 1 to Fcount()


   if nFor=27
      oBrw:aCols[ nFor ]:cHeader       := FieldName( nFor )
      oBrw:aCols[ nFor ]:cFooter       := alltrim(STR(TOTALEM2(),12,0))
      loop
   endif

      *oBrw:aCols[ nFor ]:cHeader       := FieldName( nFor )
      *oBrw:aCols[ nFor ]:cFooter       := FieldName( nFor )
   next


   *oBrw:CreateFromCode()
   *oBrw:UpStable()           // Corrects same page stabilizing Bug
   oBrw:Refresh(.t.)            // Repaint the ListBox





ACTIVATE DIALOG oDlg ON INIT (oBrw:SetSize( 1000, 600 ),BuildButtons( oDlg ),oDlg:Refresh(.t.),oBrw:Refresh(.t.))

RETURN NIL
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

DON'T USE VARIABLE NAMES IN THE FILTERS !!!!!!!

I've been told it THOSANDS OF TIMES !!!!!!!!

ADS cannot resolve what is INSIDE your program, if you use ALIAS in your field names, ADS cannot go inside you program to see the value of "mete->" so it cannot resolve the filter expression.

You also have an error when creating indexes, Don't use ALIAS, Alias should be used only in the program to make reference to the data fields, but not in indexes or any other operation.
Saludos
R.F.
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Post by James Bott »

Rene,

>You also have an error when creating indexes, Don't use ALIAS, Alias should be used only in the program to make reference to the data fields, but not in indexes or any other operation.

Are you saying that with ADS you cannot do something like:

(cAlias)->(eof())

If not, how does ADS keep track of workareas?

(I have never used ADS.)

James
Post Reply