Browse Datenquelle ändern [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Browse Datenquelle ändern [ERLEDIGT]
Moin,
kann man eigentlich die Datenquelle für ein Browse nachträglich ändern?
kann man eigentlich die Datenquelle für ein Browse nachträglich ändern?
Zuletzt geändert von Manfred am Mo, 11. Jan 2010 11:16, insgesamt 1-mal geändert.
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: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Browse Datenquelle ändern
Hallo Manfred,
probiere es doch einfach aus. Wenn, dann solltest Du danach sicherlich auch ein :configure() auf Dein Browse machen!
Viele Grüße,
Martin
probiere es doch einfach aus. Wenn, dann solltest Du danach sicherlich auch ein :configure() auf Dein Browse machen!
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: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse Datenquelle ändern
Moin Martin,
ich wußte, dass es wieder etwas komplizierter wird.
Also, ich benutze ja express++ und das arbeitet ja intern mit xbase++ pur. Mein Problem ist, dass bei der Erzeugung eines Browse eine Datenquelle angegeben wird, die wohl als "Master" gilt. Bei der Erzeugung der Spalten, werden die Felder einer Db angegeben. Das ist auch ok so. Jetzt habe ich nur das Problem, dass das browse aus 3 DB zusammengebaut wird. Es ist aber möglich jede einzelne Spalte zu sortieren per Mausklick im Header.
Die 3 Db sind über Relationen verbunden, die sich dann, wie der Index, jedesmal ändert. Was zur Folge hat, dass die erste Spalte, (aus der DB, die beim Browse zuerst angegeben wird) immer richtig angezeigt wird, aber die jeweils anderen Db Spalten nicht mehr passen. Entweder sind sie leer, oder es wird immer nur der aktuelle Satz angezeigt, auf dem der Zeiger steht.
Ich habe keinen Plan, wie man den Browser nachträglich dazu überreden kann, jetzt in der anderen, neu sortierten und aktuellen Db zu skippen, weil ich überhaupt nicht weiß, wie dem Browser überhaupt beigebracht wird, welche DB er denn skippen soll.
Deshalb meine Frage, ob das überhaupt möglich ist. Müßte doch eigentlich der Fall sein, wenn ich ein relationales DB System habe, oder?
ich wußte, dass es wieder etwas komplizierter wird.
Also, ich benutze ja express++ und das arbeitet ja intern mit xbase++ pur. Mein Problem ist, dass bei der Erzeugung eines Browse eine Datenquelle angegeben wird, die wohl als "Master" gilt. Bei der Erzeugung der Spalten, werden die Felder einer Db angegeben. Das ist auch ok so. Jetzt habe ich nur das Problem, dass das browse aus 3 DB zusammengebaut wird. Es ist aber möglich jede einzelne Spalte zu sortieren per Mausklick im Header.
Die 3 Db sind über Relationen verbunden, die sich dann, wie der Index, jedesmal ändert. Was zur Folge hat, dass die erste Spalte, (aus der DB, die beim Browse zuerst angegeben wird) immer richtig angezeigt wird, aber die jeweils anderen Db Spalten nicht mehr passen. Entweder sind sie leer, oder es wird immer nur der aktuelle Satz angezeigt, auf dem der Zeiger steht.
Ich habe keinen Plan, wie man den Browser nachträglich dazu überreden kann, jetzt in der anderen, neu sortierten und aktuellen Db zu skippen, weil ich überhaupt nicht weiß, wie dem Browser überhaupt beigebracht wird, welche DB er denn skippen soll.
Deshalb meine Frage, ob das überhaupt möglich ist. Müßte doch eigentlich der Fall sein, wenn ich ein relationales DB System habe, 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!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Browse Datenquelle ändern
Yup.
Nun - Du willst in einem Browse x Datenbanken darstellen. Jede Datenbank in einer eigenen Column. Richtig?
Hm. Wie passen denn die einzelnen Rows zusammen? Ist das nicht im Prinzip das gleiche Problem, das Robin aktuell mit seiner Relation hat und dem Indexausdruck, der über zwei Datenbanken gehen soll?
Wie sieht denn Dein Index aus?
Hast Du es schon mal mit einem Array als Datenquelle versucht?
Ist Dein Browse nur zum Anzeigen da, oder soll da auch was drin editiert werden können?
Viele Grüße,
Martin
Nun - Du willst in einem Browse x Datenbanken darstellen. Jede Datenbank in einer eigenen Column. Richtig?
Hm. Wie passen denn die einzelnen Rows zusammen? Ist das nicht im Prinzip das gleiche Problem, das Robin aktuell mit seiner Relation hat und dem Indexausdruck, der über zwei Datenbanken gehen soll?
Wie sieht denn Dein Index aus?
Hast Du es schon mal mit einem Array als Datenquelle versucht?
Ist Dein Browse nur zum Anzeigen da, oder soll da auch was drin editiert werden können?
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: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse Datenquelle ändern
Hm,
das wird wieder etwas länger, wie ich sehe.....
Also,
Da db1 db2 führt, wird Db3 von db2 mitgeführt. Feld1 aus db1 ist indiziert.
So, jetzt wird gewechselt. Die Spalten bleiben. Aber die Relationen werden aufgelöst und wie folgt geändert
Relation db2 in Db1 und Db3
db2->feld1 wird der führende Index
Ich mache ein browse:refreshall()
Die 1.Spalte aus Db1 wird weiterhin richtig angezeigt, aber die anderen nicht mehr.
Array geht nicht, sind 2 DB in denen je fast 1 Mio Sätze stehen. Der Browse wird benötigt um in den Db zu skippen und gleichzeitig oberhalb am Bildschirm in einer Maske die verknüpften Daten anzeigt zum ansehen, oder ändern.
das wird wieder etwas länger, wie ich sehe.....
Also,
Code: Alles auswählen
use db1
use db2
use db3
Relation von db1 in Db2 über ID
Relation von db2 in db3 über ID
Browse db1
Spalte1 db1->feld1
Spalte2 db2->feld1
Spalte3 db2->feld2
Spalte3 db3->feld1
Spalte4 db3->feld2
So, jetzt wird gewechselt. Die Spalten bleiben. Aber die Relationen werden aufgelöst und wie folgt geändert
Relation db2 in Db1 und Db3
db2->feld1 wird der führende Index
Ich mache ein browse:refreshall()
Die 1.Spalte aus Db1 wird weiterhin richtig angezeigt, aber die anderen nicht mehr.
Array geht nicht, sind 2 DB in denen je fast 1 Mio Sätze stehen. Der Browse wird benötigt um in den Db zu skippen und gleichzeitig oberhalb am Bildschirm in einer Maske die verknüpften Daten anzeigt zum ansehen, oder ä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!!
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Browse Datenquelle ändern
Was dich auch immer bewegt, derartige Mutationen vorzunehmen....
Du änderst alle Indexe und rufst anschliessend auf das Browseobjekt einen RefreshAll() auf.
Aber eigentlich ist das keine Aufgabe für einen Browse.
Entweder du machst 2 Browse-Objekte
eines für die erste Spalte alleine und baust dann im 2. Browseobjekt (Spalten 2 bis n) alles neu auf
oder du machst das Ganze mit z.B. Listboxen (je spalte eine) und baust diese jeweils neu auf.
Du änderst alle Indexe und rufst anschliessend auf das Browseobjekt einen RefreshAll() auf.
Aber eigentlich ist das keine Aufgabe für einen Browse.
Entweder du machst 2 Browse-Objekte
eines für die erste Spalte alleine und baust dann im 2. Browseobjekt (Spalten 2 bis n) alles neu auf
oder du machst das Ganze mit z.B. Listboxen (je spalte eine) und baust diese jeweils neu auf.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse Datenquelle ändern
Wieso Mutationen?
Der Browser an sich kann es ja, solange man den Index nicht wechselt. Aber irgendwie muß dem Browser ja zu Anfang klar gemacht werden, welche Datenquelle er hat. Wie das jetzt wirklich von statten geht, habe ich noch nicht verstanden. Aber es muß doch irgendwie möglich sein, dem Browser zu sagen, es hat sich jetzt was geändert. Das man dann danach auch irgendwas anleiern muß, oder müßte um es an den Bildschirm zu bringen, ist mir auch verständlich. Meine Frage ist halt, geht sowas und wenn ja, wie kann ich die Quelle ändern. Mit einem :configure() sollte der Browser auch das neue anzeigen können. Nur, wo wird wie und womit, oder worin die Datenquelle übergeben, die ich dann ändern könnte. Bekommt der Browser das, oder die Columns, oder wer? Ist es ein :datalink? Wenn ja, wie müßte ich es dann machen?
Der Browser an sich kann es ja, solange man den Index nicht wechselt. Aber irgendwie muß dem Browser ja zu Anfang klar gemacht werden, welche Datenquelle er hat. Wie das jetzt wirklich von statten geht, habe ich noch nicht verstanden. Aber es muß doch irgendwie möglich sein, dem Browser zu sagen, es hat sich jetzt was geändert. Das man dann danach auch irgendwas anleiern muß, oder müßte um es an den Bildschirm zu bringen, ist mir auch verständlich. Meine Frage ist halt, geht sowas und wenn ja, wie kann ich die Quelle ändern. Mit einem :configure() sollte der Browser auch das neue anzeigen können. Nur, wo wird wie und womit, oder worin die Datenquelle übergeben, die ich dann ändern könnte. Bekommt der Browser das, oder die Columns, oder wer? Ist es ein :datalink? Wenn ja, wie müßte ich es dann machen?
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!!
Re: Browse Datenquelle ändern
Hallo Manfred,
mit Express kannst du in DCBROWSECOL auch eine funktion hinterlegen, indem du
zB.: DCBROWSECOL {||func_column2()} WIDTH 10 Header ... aufrufst und dann über die function das reinstellst was du brauchst.
Klaro funktioniert das aber nur, wenn wie vorher schon erwähnt wurde, eine Relation zu den anderen Datenbanken gesetzt wurde.
Gruss aus wien,
Paul
mit Express kannst du in DCBROWSECOL auch eine funktion hinterlegen, indem du
zB.: DCBROWSECOL {||func_column2()} WIDTH 10 Header ... aufrufst und dann über die function das reinstellst was du brauchst.
Klaro funktioniert das aber nur, wenn wie vorher schon erwähnt wurde, eine Relation zu den anderen Datenbanken gesetzt wurde.
Gruss aus wien,
Paul
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse Datenquelle ändern
Hallo, Manfred.
Hier ein kleines Beispiel, das zwei Tabellen anzeigt, die jeweils die Felder NAME und VORNAME enthalten. Ein Klick auf den Button "Switch" wechselt die Datenquelle:
Hier ein kleines Beispiel, das zwei Tabellen anzeigt, die jeweils die Felder NAME und VORNAME enthalten. Ein Klick auf den Button "Switch" wechselt die Datenquelle:
Code: Alles auswählen
#pragma library("dclipx.lib")
#include 'dcdialog.ch'
FUNCTION MAIN()
LOCAL GetList := {}
USE datei1 ALIAS db1 NEW // enthält Felder NAME, VORNAME
USE datei2 ALIAS db2 NEW // enthält auch diese Felder
cAlias := 'db1'
@ 1,1 DCBROWSE oBrowse ALIAS (cAlias) SIZE 80,25
DCBROWSECOL FIELD (cAlias)->name PARENT oBrowse width 40
DCBROWSECOL FIELD (cAlias)->vorname PARENT oBrowse width 40
@ 27,1 DCPUSHBUTTON CAPTION 'Switch' SIZE 7,1 ACTION {||cAlias := IF(cAlias='db1','db2','db1'),;
oBrowse:DataSource := cAlias,;
oBrowse:DataLink := cAlias,;
oBrowse:RefreshAll(),SetAppFocus(oBrowse)}
DCREAD GUI TITLE 'DCBROWSE TEST' FIT ADDBUTTONS
RETURN NIL
PROC APPSYS ; RETURN
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse Datenquelle ändern
Ich werde bekloppt,
genau das scheint es zu sein.
Tom, Du bist echt ne Granate.
Aber woher kennst Du die Sache mit dem oBrowse:datasource? Das habe ich nirgends gefunden.
genau das scheint es zu sein.
Tom, Du bist echt ne Granate.
Aber woher kennst Du die Sache mit dem oBrowse:datasource? Das habe ich nirgends gefunden.
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!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Browse Datenquelle ändern [ERLEDIGT]
Hallo, Manfred.
Freut mich, dass es funktioniert. Und danke für die Granate.
Ich habe mich beizeiten etwas intensiver mit den Hintergründen und Rogers Vorgehensweise befasst. Ansonsten ist es aber auch eigentlich ganz einfach, derlei herauszubekommen. Das Mittel der Wahl heißt "DC_InspectObject()". Da ich die Browse-Variable im vorliegenden Fall nicht deklariert habe, war sie PRIVATE. Durch den Aufruf von DC_Dot() (Alt-D) kann ich dort "DC_InspectObject(oBrowse)" aufrufen, das ginge aber auch durch einen Button mit einem LOCAL-Objekt. Dort sehe ich dann in der oberen Liste alle iVars und in der unteren alle Methoden. Die musste ich nur nach dem Alias durchstöbern. Und iVars kann man zur Laufzeit ändern. Das ist alles. Irgendwo musste es ja einen Verweis auf den Alias geben. Mit Codeblöcken funktioniert das nämlich nicht (also DCBROWSE ... ALIAS {||cAlias}).
Wenn man mit DCBROWSE ein Array braust, heißt die Wechselfunktion "DC_GetBrowArray()".
Freut mich, dass es funktioniert. Und danke für die Granate.
Ich habe mich beizeiten etwas intensiver mit den Hintergründen und Rogers Vorgehensweise befasst. Ansonsten ist es aber auch eigentlich ganz einfach, derlei herauszubekommen. Das Mittel der Wahl heißt "DC_InspectObject()". Da ich die Browse-Variable im vorliegenden Fall nicht deklariert habe, war sie PRIVATE. Durch den Aufruf von DC_Dot() (Alt-D) kann ich dort "DC_InspectObject(oBrowse)" aufrufen, das ginge aber auch durch einen Button mit einem LOCAL-Objekt. Dort sehe ich dann in der oberen Liste alle iVars und in der unteren alle Methoden. Die musste ich nur nach dem Alias durchstöbern. Und iVars kann man zur Laufzeit ändern. Das ist alles. Irgendwo musste es ja einen Verweis auf den Alias geben. Mit Codeblöcken funktioniert das nämlich nicht (also DCBROWSE ... ALIAS {||cAlias}).
Wenn man mit DCBROWSE ein Array braust, heißt die Wechselfunktion "DC_GetBrowArray()".
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Browse Datenquelle ändern [ERLEDIGT]
OK,
1) ich habe in der Hilfedatei von Xbase++ gesucht.
2) ich habe in der Hilfedatei von express++ gesucht
3) ich habe mir etliches in den Objekten im Debugger angesehen, aber
4) dazu fehlt mir aber einfach noch das nötige Wissen um da durchzublicken.
Deshalb hat auch das ganze Tracen während der Browseerzeugung nichts genutzt, weil eben halt das fundierte Wissen darüber fehlt und ich überhaupt nicht wußte, wo ich genau nachsehen mußte.
Tja, da liegen halt die Unterschiede (Aber ich arbeite intensiv daran, diese kleiner zu bekommen)
1) ich habe in der Hilfedatei von Xbase++ gesucht.
2) ich habe in der Hilfedatei von express++ gesucht
3) ich habe mir etliches in den Objekten im Debugger angesehen, aber
4) dazu fehlt mir aber einfach noch das nötige Wissen um da durchzublicken.
Deshalb hat auch das ganze Tracen während der Browseerzeugung nichts genutzt, weil eben halt das fundierte Wissen darüber fehlt und ich überhaupt nicht wußte, wo ich genau nachsehen mußte.
Tja, da liegen halt die Unterschiede (Aber ich arbeite intensiv daran, diese kleiner zu bekommen)
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!!