Browse Datenquelle ändern [ERLEDIGT]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
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]

Beitrag von Manfred »

Moin,

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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

Hallo Manfred,
probiere es doch einfach aus. Wenn, dann solltest Du danach sicherlich auch ein :configure() auf Dein Browse machen!

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

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?
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
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

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

Hm,

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
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.
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!!
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
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

Beitrag von Herbert »

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.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

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?
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!!
Paul
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Mi, 21. Mär 2007 15:22
Wohnort: 1230 Wien

Re: Browse Datenquelle ändern

Beitrag von Paul »

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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

Beitrag von Tom »

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:

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
Benutzeravatar
Manfred
Foren-Administrator
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

Beitrag von Manfred »

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.
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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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]

Beitrag von Tom »

Hallo, Manfred.

Freut mich, dass es funktioniert. Und danke für die Granate. :D

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
Benutzeravatar
Manfred
Foren-Administrator
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]

Beitrag von Manfred »

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)
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!!
Antworten