Relationen aktualisieren
Moderator: Moderatoren
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Hallo Manfred,
ich habe nahezu ausschließlich entweder Auswahllisten in Listboxen oder selten in QuickBrowse Arrays.
Mehrere Dateien, welche 1:n (ein Stammsatz, mehrere Kinddatensätze) verbunden sind würde ich nie in einem Browser anzeigen, sondern kombiniert wie schon vorgeschlagen wurde:
Listbox oder Browser mit Hauptbegriff (z.B. DB1) plus
2. Browser für Kinddatensätze (z.B. DB2) dieser steuert
3. Browser für Kinder der Kinddatensätze (z.B. DB3)
Ändert sich die Position im 1. Browser, (stablecodeblock oder select...), dann wird entweder mit seek oder scope der 2. und daraus dann der 3. positioniert.
Ändert sich die Position nur im 2. Browser, einfach nur den 3. nachziehen.
etc.
ich habe nahezu ausschließlich entweder Auswahllisten in Listboxen oder selten in QuickBrowse Arrays.
Mehrere Dateien, welche 1:n (ein Stammsatz, mehrere Kinddatensätze) verbunden sind würde ich nie in einem Browser anzeigen, sondern kombiniert wie schon vorgeschlagen wurde:
Listbox oder Browser mit Hauptbegriff (z.B. DB1) plus
2. Browser für Kinddatensätze (z.B. DB2) dieser steuert
3. Browser für Kinder der Kinddatensätze (z.B. DB3)
Ändert sich die Position im 1. Browser, (stablecodeblock oder select...), dann wird entweder mit seek oder scope der 2. und daraus dann der 3. positioniert.
Ändert sich die Position nur im 2. Browser, einfach nur den 3. nachziehen.
etc.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
hier mal der (Cl*pper) Code für 2 Browser
gruss by OHR
Jimmy
na klar geht das, du musst bloss den "richtigen" Moment "abwarten".Manfred hat geschrieben: wie löst ihr denn dann das Problem in einem Browsefenster?
Dort kann doch nicht jedesmal ein Dbseek abgeschickt werden,
wenn mehrere "verknüpfte" Tabellen angezeigt werden sollen, oder?
hier mal der (Cl*pper) Code für 2 Browser
Code: Alles auswählen
// set up browse and display it
aoBrowse[1] := ABZU1Browse(ozeile,ospalte,uzeile,uspalte)
DispBrowse(aoBrowse[1])
// set up browse and display it
aoBrowse[2] := ABZU2Browse(ozeile,ospalte,uzeile,uspalte)
aoBrowse[2]:goTop()
DispBrowse(aoBrowse[2])
DISPEND() // end display buffering
nCursSave := SETCURSOR(SC_NONE)
// set browse pointer to first browse defined
nBP := 1
DispBrowse(aoBrowse[nBP])
lMore := .T.
DO WHILE lMore
nKey := 0
DISPBEGIN()
DO WHILE (nKey := INKEY()) == 0
IF aoBrowse[nBP]:stabilize()
EXIT
ENDIF
ENDDO
DISPEND()
IF aoBrowse[nBP]:stable
IF aoBrowse[nBP]:hitTop .OR. aoBrowse[nBP]:hitBottom
TONE(125, 0)
ENDIF
// update other browse screens in case relations are set
* IF !EMPTY(DBRELATION(1))
IF nBP = 1
cREFNO := ARTQUALI->QNUMMER+ARTQUALI->QARTNR
SELECT ABZU
#IFDEF __XPP__
SET SCOPE TO cREFNO
#ELSE
SET FILTER TO ABZU->ABZUREF+ABZU->ABZUNR = cREFNO
#ENDIF
oCol := aoBrowse[2]:getColumn(fix_posi)
oCol:FOOTING := EVAL( TOTAL(ABZU->ABZUMENGE,ABZU->ABZUMODUS='AUS') ,;
{|| ABZU->ABZUREF+ABZU->ABZUNR = cREFNO } ,;
ABZU->ABZUREF+ABZU->ABZUNR = cREFNO )
aoBrowse[2]:setColumn(fix_posi, oCol)
SELECT ARTQUALI
DrawAll(aoBrowse, nBP)
ENDIF
aoBrowse[nBP]:hilite()
nKey := TB_INKEY(300) // max 300 sec
ENDIF
DO CASE // Apply the key to the browse
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
evtl. BUG bei Relation / Child APPEND BLANK
hi,
hat jemand folgende "Construktion" am laufen :
also ich bin in der "Child", welche in Relation ist und versuche
eine leeren Datensatz anzuhängen und es "crasht" ...
geht das nicht ? (hab es noch nicht mit Cl*pper versucht ...)
gruss by OHR
Jimmy
hat jemand folgende "Construktion" am laufen :
Code: Alles auswählen
SELECT 1
USE MAIN
...
SELECT 2
USE CHILD
SET INDEX TO ...
...
SELECT 1
SET RELATION TO MAIN->blabla INTO CHILD
...
SELECT 2
APPEND BLANK
eine leeren Datensatz anzuhängen und es "crasht" ...
geht das nicht ? (hab es noch nicht mit Cl*pper versucht ...)
gruss by OHR
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Hallo Jimmy,
ich meine mich erinnern zu können sowas mal unter VO mit einer selectiven Relation gemacht zu haben. Da war das Problem, dass immer nach dem Append Blank der Datensatz sofort verschwunden ist, da ja der Suchbegriff nicht identisch war. Bei einer 'normalen' Relation dürfte das aber nicht vorkommen.
Ich habe damals die DBF ein 2. Mal ohne Relation geöffnet, append blank und replace Suchbegriff gemacht und wieder geschlossen. Danach die child DBF refreshed und den neuen Satz gespeichert.
ich meine mich erinnern zu können sowas mal unter VO mit einer selectiven Relation gemacht zu haben. Da war das Problem, dass immer nach dem Append Blank der Datensatz sofort verschwunden ist, da ja der Suchbegriff nicht identisch war. Bei einer 'normalen' Relation dürfte das aber nicht vorkommen.
Ich habe damals die DBF ein 2. Mal ohne Relation geöffnet, append blank und replace Suchbegriff gemacht und wieder geschlossen. Danach die child DBF refreshed und den neuen Satz gespeichert.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
klar kann man eine "workaround" machen, aber wenn es ein
BUG ist muss ich davon ein sample machen und es Alaska
schicken.
also kann jemand unter Xbase++ (v1.9.331ff) an einen "related"
Child eine APPEND BLANK machen ?
gruss by OHR
Jimmy
... aber unter Xbase++ "scheint" das einen Absturz zu geben.brandelh hat geschrieben: ich meine mich erinnern zu können sowas mal unter VO mit einer selectiven Relation gemacht zu haben.
klar kann man eine "workaround" machen, aber wenn es ein
BUG ist muss ich davon ein sample machen und es Alaska
schicken.
also kann jemand unter Xbase++ (v1.9.331ff) an einen "related"
Child eine APPEND BLANK machen ?
gruss by OHR
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
DbRelation()
hi,
weil es wohl zu diesem Thread passt.
Frage : wie bekomme ich raus "wohin" eine Relation führt ?
wie am an dem Beispiel sieht bekomme ich zwar den "Ausdruck" der
Relation aber das "INTO ..." fehlt mir nun ???
Zweck : Save/Restore von kompletter WorkSpaceList
Die "Anzahl" der Relationen, für eine FOR/NEXT, hab ich gefunden. Man
kann dazu DbInfo(DBO_RELATIONS) benutzen. Überhaupt scheinen die
DBO_ die wichtigsten Infos für die DBF´s zu haben.
gruss by OHR
Jimmy
weil es wohl zu diesem Thread passt.
Frage : wie bekomme ich raus "wohin" eine Relation führt ?
Code: Alles auswählen
SET RELATION TO KundNr INTO Kund , ;
TO ArtNr INTO Art
? Alias() // Ergebnis: RECH
? DbRelation(1) // Ergebnis: KundNr
? DbRelation(2) // Ergebnis: ArtikelNr
Relation aber das "INTO ..." fehlt mir nun ???
Zweck : Save/Restore von kompletter WorkSpaceList
Die "Anzahl" der Relationen, für eine FOR/NEXT, hab ich gefunden. Man
kann dazu DbInfo(DBO_RELATIONS) benutzen. Überhaupt scheinen die
DBO_ die wichtigsten Infos für die DBF´s zu haben.
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Hi Jimmy,
es scheint wohl doch Dbrlist() zu sein, was Du suchst?
es scheint wohl doch Dbrlist() zu sein, was Du suchst?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
gegeben :
somit kann man ge"saved" Relationen wiederherstellen.
kann du ja einfach vor dem "restore" die Elemente aus dem Array löschen
gruss by OHR
Jimmy
mit deiner letzten Antwort hast du auch die Lösung für eine eigene FrageManfred hat geschrieben: Kann man eigentlich einzelne Relationen beenden? Ich meine, wenn ich jetzt folgendes habe:
db1 relation in Db2
Db1 relation in Db3
db1 realtion in db4
gegeben :
Code: Alles auswählen
...
FUNCTION ADDRELA()
LOCAL i, iMax := DbInfo(DBO_RELATIONS)
LOCAL RETVAR := {}
FOR i = 1 TO iMax
AADD(RETVAR,{ DBRelation(i),ALIAS(DbRSelect(i)) } )
NEXT
RETURN RETVAR
...
FOR ...
// DBRelation()
cRela := aRela[1]
// DbRSelect()
cChild := aRela[2]
SET RELATION TO &(cRela) INTO &(cChild) ADDITIVE
NEXT
"trennen" musst du auf jeden Fall, aber wenn du die vorher "save"estManfred hat geschrieben: Was ist wenn ich nur noch db3 und db4 benötige, wie bekomme ich die
relation in db2 weg? Alles trennen
kann du ja einfach vor dem "restore" die Elemente aus dem Array löschen
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Hi,
ich denke einmal, Du meinst jetzt alles löschen und dann den Rest wieder neu verbinden und somit das Gefühl haben, man hätte nur eine Verbindung, oder so entfernt?
Aber wie schon oben von Till erwähnt, scheint es wohl irgendwann auch offiziell zu gehen.
PS: Mittlerweile bin ich sehr weit weg von den Relationen. Ich finde die händische Verbindung über Seek irgendwie interessanter und flexibler, zumindest wenn ich nicht browse, sondern einfach nur so eine Verbindung brauche. Keinen Streß mehr mit Löschen, oder merken von Relationen usw. Da hätte ich auch eher drauf kommen können.
ich denke einmal, Du meinst jetzt alles löschen und dann den Rest wieder neu verbinden und somit das Gefühl haben, man hätte nur eine Verbindung, oder so entfernt?
Aber wie schon oben von Till erwähnt, scheint es wohl irgendwann auch offiziell zu gehen.
PS: Mittlerweile bin ich sehr weit weg von den Relationen. Ich finde die händische Verbindung über Seek irgendwie interessanter und flexibler, zumindest wenn ich nicht browse, sondern einfach nur so eine Verbindung brauche. Keinen Streß mehr mit Löschen, oder merken von Relationen usw. Da hätte ich auch eher drauf kommen können.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Relationen aktualisieren
Dankeschön Jimmy!
Das war für mich sehr hilfreich.
Ich habe den Fall, dass ich eine Tabelle, die 2 Fensterebenen darüber offen ist, zur Auswahl wieder anzeigen muss.
Eine offene Relation war ein Problem...
Dein Code habe ich leicht modifiziert mit DBCLEARRELATION() benutzt um die aktuelle Relation(en) zeitweilig außer Kraft zu setzen (s. unten).
Eine Frage hätte ich, nur aus Neugier: Wirkt DBSETRELATION() "ADDITIVE" oder nicht?
Hätte ich lieber benutzt statt SET RELATION, aber zumindest in meiner Xbase++-Version gibt es nur "lSelektive", kein "lAdditive" als Parameter.
Das war für mich sehr hilfreich.
Ich habe den Fall, dass ich eine Tabelle, die 2 Fensterebenen darüber offen ist, zur Auswahl wieder anzeigen muss.
Eine offene Relation war ein Problem...
Dein Code habe ich leicht modifiziert mit DBCLEARRELATION() benutzt um die aktuelle Relation(en) zeitweilig außer Kraft zu setzen (s. unten).
Eine Frage hätte ich, nur aus Neugier: Wirkt DBSETRELATION() "ADDITIVE" oder nicht?
Hätte ich lieber benutzt statt SET RELATION, aber zumindest in meiner Xbase++-Version gibt es nur "lSelektive", kein "lAdditive" als Parameter.
Code: Alles auswählen
FUNC SaveRelations()
// Save and clear relations for the current work-area
LOCAL i, iMax:=DbInfo(DBO_RELATIONS), aRelations:={}
FOR i = 1 TO iMax
AADD(aRelations, {ALIAS(DbRSelect(i)), DBRelation(i)})
NEXT
DBCLEARRELATION()
RETURN aRelations
***************
PROC RestoreRelations(aRelations)
// Clear and restore relations for the current work-area
LOCAL i, iMax:=Len(aRelations), cAlias:="", cRelation:=""
DBCLEARRELATION()
FOR i = 1 TO iMax
cAlias := aRelations[i][1]
cRelation := aRelations[i][2]
SET RELATION TO &(cRelation) INTO &(cAlias) ADDITIVE
NEXT
RETURN
Viele Grüße,
David
David
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Re: Relationen aktualisieren
Hi David,
soweit ich weiß, geht (immer noch) nur eine Relation. Etwas dazu addieren klappt nicht. Soll aber auf der Agenda von Alaska stehen. irgendwann mal.
Ich hoffe wir meinen beide das gleiche...
soweit ich weiß, geht (immer noch) nur eine Relation. Etwas dazu addieren klappt nicht. Soll aber auf der Agenda von Alaska stehen. irgendwann mal.
Ich hoffe wir meinen beide das gleiche...
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Relationen aktualisieren
im Help File stehtdtmackenzie hat geschrieben: ↑Di, 23. Okt 2018 16:42 Eine Frage hätte ich, nur aus Neugier: Wirkt DBSETRELATION() "ADDITIVE" oder nicht?
Hätte ich lieber benutzt statt SET RELATION, aber zumindest in meiner Xbase++-Version gibt es nur "lSelektive", kein "lAdditive" als Parameter.
Code: Alles auswählen
SET RELATION TO [<cRelation1> | <xRecordID1> INTO <cAlias1> ;
[TAG <cTag1>] ] ;
[, [TO] <cRelation2> | <xRecordID2> INTO <cAlias2> ;
[TAG <cTag2>]...] ;
[ADDITIVE] [SELECT[IVE]]
gruss by OHR
Jimmy
Jimmy