Relationen aktualisieren
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Relationen aktualisieren
Hi Leute,
mal wieder eine komische Frage:
Ich habe folgende Sache gemacht. 2 DB über Relationen miteinander verbunden, was auch prima klappt. (wäre ja auch der Hammer )
Ich springe in der Vaterbank einen Satz an und Exportiere dann die passenden Sätze aus der Sohndatenbank über DBexport(). Das klappt auch.
Wenn ich in der Vaterdatenbank den gleichen Record sofort wieder anspringe, scheint wohl die Sohndatenbank auf EOF() zu stehen. Also dachte ich mir, die Vaterdatenbank mit einem Skip() zu versehen und danach wieder auf den Record zu springen. Aber es kommt aus der Sohnbank kein Ergebnis. Erst wenn ich einen anderen Record anspringe und dann wieder der vorherigen, dann werden die entsprechenden Daten exportiert.
Ich dachte mit Skip() würde es so machbar sein? Fehlgedacht?
mal wieder eine komische Frage:
Ich habe folgende Sache gemacht. 2 DB über Relationen miteinander verbunden, was auch prima klappt. (wäre ja auch der Hammer )
Ich springe in der Vaterbank einen Satz an und Exportiere dann die passenden Sätze aus der Sohndatenbank über DBexport(). Das klappt auch.
Wenn ich in der Vaterdatenbank den gleichen Record sofort wieder anspringe, scheint wohl die Sohndatenbank auf EOF() zu stehen. Also dachte ich mir, die Vaterdatenbank mit einem Skip() zu versehen und danach wieder auf den Record zu springen. Aber es kommt aus der Sohnbank kein Ergebnis. Erst wenn ich einen anderen Record anspringe und dann wieder der vorherigen, dann werden die entsprechenden Daten exportiert.
Ich dachte mit Skip() würde es so machbar sein? Fehlgedacht?
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
em ... verwendest du "<lRest>" bei DbEport ?Manfred hat geschrieben:Ich springe in der Vaterbank einen Satz an und Exportiere dann die passenden Sätze aus der Sohndatenbank über DBexport().
( The default value is .F. (false), indicating that all records are exported. )
aber nur wenn du per DbExport "<lRest>" nichts gesetzt hastWenn ich in der Vaterdatenbank den gleichen Record sofort wieder anspringe, scheint wohl die Sohndatenbank auf EOF() zu stehen.
hm ... meinst du Skip(0), anderfalls würdest du ja immer einen anderenAlso dachte ich mir, die Vaterdatenbank mit einem Skip() zu versehen und danach wieder auf den Record zu springen. Aber es kommt aus der Sohnbank kein Ergebnis. Erst wenn ich einen anderen Record anspringe und dann wieder der vorherigen, dann werden die entsprechenden Daten exportiert.
Ich dachte mit Skip() würde es so machbar sein? Fehlgedacht?
Datensatz bekommen. ich bin mir nicht sicher ob Skip(0) hier was
bringt, ich würde immer ein SEEK() benutzten den es wäre ja möglich
das der Datensaätz nicht mehr "zur verfügung" steht (wenn du ihn nicht
vorher gespeert hast).
ansonsten wäre kleine sample gut um zu sehen was du gemacht hast.
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Moin Jimmy,
Das ist jetzt eine verkürzte Version. Es klappt alles, nur nicht immer hintereinander mit dem gleichen Vatersatz. Einan anderen Vatersatz kurz angesprungen, (selbst wenn die Liste NICHT damit angezeigt wird), schon wird wieder etwas gefunden. Direkt hintereinander den gleichen DBSEEK() gesucht und es gibt eine leere EXPORT DB.
Ich hoffe es genügt?
Code: Alles auswählen
vater->(DBSEEK(UPPER(name),.T.,"name"))
sohn->(DBEXPORT("ergebnis",,,{|| sohn->id = vater->id}))
vater->(DbSkip())
Ich hoffe es genügt?
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
Manfred hat geschrieben:Moin Jimmy,
Das ist jetzt eine verkürzte Version. Es klappt alles, nur nicht immer hintereinander mit dem gleichen Vatersatz. Einan anderen Vatersatz kurz angesprungen, (selbst wenn die Liste NICHT damit angezeigt wird), schon wird wieder etwas gefunden. Direkt hintereinander den gleichen DBSEEK() gesucht und es gibt eine leere EXPORT DB.Code: Alles auswählen
vater->(DBSEEK(UPPER(name),.T.,"name")) sohn->(DBEXPORT("ergebnis",,,{|| sohn->id = vater->id})) vater->(DbSkip())
Ich hoffe es genügt?
uuiiiiiiiiiii ... welche Xbase++ Version ?
klar sowas darf nicht passieren !!!
ich habe das noch nicht erlebt mit v1.80 / v.19x, vermutlich weil ich
irgendwann von "set relation" auf ein "workaround" mit "scope" um-
gestiegen bin (es gab mal ein "set relation" problem ...)
Code: Alles auswählen
vater->(DBSEEK(UPPER(name),.T.,"name"))
select sohn
set scope "name"
do while !eof()
...
enddo
select vater
"anderen" datensatz befand und auch der "vater" sich bewegte ...
hoffe das es nicht mit der "aktuellen" v1.9x passiert !
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Jimmy,
leider muß ich direkt nach Ostern mit dem Bösen raus: Es ist die "aktuelle" Version 1.9.326
Das mit dem Scope wollte ich auch erst machen, aber auch hier: Ich habe es auf die Schnelle nicht kapiert, wozu das gut ist und wie man es einsetzt.
Jaja ich weiß, ich sollte besser Eier suchen gehen, als zu Programmieren....
Aber es macht doch so einen Spaß....
PS:
Jetzt fällt es mir wie Schuppen aus den Haaren, stimmt, da ist wirklich ne Macke drin. Ich hatte vor ein paar Wochen eine Unstimmigkeit mit Relationen, als ich ein Clipperprogramm umgebaut hatte auf Xbase++. Dort wurde auch nicht richtig aktualisiert. Hm, das geht mal an den Support.....
leider muß ich direkt nach Ostern mit dem Bösen raus: Es ist die "aktuelle" Version 1.9.326
Das mit dem Scope wollte ich auch erst machen, aber auch hier: Ich habe es auf die Schnelle nicht kapiert, wozu das gut ist und wie man es einsetzt.
Jaja ich weiß, ich sollte besser Eier suchen gehen, als zu Programmieren....
Aber es macht doch so einen Spaß....
PS:
Jetzt fällt es mir wie Schuppen aus den Haaren, stimmt, da ist wirklich ne Macke drin. Ich hatte vor ein paar Wochen eine Unstimmigkeit mit Relationen, als ich ein Clipperprogramm umgebaut hatte auf Xbase++. Dort wurde auch nicht richtig aktualisiert. Hm, das geht mal an den Support.....
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo Manfred,
da fällt mir ein ...
Ich würde bei deinem Beispiel eine SELECTIVE Relation durchführen, dann sind im Kinddatensatz nur noch genau die zum Vater gehörenden Datensätze und du brauchst beim Export keine for / while Beschränkungen eingeben, was schneller sein dürfte.
Da fällt mir ein, teste mal ob die Verwendung einer Variablen das Ergebnis ändert:
bzw. auch ganz ohne while codeblock, eventuell kommt auch dieser durcheinander ?
da fällt mir ein ...
Ich würde bei deinem Beispiel eine SELECTIVE Relation durchführen, dann sind im Kinddatensatz nur noch genau die zum Vater gehörenden Datensätze und du brauchst beim Export keine for / while Beschränkungen eingeben, was schneller sein dürfte.
Da fällt mir ein, teste mal ob die Verwendung einer Variablen das Ergebnis ändert:
Code: Alles auswählen
vater->(DBSEEK(UPPER(name),.T.,"name"))
cSuchBeg := vater->id
sohn->(DBEXPORT("ergebnis",,,{|| sohn->id = cSuchBeg}))
vater->(DbGoTop()) // oder auch hier mit mehr Bewegung.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
was mich noch etwas verwirrt, ist folgendes:
Ich mache vorher eine Abfrage, ob die Sohndatei auf EOF() steht. Das steht sie, wenn keine passenden Einträge zur Vaterdatei gefunden werden.
Es wird aber kein EOF() angezeigt, bei nochmaligem Suchen mit dem gleichen Wert.
Ich werde die Routine mal ändern...
was mich noch etwas verwirrt, ist folgendes:
Ich mache vorher eine Abfrage, ob die Sohndatei auf EOF() steht. Das steht sie, wenn keine passenden Einträge zur Vaterdatei gefunden werden.
Es wird aber kein EOF() angezeigt, bei nochmaligem Suchen mit dem gleichen Wert.
Ich werde die Routine mal ändern...
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hm,
ich habe die Sache erweitert und nach dem DBEXPORT() ein sohn->(DBGOTOP()) eingebaut......
Nüscht.
Hm, das sieht verdammt nach Futtsack aus....
ich habe die Sache erweitert und nach dem DBEXPORT() ein sohn->(DBGOTOP()) eingebaut......
Nüscht.
Hm, das sieht verdammt nach Futtsack aus....
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
also ich habe mir meine "set relation" stellen mal genauer angesehen.Manfred hat geschrieben: leider muß ich direkt nach Ostern mit dem Bösen raus: Es ist die "aktuelle" Version 1.9.326
da ich immer auf etwas "eindeutiges" wie z.b. Kundennummer gehe
hab ich immer nur exact einen "Sohn" Treffer.
(z.b. Lieferschein -> Kundennummer -> Kunde )
das sind nun meine Stellen wo ich "mehrere Sohn" Datensätze habe.Das mit dem Scope wollte ich auch erst machen, aber auch hier:
Ich habe es auf die Schnelle nicht kapiert, wozu das gut ist und
wie man es einsetzt.
(Kunden -> Kundennummer -> Rechnungen). Hier hab ich nun SCOPE
auf der "Sohn" Daten.
Code: Alles auswählen
KUNDEN->(DBSEEK(Kundenname))
IF FOUND()
cSuch := KUNDEN->KDNR
SELECT SOHN
SEEK(cSuch)
IF FOUND()
SET SCOPE to cSuch
....
SET SCOPE to
ENDIF
ENDIF
beides funktioniert prima bei mir ! (v1.9.326 / v1.9.330)
gruss by OHR
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Manfred.
Ein SCOPE entspricht weitgehend einem Filter, mit dem großen Unterschied, daß die Bedingung des Scopes eines Indexausdrucks in der zu scopenden (zu filternden) Datei bedarf, wohingegen ein Filter Ausdrücke beliebiger Art zu nutzen in der Lage ist. SCOPES und Relationen entsprechen sich insofern, daß eine Relation ebenfalls eines Indexes bedarf, aber Relationen den "sichtbaren" Bereich der abhängigen Datenbank automatisch einschränken (durch Bewegungen in der "Master"-Datenbank), wohingegen Scopes keine Master-Datenbank benötigen.
SCOPES sind sehr gut z.B. für schnelle Browses von Daten-Untermengen. Wenn Du das klassische Beispiel Auftrag/Auftragspositionen hast, setzt Du in der Positionendatei einfach einen Scope auf die Auftragsnummer:
Gleiches erreicht man natürlich mit einer Relation, aber Scopes haben, wie gesagt, den Vorteil, unabhängig von Master-Datenbanken arbeiten und z.B. auf Benutzereingaben reagieren zu können. Datenbankbewegungen wie beim Filter sind nicht nötig. Scopes und Relationen schränken in einer Datenbank den sichtbaren Bereich der Datensätze ein, Eof() und Bof() feuern quasi "mittendrin".
Ein SCOPE entspricht weitgehend einem Filter, mit dem großen Unterschied, daß die Bedingung des Scopes eines Indexausdrucks in der zu scopenden (zu filternden) Datei bedarf, wohingegen ein Filter Ausdrücke beliebiger Art zu nutzen in der Lage ist. SCOPES und Relationen entsprechen sich insofern, daß eine Relation ebenfalls eines Indexes bedarf, aber Relationen den "sichtbaren" Bereich der abhängigen Datenbank automatisch einschränken (durch Bewegungen in der "Master"-Datenbank), wohingegen Scopes keine Master-Datenbank benötigen.
SCOPES sind sehr gut z.B. für schnelle Browses von Daten-Untermengen. Wenn Du das klassische Beispiel Auftrag/Auftragspositionen hast, setzt Du in der Positionendatei einfach einen Scope auf die Auftragsnummer:
Code: Alles auswählen
DbSelectArea("pos")
DbSetScope(SCOPE_BOTH,auf->auftragsnummer)
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
hier die Antwort vom Alaska Support
-----------------------------------------------------------------
Hallo Herr Kunz,
Ich habe mir inzwischen ein kleines Beispiel geschrieben um
das Problem zu sehen.
Was hier passiert ist eine Optimierung die wir in der Xbase++
runtime gemacht haben um einige PDRs zu schliessen. Im detail
heisst das, das eine client Workarea nicht in jedem Fall synchronisiert
wird. So ist es möglich eine Relation aufzubauen und dann auf
beiden Workareas unabhängig voneinander zu Arbeiten. Es
handelt sich hier also um einen Wunsch unserer Kunden dem
wir nachgekommen sind.
Ich habe diese Fall an die Entwicklung weitergegeben. Es währe
durchaus wünschenswert, wenn ein DbSeek() auf jeden Fall die
Child Areas synchronisiert, auch wenn sich die Schlüssen nicht
geändert haben. Wir müssen das aber noch genauer prüfen.
Mit freundlichen Grüssen,
Andreas Herdt
Alaska Technical Support
hier die Antwort vom Alaska Support
-----------------------------------------------------------------
Hallo Herr Kunz,
Ich habe mir inzwischen ein kleines Beispiel geschrieben um
das Problem zu sehen.
Was hier passiert ist eine Optimierung die wir in der Xbase++
runtime gemacht haben um einige PDRs zu schliessen. Im detail
heisst das, das eine client Workarea nicht in jedem Fall synchronisiert
wird. So ist es möglich eine Relation aufzubauen und dann auf
beiden Workareas unabhängig voneinander zu Arbeiten. Es
handelt sich hier also um einen Wunsch unserer Kunden dem
wir nachgekommen sind.
Ich habe diese Fall an die Entwicklung weitergegeben. Es währe
durchaus wünschenswert, wenn ein DbSeek() auf jeden Fall die
Child Areas synchronisiert, auch wenn sich die Schlüssen nicht
geändert haben. Wir müssen das aber noch genauer prüfen.
Mit freundlichen Grüssen,
Andreas Herdt
Alaska Technical Support
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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
wann kam denn die Antwort? Ich hoffe mal, heute. Nicht, dass sich die Auslieferung jetzt noch weiter verzögert...
Obwohl - dann bekommen wir die 1.9 ja vielleicht doch auf der DevCon in die Hand
Na mal schauen
Viele Grüße,
Martin
wann kam denn die Antwort? Ich hoffe mal, heute. Nicht, dass sich die Auslieferung jetzt noch weiter verzögert...
Obwohl - dann bekommen wir die 1.9 ja vielleicht doch auf der DevCon in die Hand
Na mal schauen
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin
heute um 10:30 war sie in meinem Postfach. Ich lese da aber nicht draus, das die sich damit sofort beschäftigen wollen....
heute um 10:30 war sie in meinem Postfach. Ich lese da aber nicht draus, das die sich damit sofort beschäftigen wollen....
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Also wenn er meinen PDR anspricht, so wollte ich lediglich, dass ein RLOCK() im Stammdatensatz, KEINE Nachpositionierung im Childsatz nachsich zieht. Da diese dann immer auf den ersten Datensatz zeigt, was meist falsch wäre.So ist es möglich eine Relation aufzubauen und dann auf
beiden Workareas unabhängig voneinander zu Arbeiten. Es
handelt sich hier also um einen Wunsch unserer Kunden dem
wir nachgekommen sind.
Dass ein DBSEEK() nicht nachpositioniert kann niemand gewünscht haben.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
ja, was soll ich dazu sagen. Ich war bisher immer der Meinung, das man trotzdem in beiden Workareas hin und herspringen kann. Die Relation wird doch angeblich immer erst wieder aktualisiert, wenn auf die Sohndatei zugegriffen wird und nicht schon vorher. So habe ich es jedenfalls gelesen. Aus Perfomancegründen.
ja, was soll ich dazu sagen. Ich war bisher immer der Meinung, das man trotzdem in beiden Workareas hin und herspringen kann. Die Relation wird doch angeblich immer erst wieder aktualisiert, wenn auf die Sohndatei zugegriffen wird und nicht schon vorher. So habe ich es jedenfalls gelesen. Aus Perfomancegründen.
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
na toll, einen BUG mit einem workaround zu behebenManfred hat geschrieben: Was hier passiert ist eine Optimierung die wir in der Xbase++
runtime gemacht haben um einige PDRs zu schliessen.
dann frag ich mich wofür ich dann noch eine "Set Relation" braucheIm detail heisst das, das eine client Workarea nicht in jedem Fall
synchronisiert wird. So ist es möglich eine Relation aufzubauen
und dann auf beiden Workareas unabhängig voneinander zu Arbeiten.
das ist ja sehr nett von den Alaska Leuten, aber ist das auchEs handelt sich hier also um einen Wunsch unserer Kunden dem
wir nachgekommen sind.
Cl*pper compatible ?
gut das ich mich seit dem ersten "Set Relation" BUG bei 1:N aufIch habe diese Fall an die Entwicklung weitergegeben. Es währe
durchaus wünschenswert, wenn ein DbSeek() auf jeden Fall die
Child Areas synchronisiert, auch wenn sich die Schlüssen nicht
geändert haben. Wir müssen das aber noch genauer prüfen.
SCOPE in der Childarea umgestellt habe ...
gruss by OHR
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Das von mir monierte alte Verhalten war nicht clipper compatibel.das ist ja sehr nett von den Alaska Leuten, aber ist das auch
Cl*pper compatible ?
Ob die Verbesserung eine Verschlimmerung ist kann ich mangels XPP Version 1.9.xxx nicht beurteilen. Offensichtlich hat man in der alten einen RLOCK() mit einem internen DBSKIP(0) gekoppelt, welches dann aber die Clientdatenbank auf den ersten Satz zurückgesetzt hat. Wenn man das nicht weiß und eine alte Clipperanwendung umstellt, überschreibt man immer den ersten Satz mit den falschen Daten. Das hatte ich - zu spät - bemerkt und moniert.
Ein RLOCK() hat keine Satzbewegung auszulösen !!!
Wenn man beim Verbessern den DBSKIP(0) und SEEK() bei gleichem Suchbegriff zahnlos gemacht hat, ist das aus meiner Sicht ebenfalls ein Fehler.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Noch was in Sachen Relationen.
Ich weiß nicht, ob es bekannt ist, oder ob es nachvollziehbar oder sonst was ist, ich wußte es bis gerade noch nicht:
Ich habe gerade aus Versehen versucht eine Relation zu bilden, auf eine DB, die ich vorher durch Pennerei auf SetOrdFocus(0) gesetzt hatte. Der Index wurde also abgeschaltet und es wurde auf RECNO() gemacht.
Das hatte aber zur Folge, als ich die Relation auf den von mir vermeintlich aktivierten Index gesetzt habe, wurde die Kind-DB geschlossen und es erschien beim Aufruf der DB mit Angabe eines Feldes eine Fehlermeldung.
Im VX Debugger sah es folgendermaßen aus:
Ich ging über die Relation drüber und ließ mir das Feld anzeigen. Das ging nicht, weil die DB geschlossen war. Nachdem ich aber eine kurze Zeit gewartet hatte, stand die Kind DB wieder zur Verfügung und ich konnte im Debugger das Feld der DB wieder anzeigen.
Ist das korrekt so? Ich glaube nicht.
Ich weiß nicht, ob es bekannt ist, oder ob es nachvollziehbar oder sonst was ist, ich wußte es bis gerade noch nicht:
Ich habe gerade aus Versehen versucht eine Relation zu bilden, auf eine DB, die ich vorher durch Pennerei auf SetOrdFocus(0) gesetzt hatte. Der Index wurde also abgeschaltet und es wurde auf RECNO() gemacht.
Das hatte aber zur Folge, als ich die Relation auf den von mir vermeintlich aktivierten Index gesetzt habe, wurde die Kind-DB geschlossen und es erschien beim Aufruf der DB mit Angabe eines Feldes eine Fehlermeldung.
Im VX Debugger sah es folgendermaßen aus:
Ich ging über die Relation drüber und ließ mir das Feld anzeigen. Das ging nicht, weil die DB geschlossen war. Nachdem ich aber eine kurze Zeit gewartet hatte, stand die Kind DB wieder zur Verfügung und ich konnte im Debugger das Feld der DB wieder anzeigen.
Ist das korrekt so? Ich glaube nicht.
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!!
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo Manfred,
ich weiß nur dass es erlaubt ist eine Relation auf die Satznummer zu setzen und es ist erlaubt, dass die Stammdatei überhaupt keinen (aktiven) Index hat. Den brauchen nur die Kinddateien.
Das Schließen der Datei, davon habe ich noch nie gehört.
Allerdings, wie schon mehrfach bemerkt, verwende ich Relationen sehr selten - und nach den Datenverlusten (Rlock auf Stammsatz ändert passenden Kindsatz) halte ich davon noch weniger.
VX-Debugger - ich nutze noch 1.82.294 inkl. Debugger ...
ich weiß nur dass es erlaubt ist eine Relation auf die Satznummer zu setzen und es ist erlaubt, dass die Stammdatei überhaupt keinen (aktiven) Index hat. Den brauchen nur die Kinddateien.
Das Schließen der Datei, davon habe ich noch nie gehört.
Allerdings, wie schon mehrfach bemerkt, verwende ich Relationen sehr selten - und nach den Datenverlusten (Rlock auf Stammsatz ändert passenden Kindsatz) halte ich davon noch weniger.
VX-Debugger - ich nutze noch 1.82.294 inkl. Debugger ...
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
wenn ich sonst schon nichts gescheites von mir gebe, dann wollte ich wenigstens ein wenig aus der Fehlerkiste plaudern. Immerhin habe ich an dem Sch....fehler jetzt 15 Minuten gesessen, bis ich endlich auf diesen Futtsack gestoßen bin.
Ich mal wie immer an den Support schreiben. Die sollen sich bloß nicht langweilen.
wenn ich sonst schon nichts gescheites von mir gebe, dann wollte ich wenigstens ein wenig aus der Fehlerkiste plaudern. Immerhin habe ich an dem Sch....fehler jetzt 15 Minuten gesessen, bis ich endlich auf diesen Futtsack gestoßen bin.
Ich mal wie immer an den Support schreiben. Die sollen sich bloß nicht langweilen.
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Eine kurze Verbindung zu diesem Thread:
http://www.xbaseforum.de/viewtopic.php?p=3325#3325
Die Relationen sind zur Zeit absoluter Mist.
folgende Relationen:
DB1 -> DB2 -> DB3
DB1 wurde nacheinander mit der gleichen RECNO() angesprungen. DB3 wollte ich eine Änderung wegschreiben, da kam der Fehler 128 über den Debugger. Das Programm verabschiedet sich ohne eine Meldung. DB3 stand auf irgendwas, aber nicht mehr auf dem Satz, auf dem sie vorher stand. Sobald ich im Debugger die DB3 mit RECNO() aufrufe, stirbt das Programm
Ich habe die gleiche Sache über DSEEK() nachgebildet und das klappte.
Tolle Wurst.
http://www.xbaseforum.de/viewtopic.php?p=3325#3325
Die Relationen sind zur Zeit absoluter Mist.
folgende Relationen:
DB1 -> DB2 -> DB3
DB1 wurde nacheinander mit der gleichen RECNO() angesprungen. DB3 wollte ich eine Änderung wegschreiben, da kam der Fehler 128 über den Debugger. Das Programm verabschiedet sich ohne eine Meldung. DB3 stand auf irgendwas, aber nicht mehr auf dem Satz, auf dem sie vorher stand. Sobald ich im Debugger die DB3 mit RECNO() aufrufe, stirbt das Programm
Ich habe die gleiche Sache über DSEEK() nachgebildet und das klappte.
Tolle Wurst.
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
obwohl wir uns hier im Moment alle einig sind, das es mit den Relationen etwas hapert, hier nochmal eine Frage:
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
Was ist wenn ich nur noch db3 und db4 benötige, wie bekomme ich die relation in db2 weg? Alles trennen und dann neu auf db3 und db4 aufbauen? Ich habe keine Erklärung dazu in der Anleitung gefunden und meine Versuche sind auch fehlgeschlagen.
obwohl wir uns hier im Moment alle einig sind, das es mit den Relationen etwas hapert, hier nochmal eine Frage:
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
Was ist wenn ich nur noch db3 und db4 benötige, wie bekomme ich die relation in db2 weg? Alles trennen und dann neu auf db3 und db4 aufbauen? Ich habe keine Erklärung dazu in der Anleitung gefunden und meine Versuche sind auch fehlgeschlagen.
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Manfred,
ich fürchte, hier fehlt uns tatsächlich etwas ;-(. Du hast völlig Recht:
was man sukzessive aufbauen kann sollte man auch sukzessive
wieder abbauen können!
Das Merkmal befindet sich bereits auf der "Wishlist". Im Augenblick
gibt es leider keine andere Möglichkeit, als schon vorhandene
Relationen nach einem DbClearRelation() wieder einzeln neu
zu setzen.
Schöne Grüße,
Till Warweg
Alaska Technical Support
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!!
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
so einfach gebe ich mich nicht geschlagen:
Ich grübel jetzt schon die ganze Zeit darüber, wenn hier etliche sind, die Relationen meiden und es mit Scope oder Dbseek regeln, 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?
so einfach gebe ich mich nicht geschlagen:
Ich grübel jetzt schon die ganze Zeit darüber, wenn hier etliche sind, die Relationen meiden und es mit Scope oder Dbseek regeln, 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?
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!!