DCBROWSE und DataObject [ERLEDIGT]

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Jan »

ich hatte immer Laufzeitfehler, wenn ich ein leeres Array browsen wollte (natürlich original Xbase++, kein dc_irgendwas). Deswegen lege ich für solche Fälle dann immer einen leeren Satz an mit der Meldung, das es da nichts anzuzeigen gäbe. Zwei Fliegen mit einer Klappe: Kein Laufzeitfehler, Info an den Kunden warum da nichts im Browse steht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Ich fange bei allen typenbezogenen Spaltenformatierungen (numerisch, bool, Datum) mit IF(Len(oBrowse:DataSource)>0,..,..) ab, ob das Array leer ist, wenn das geschehen kann. Beziehungsweise mit einer Browse-Methode, die das für mich erledigt. DC_GetColArray() liefert nämlich bedauerlicherweise einen leeren String zurück, wenn eine Zeile leer ist.

Code: Alles auswählen

DCBROWSECOL DATA {||IF(Len(oBrowse:DataSource)>0,<FormatierteZelle>,'')} HEADER 'Blablubb' PARENT oBrowse ...
Das mit den leeren Einträgen kann man natürlich auch machen, das kommt auf dasselbe hinaus.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

war das jetzt auf den Filter bezogen?
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Das kommt darauf an. Wenn Deine Datencodeblöcke für die Spalten bestimmte Datentypen erwarten, kann es zu Problemen kommen, wenn das Array leer ist und der Zugriff auf die Datenquelle deshalb standardmäßig nur noch mit leeren Strings antwortet.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

hm, ich habe direkt bei der Erstellung des DCBROWSE einen Codeblock für Filter erstellt, der greift. Dann habe ich den wieder auf .T. geändert und bei der Filtersetzung genau den Codeblock wieder genommen. Und dann klappt es nicht. Also mache ich irgendwas falsch, wenn der Filter geändert wird und DCBROWSE schon erstellt und im Einsatz ist. Nur das finde ich nicht. Lassen wir mal alles andere außen vor. Das dürfte es nicht sein. Vom Grund her klappt es ja nur nicht , wenn ich den Filter neu setze. Selbst wenn ich ihn wieder auf .T. zurücksetze, geht nichts mehr. ich kann danach weder scrollen noch sonstwas tun in dem Browser.
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Nicht den Filter ändern, nur seine Bedingungen!
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

och möönsch Tom, ja sicher die Bedingung. Also den Inhalt des Codeblocks. Oder anders gesagt, worauf wie abgefragt werden soll um .T. oder .F. zu erhalten
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

So, ein Problem ist schonmal behoben.
Der Browser reagiert jetzt wieder nach dem neuen Setzen/ändern der Filterbedingung. (Ich möchte darauf nicht näher eingehen. Das war so blöde....)Aber der Filter wird trotzdem nicht übernommen.
Aber wer weiß welcher Unsinn da hinter steckt. Ich habe jetzt einmal express++ mit DEBUG Code versehen. Hat wer eine Ahnung wo ich erkennen kann, wie sich der Filter verhät, bzw. was da zur zeit der Aktualisierung drin steht? Vieleicht ist es ja doch anders als ich denke/dachte?
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Ich würde davon abraten, den Inhalt des Codeblocks zu ändern. Der Codeblock wird beim Erzeugen des Browses einer iVar zugewiesen, also kopiert.

Code: Alles auswählen

bBlock := {|a|Ia[17]} // a[17] ist logisch, etwa eine Markierung

DCBROWSE oBROWSE ... FILTER bBlock
und dann irgendwo

Code: Alles auswählen

bBlock := {|a|a[18]} // a[18] ist auch logisch
hier dürfte sich überhaupt nichts tun. Wenn Du also die Grundlage des Filters ändern wollen würdest, müsstest Du so vorgehen:

Code: Alles auswählen

nFilterCol := 17
bBlock := {|a|a[nFilterCol]}
DCBROWSE oBROWSE ... FILTER bBlock
und dann irgendwo

Code: Alles auswählen

nFilterCol := oBrowse:ColPos // zum Beispiel 18
oBrowse:RefreshAll()
oder komplexer. Oder eine Funktion. Wichtig ist nur: Wenn Du den Codeblock veränderst, ändert sich nicht notwendigerweise der Filter. Weil nämlich Dein Codeblock in "oBrowse:filter" gespeichert wird (das kannst Du in _DCXBROW.PRG anschauen). Und es wird nicht Deine Variable ausgewertet, sondern "oBrowse:Filter". Du darfst also nicht den Codeblock ändern, sondern seine Parameter. Am elegantesten geht das über eine Funktion, die dann auch beliebig komplex werden kann.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

Hi Tom,
OK, nur um das nochmal genau zu erklären. Die Würze an dem Filter liegt darin, das er nicht nur immer ein Feld betrifft, sondern je nach Sortierung der Spalte ein anderes Feld betrifft. Ist es Browsespalte 1, ist das es das feld, ist es Spalte 2, dann das Feld usw. Und da bin ich ganz ehrlich, das kann ich an Deinem Beispiel nicht erkennen. Das sieht mir so aus, das nur jeweils ein/der Wert verändert wird, aber nicht der Empfänger, der überprüft werden soll/muß. Oder sehe ich das falsch?
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Ich war jetzt nur mit dem Missverständnis bezüglich der Codeblöcke befasst.

oBrowse:ColPos gibt darüber Auskunft, wo sich der Cursor befindet. Du musst also in :ItemMarked darauf reagieren und eine Variable belegen, die im Filter-Codeblock berücksichtigt wird - und dann ein :RefreshAll auslösen, falls der Wert anders ist als vorher, sonst löst Du eine Endlosreaktion aus, weil :RefreshAll m.E. auch :ItemMarked feuern lässt, aber sinnvoll ist die Änderungsprüfung sowieso, weil sonst auch jeder Zeilenwechsel den Filter setzen würde.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

ich habe jetzt mal folgendes gemacht:
init

Code: Alles auswählen

::bBrowseFilter     := {|x| browseFilterMaengel(x,,,"init")}
setze/lösche neuen Filter

Code: Alles auswählen

IF ! ::lBrowseFilter
             nZeile        := DC_GetColArray(0,::oBrowse)                       // jetzt die zeile von der wir kommen
             cBrowseInhalt := ::aAuftragOffen[nZeile]:&(::cBrowseSortDoName)    // und jetzt der Filterinhalt der Spaltenzeile
             ::bBrowseFilter := {|x| browsefilterMaengel(x,cBrowseInhalt,::cBrowseSortDoName)}
             ::lBrowseFilter := .T.
          ELSE
             ::bBrowseFilter := {|x| browsefilterMaengel(x,,,"init")}
             ::lBrowseFilter := .F.
          ENDIF
          ::oBrowse:refreshAll()

Code: Alles auswählen

FUNCTION browsefilterMaengel(doObject,xWert,doName,cWoher)
         LOCAL lErfolg := .F.

         DEFAULT cWoher TO ""

         IF Upper(cWoher) == "INIT"
            lErfolg := .T.
         ELSE
            IF doObject:&doName = xWert
               lErfolg := .T.
            ENDIF
         ENDIF
         RETURN lErfolg
dabei habe ich festgestellt, die Funktion wird zwar aufgerufen, aber immer nur dem dem Codeblock aus der Init Routine. Es steht also immer unter cWoher "init" drin. Der Wechsel wird gar nicht berücksichtigt. Das wäre natürlich der Grund weshalb das nie klappte.
Also, was mache ich hier falsch?
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Das habe ich doch weiter oben erklärt, Manfred. Wenn Du an der Variable etwas änderst, die den Filtercodeblock enthält, änderst Du dadurch den Filter nicht. Den schreibt Roger beim Erzeugen des Browses in eine iVar oBrowse:Filter. Du müsstest also Deinen veränderten Codeblock - obwohl dieser Weg unelegant ist - in diese iVar durchschreiben, sonst bleibt die auf dem alten Inhalt.
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Wolfgang Ciriack »

Schau dir nochmal an, was Tom schrieb:
Wenn Du den Codeblock veränderst, ändert sich nicht notwendigerweise der Filter. Weil nämlich Dein Codeblock in "oBrowse:filter" gespeichert wird (das kannst Du in _DCXBROW.PRG anschauen). Und es wird nicht Deine Variable ausgewertet, sondern "oBrowse:Filter". Du darfst also nicht den Codeblock ändern, sondern seine Parameter. Am elegantesten geht das über eine Funktion, die dann auch beliebig komplex werden kann.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

Tom,
Du sprichst zu mir in chinesisch. ich sage ich verstehe es nicht und sprichst nur langsamer, änderst aber die Sprache nicht. Ich verstehe es also immer noch nicht.
Ich habe doch den letzten Code eingestellt. Was mache ich denn da falsch vom Code her?
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

Wolfgang,
auch das hilft mir nicht weiter. Es nutzt mir nichts wenn ich darauf hingwiesen werde etwas nochmal zu lesen, wen ich die Sprache nicht verstehe in der das geschrieben wurde.
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: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Martin Altmann »

Nicht ::bBrowseFilter := {|x| browsefilterMaengel(x,cBrowseInhalt,::cBrowseSortDoName)}
sondern ::oBrowse:Filter := {|x| browsefilterMaengel(x,cBrowseInhalt,::cBrowseSortDoName)}

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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Das hier:

Code: Alles auswählen

  ::bBrowseFilter := ...
Es hat keine Wirkung. Was in Deiner iVar :bBrowseFilter steht - also sein Inhalt -, wird beim Erzeugen des Browses in eine iVar kopiert. Diese iVar wird verwendet. Du könntest in :bBrowseFilter jetzt auch irgendwas anderes speichern, es hätte keine Wirkung. Entweder, Du veränderst das Verhalten der Funktion, die im Filter verwendet wird, oder Du kopierst das veränderte :bBrowseFilter in oBrowse:Filter. Herrgottsakra.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

alles erledigt, es klappt und ich habe jetzt auch kapiert wo mein Denkfehler liegt.
Ich habe das mit dem Hinweis auf die Membervar :filter nicht verstanden. Ich hatte das Konzept von Roger immer so in Erinnerung, das er es alles in Arrays speichert. Das es aber die entsprechenden Felder nacher in dem Objekt gibt, war üüüüberhaupt nicht auf meinem Schirm. Das kann man jetzt unwissend, dämlich, blöde oder sonstwas nenne. Der Effekt dieser Sache hier ist jetzt ich habe verdammt viel dazugelernt.
Danke erstmal für die Ausdauer.
Das hier klappt nämlich jetzt, nachdem ich die interne technik verstanden habe.

Code: Alles auswählen

::oBrowse:Filter := {|x| browsefilterMaengel(x,cBrowseInhalt,::cBrowseSortDoName,,self)}
Ich bin aber ganz ehrlich ohne fremde Telefonhilfe gerade (durch Georg) wäre ich niiiiiemals darauf gekommen.
Jetzt klingt alles schlüssig und logisch.
Danke nochmal für die Ausdauer an alle.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

das tolle an der Sache ist, es klappt jetzt auch ohne Einbindung einer Funktion sondern direkt so, wie ich es zwischenzeitlich hatte. Es war nur diese verdammte :filter Var, die mir einen riesen Stock zwischen die Beine geworfen hat.
Jetzt wird es wenigstens ein tolles Wochenende...... :lol:
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

Ich bin aber ganz ehrlich ohne fremde Telefonhilfe gerade (durch Georg) wäre ich niiiiiemals darauf gekommen.
Und das, obwohl ich's dreimal erklärt habe. 8)

Das mit dem Array verstehst Du falsch. Roger verwendet das GetList-Prinzip, um seine spezielle, an Clipper angelehnte Syntax abzubilden. Alle Elemente eines Dialogs sind in diesem Array - der Getlist eben - gespeichert. Aber das ist nur die Spitze des Eisbergs. Roger hat von den XbParts umfangreiche Klassen abgeleitet, und die Objekteigenschaften steuert er dann über die Klauseln seiner Clipper-ähnlichen Kommandos. Was da genau geschieht, sieht man zuerst in den Präprozessor-Direktiven (DCDIALOG.CH) und dann im Quellcode (hier: _DCXBROW.PRG). Aus DCBROWSE ... FILTER <bBlock> wird zunächst ein Element der Getlist, das um viele Optionen erweitert wird. Daraus entsteht dann das Browse-Objekt, dessen Instanzvariablen über diese Optionen bestückt werden. Über die GetList kann man aber jederzeit auf alle Objekte zugreifen, auf ihre Eigenschaften (z.B. WHEN-Klauseln) und vieles mehr.

Dein Problem liegt vermutlich darin, dass Du über diese Sache mit den ACTION-Codeblöcken z.B. bei in Schleifen erzeugten Pushbuttons mal gestolpert bist und das falsch in Erinnerung hast. Dieser Codeblock wird erst zur Lebenszeit des Pushbuttons evaluiert, also bei Betätigung. Deshalb gibt es Probleme, wenn man hier z.B. iterierende Variablen referenziert, also auf einen Zähler aus einer FOR ... NEXT-Schleife zugreift. Andere Inhalte aber werden unmittelbar beim Erzeugen der Controls ausgewertet, da funktioniert es dann mit den Zählern (z.B. bei Headern für Browsecolumns). Dieses Problem hat aber nichts mit dem hier jetzt zu tun. Hier geht es nur darum, dass Du eine Variable verwendest, um Instanzvariablen eines Objekts zu bestücken (in denen also eine Kopie des Inhalts abgelegt wird), aber nachdem das geschehen ist, fasst das Objekt Deine Variable nicht mehr an. Die kannst Du ändern, bist Du schwarz wirst. Du hättest auch überhaupt keine Variable verwenden müssen.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von georg »

Hallo, Tom -


ohne Deinen Hinweis hätte ich Manfred bei der Lösung auch nicht helfen können. Aber es ist halt so: oft hat man einen Code-Teil so oft angeschaut, dass der Fehler (selbst, wenn er rot markiert wäre) nicht auffallen würde.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

den Beitrag von MArtin hatte ich viel zu spät gesehen. Das war nämlich das, was georg mir gezeigt hat, aber ohne :oBrowse davor. Dann habe ich nur gesagt, diese Var :filter gibt es nicht und dann kam der Blick in das Browseobjekt. Und da steht sie und dann war alles klar. ich weiß jetzt das ich mir in Zukunft erstmal alle Objekte die Roger baut anschaue was es darin gibt. Das hatte ich so überhaupt nicht auf dem Schirm. Ich war immer falscher Meinung über diese Objekte.
Ich hoffe das ich da in Zukunft auch immer sofort dran denke..... :roll: :badgrin:
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Tom »

ich weiß jetzt das ich mir in Zukunft erstmal alle Objekte die Roger baut anschaue was es darin gibt.
Vorsicht. Das mag in diesem Fall der Weg der Wahl sein (ganz sicher bin ich allerdings nicht, siehe unten), aber ich würde davon abraten, z.B. "oBrowse:DataSource" direkt zu bestücken (da steht bei Array-Browses das Array in Kopie drin), sondern die Funktion "DC_GetBrowArray" zu verwenden, um die Datenquelle auszutauschen oder zu aktualisieren. Manche Informationen benötigt Roger mehrfach, manch ein Codeblock wird mit anderen Codeblöcken gemergt oder sonstwie überarbeitet. Da kann es dann sehr böse knallen, wenn man meint, eine Sache herausgefunden zu haben, die man aber doch nicht ganz durchdringt.

Ich würde im konkreten Fall, wie schon mehrfach gesagt, dazu raten, im Filter eine Funktion zu referenzieren, die sich dann flexibel verhält, je nach Einstellungen. Wenn Du die :Filter-iVar im falschen Moment belegst, kann es auch böse krachen. Deinen Filter-Codeblock brauchst Du eigentlich überhaupt nicht.

Code: Alles auswählen

DCBROWSE ... FILTER {|a|Nugugge(a)}
Und "Nugugge" reagiert dann auf alles mögliche und ändert also ihr Filterverhalten.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: DCBROWSE und DataObject [ERLEDIGT]

Beitrag von Manfred »

noch eine kleine Frage, die m.E: auch hierzu passen könnte. Wenn ich ein DataOBject in ein Array schreibe, dann kann ich ja danach mit x:name das Element ansprechen, ohne die Elementnummer zu wissen. Gibt es auch eine Möglichkeit zu ermitteln, welche Elementnummer es ist, die ich da über den DO Namen anspreche?
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