Relations/Scope on/off

This forum is for eXpress++ general support.
Message
Author
Victorio
Posts: 631
Joined: Sun Jan 18, 2015 11:43 am
Location: Slovakia

Relations/Scope on/off

#1 Post by Victorio »

Hi,
Please "little" help for me ;)

I have several databases (6), one is master, and other is scoped with it using one key/field.
In app window I have all six tables as "one to many" view. If I listing in first, records on othes move too using scope key.
bCPA,bEPA,bSTA,bBYT,bPVA.
It is correct. thanks Roger Donnay for super examples in eXpress :clap:

But in one moment I want OFF this relation using click to button Rel.VYP for example, and want see all databases and may listing in it in all 6 "tables", respectively I want make some report from all databases using filters, etc.
I sit on this problem about 3 days, but do not know how do it.

If I OFF scope, I have listing in first database,without listing in others, it is ok, but I do not see full database 2,3,4..

How can I reload or Refresh it .
I used DC_Clrscope() in several points in source... but still problem.

Please, see for source , here is only important part from it.

SOURCE :

Local bVLA,bCPA,bEPA,bSTA,bBYT,bPRV

* relations for scope
bCPA:={||CPARCELY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
CPARCELY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
CPARCELY->(DC_DbGoTop()), ;
oBrowsepa:refreshAll()}

bEPA:={||EPARCELY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
EPARCELY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
EPARCELY->(DC_DbGoTop()), ;
oBrowseep:refreshAll()}

bSTA:={||STAVBY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
STAVBY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
STAVBY->(DC_DbGoTop()), ;
oBrowsecs:refreshAll()}

bBYT:={||BYTY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
BYTY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
BYTY->(DC_DbGoTop()), ;
oBrowsebp:refreshAll()}

bPRV:={||PRV->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
PRV->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
PRV->(DC_DbGoTop()), ;
oBrowsepv:refreshAll()}

* First database "window"
@pozyvl,10 DCBROWSE oBrowsevl ALIAS "VLASTNICI" ;
NOSOFTTRACK ;
SCOPE ;
OPTIMIZE ;
CURSORMODE XBPBRW_CURSOR_ROW ;
PRESENTATION aBrowPres ;
ITEMMARKED {|| ;
if (relon,{Eval(bCPA),Eval(bEPA),Eval(bSTA),Eval(bBYT),Eval(bPRV)}, ;
DC_Clrscope() ), ;
DC_GetRefresh(GetList,,DCGETREFRESH_TYPE_EXCLUDE,(GETLIST_BROWSE)) , ;
zvolosc:=(VLASTNICI->OSC)}

DCSETPARENT oBrowsevl

DCBROWSECOL FIELD VLASTNICI->KN_CLV ;
HEADER "LV " WIDTH znakpixc[1]*7

* etc

DCSETPARENT TO

* Second database "window"
@pozypa,10 DCBROWSE oBrowsepa ALIAS "CPARCELY" ;
SIZE rozxpa,rozypa PIXEL ;
NOSOFTTRACK ;
SCOPE ;
OPTIMIZE ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SCROLLBARHEIGHT fontnv+2 ;
PRESENTATION aBrowPres
*FIT ; - aj tu zablokované lebo ide mimo okna

DCSETPARENT oBrowsepa

DCBROWSECOL FIELD CPARCELY->CPAU ;
HEADER "Parcela " WIDTH znakpixc[1]*14

* etc

DCSETPARENT TO

* database 3. "window"
@pozyep,10 DCBROWSE oBrowseep ALIAS "EPARCELY" ;
SIZE rozxep,rozyep PIXEL ;
NOSOFTTRACK ;
SCOPE ;
OPTIMIZE ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SCROLLBARHEIGHT fontnv+2 ;
PRESENTATION aBrowPres
*FIT ; - aj tu zablokované lebo ide mimo okna

DCSETPARENT oBrowseep

DCBROWSECOL FIELD EPARCELY->CPAU ;
HEADER "Parcela " WIDTH znakpixc[1]*14

* etc

DCSETPARENT TO

* database 4. "window"
@pozycs,10 DCBROWSE oBrowsecs ALIAS "STAVBY" ;
SIZE rozxcs,rozycs PIXEL ;
NOSOFTTRACK ;
SCOPE ;
OPTIMIZE ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SCROLLBARHEIGHT fontnv+2 ;
PRESENTATION aBrowPres
*FIT ; - aj tu zablokované lebo ide mimo okna

DCSETPARENT oBrowsecs

DCBROWSECOL FIELD STAVBY->KN_CLV ;
HEADER " LV " WIDTH znakpixc[1]*7

* etc

DCSETPARENT TO

database 5 "window"
@pozybp,10 DCBROWSE oBrowsebp ALIAS "BYTY" ;
SIZE rozxbp,rozybp PIXEL ;
NOSOFTTRACK ;
SCOPE ;
OPTIMIZE ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SCROLLBARHEIGHT fontnv+2 ;
PRESENTATION aBrowPres
*FIT ; - aj tu zablokované lebo ide mimo okna

DCSETPARENT oBrowsebp

DCBROWSECOL FIELD BYTY->KN_CLV ;
HEADER " LV " WIDTH znakpixc[1]*7

* etc

DCSETPARENT TO

* database 6 "window"
@pozypv,10 DCBROWSE oBrowsepv ALIAS "PRV" ;
SIZE rozxpv,rozypv PIXEL ;
NOSOFTTRACK ;
SCOPE ;
OPTIMIZE ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SCROLLBARHEIGHT fontnv+2 ;
PRESENTATION aBrowPres
*FIT ; - aj tu zablokované lebo ide mimo okna

DCSETPARENT oBrowsepv

* šírka poľa vypočítaná cez Len...
DCBROWSECOL FIELD PRV->KN_CLV ;
HEADER " LV " WIDTH znakpixc[1]*7

* etc

DCSETPARENT oToolbar1

* TOOLBAR
@ pozyvl+10,rozxvl+20 DCTOOLBAR oToolbar1 PIXEL SIZE 80,600 ;
ALIGN DCGUI_ALIGN_LEFT ;
BUTTONSIZE 60,25 ;
SPACE fontnv ;
RESIZE DCGUI_RESIZE_REPOSONLY_X


* here is button to On/off Scope /relations toogle on/off
*****************************************************
DCADDBUTTON CAPTION {||cCaption} PARENT oToolbar1 ;
TOOLTIP "Zapnutie/Vypnutie relácie" ;
ACTION {||tone(1000,1),cCaption:=relzmen(),DC_GetRefresh(Getlist)}

* this is manually button to OFF scope / relation
DCADDBUTTON CAPTION "Rel.VYP" PARENT oToolbar1 ;
TOOLTIP "Vypnutie relácie" ;
ACTION {||tone(1000,1),relvyp()}

* this is manually button to ON scope / relation
DCADDBUTTON CAPTION "Rel.ZAP" PARENT oToolbar1 ;
TOOLTIP "Zapnutierelácie" ;
ACTION {||tone(1000,1),relzap()}

DCREAD GUI ;
OPTIONS GetOptions ;
TITLE "[ VLASTNÍCI ] - [ "+nazku+" ] - [ "+nazovdbf4+" ]" ;
MODAL ;
EVAL {|o|SetAppFocus(oBrowsevl:GetColumn(1))}

return(0)


* function to ON,OFF Scope
FUNCTION RELZMEN
if relon==.T.
relon=.F.
return("Rel.VYP")
elseif relon==.F.
relon=.T.
return("Rel.ZAP")
else
relon=.T.
return("Rel.ZAP")
endif
return("Rel.ZAP")


* Scope ON
FUNCTION RELZAP
relon=.T.
return nil

* Scope OFF
FUNCTION RELVYP
relon=.F.
return nil

User avatar
rdonnay
Site Admin
Posts: 4734
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Relations/Scope on/off

#2 Post by rdonnay »

The below code does not look correct.
You are refreshing everything except the browse objects.
Try changing to DC_GetRefresh(GetList)

Code: Select all

ITEMMARKED {|| ;
if (relon,{Eval(bCPA),Eval(bEPA),Eval(bSTA),Eval(bBYT),Eval(bPRV)}, ;
DC_Clrscope() ), ;
DC_GetRefresh(GetList,,DCGETREFRESH_TYPE_EXCLUDE,(GETLIST_BROWSE)) , ;
zvolosc:=(VLASTNICI->OSC)} 
The eXpress train is coming - and it has more cars.

Victorio
Posts: 631
Joined: Sun Jan 18, 2015 11:43 am
Location: Slovakia

Re: Relations/Scope on/off

#3 Post by Victorio »

change DC_GetRefresh(GetList) does not help me, .
second, third... databases are still "scoped"
But if I close window, and open again, all record are listed as I need
(if I click to button Rel.OFF, variable relon change from .T. to .F. and it is PUBLIC .)

I need some example like "one to many" from your demo sources with Scope on/off button :?:

User avatar
rdonnay
Site Admin
Posts: 4734
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Relations/Scope on/off

#4 Post by rdonnay »

Give me a sample program that I can compile and run.
Include the databases.

I will solve this for you.
The eXpress train is coming - and it has more cars.

skiman
Posts: 1189
Joined: Thu Jan 28, 2010 1:22 am
Location: Sijsele, Belgium
Contact:

Re: Relations/Scope on/off

#5 Post by skiman »

Hi,

I think you will need to do a gotop after clearing the scope. With dc_getrefresh the 'view' is refreshed, but not the record positions.
Best regards,

Chris.
www.aboservice.be

Victorio
Posts: 631
Joined: Sun Jan 18, 2015 11:43 am
Location: Slovakia

Re: Relations/Scope on/off

#6 Post by Victorio »

Hi,

I sent source to your mail.
If you have some time, please look to it.
Many thanks for your time .
Viktor alias Victorio.

Victorio
Posts: 631
Joined: Sun Jan 18, 2015 11:43 am
Location: Slovakia

Re: Relations/Scope on/off

#7 Post by Victorio »

skiman: please, tell me, where put dbgotop ? I examine put it to codeblock for scope, to ITEMMARKED, but no function.
I do not know, how refresh all tables, if I see more, than one on screen, need I some AppFocus to add to some place ?

Victorio
Posts: 631
Joined: Sun Jan 18, 2015 11:43 am
Location: Slovakia

Re: Relations/Scope on/off

#8 Post by Victorio »

update : I modify scope source , to two versions bCPA with scope, bCPA2 without scope, etc look here :

* relácie - zadanie väzieb VLA/CPA/EPA/STA/BYT/PRV
bCPA:={||CPARCELY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
CPARCELY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
CPARCELY->(DC_DbGoTop()), ;
oBrowsepa:refreshAll()}
* this is key without relations / scope
bCPA2:={||CPARCELY->(DC_ClrScope()),CPARCELY->(DC_DbGoTop()),oBrowsepa:refreshAll()}

bEPA:={||EPARCELY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
EPARCELY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
EPARCELY->(DC_DbGoTop()), ;
oBrowseep:refreshAll()}

bEPA2:={||EPARCELY->(DC_ClrScope()),EPARCELY->(DC_DbGoTop()),oBrowseep:refreshAll()}

bSTA:={||STAVBY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
STAVBY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
STAVBY->(DC_DbGoTop()), ;
oBrowsecs:refreshAll()}

bSTA2:={||STAVBY->(DC_ClrScope()),STAVBY->(DC_DbGoTop()),oBrowsecs:refreshAll()}

bBYT:={||BYTY->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
BYTY->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
BYTY->(DC_DbGoTop()), ;
oBrowsebp:refreshAll()}

bBYT2:={||BYTY->(DC_ClrScope()),BYTY->(DC_DbGoTop()),oBrowsebp:refreshAll()}

bPRV:={||PRV->(DC_SetScope(0,VLASTNICI->KN_CLV)), ;
PRV->(DC_SetScope(1,VLASTNICI->KN_CLV)), ;
PRV->(DC_DbGoTop()), ;
oBrowsepv:refreshAll()}

bPRV2:={||PRV->(DC_ClrScope()),PRV->(DC_DbGoTop()),oBrowsepv:refreshAll()}


and too modify DCBROWSE , where is parameter relon, if true, with scope, if false, without scope :


@pozyvl,10 DCBROWSE oBrowsevl ALIAS "VLASTNICI" ;
SIZE rozxvl,rozyvl PIXEL ;
NOSOFTTRACK ;
SCOPE ;
OPTIMIZE ;
CURSORMODE XBPBRW_CURSOR_ROW ;
SCROLLBARHEIGHT fontnv+2 ;
PRESENTATION aBrowPres ;
ITEMMARKED {|| ;
if (relon,{Eval(bCPA),Eval(bEPA),Eval(bSTA),Eval(bBYT),Eval(bPRV)}, ;
{Eval(bCPA2),Eval(bEPA2),Eval(bSTA2),Eval(bBYT2),Eval(bPRV2)} ), ;
DC_GetRefresh(GetList,,DCGETREFRESH_TYPE_EXCLUDE,(GETLIST_BROWSE)) , ;
zvolosc:=(VLASTNICI->OSC)}


This work ok, but still I need click to first table ( ITEMMARKED ..) to accept switching Scope on or off .
But it is similar problem I need put some EVAL or now I do not know where to do it.

Maybe it is not very correct algoritm ...

Victorio
Posts: 631
Joined: Sun Jan 18, 2015 11:43 am
Location: Slovakia

Re: Relations/Scope on/off

#9 Post by Victorio »

Update 2 :

I done it, everything works as I want, using two versions of "scope", as in previous part of source

skiman
Posts: 1189
Joined: Thu Jan 28, 2010 1:22 am
Location: Sijsele, Belgium
Contact:

Re: Relations/Scope on/off

#10 Post by skiman »

Hi,

I would place it here:

...
if (relon,{Eval(bCPA),Eval(bEPA),Eval(bSTA),Eval(bBYT),Eval(bPRV)}, ;
DC_Clrscope(), .. :?: .. ), ;
...
Best regards,

Chris.
www.aboservice.be

Post Reply