Das nächste Entwicklertreffen findet Anfang Mai in Münster statt - weitere Infos bzw. zur Anmeldung!

XbpSle - Datalink

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
andreas
Foren-Moderator
Foren-Moderator
Beiträge: 1742
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Kontaktdaten:

XbpSle - Datalink

Beitrag von andreas » Do, 14. Jun 2018 10:31

Hallo,

ich habe bei mir einen Fehler, bei dem ich nicht auf die Lösung komme.

Wenn ich folgenden Code schreibe, funktioniert alles:

Code: Alles auswählen

::sleName:dataLink := {|x| IIf( x==NIL, ::Data:RecData:Name, ::Data:RecData:Name := x ) }
::sleName:setdata()
Wenn ich es versuche über Macro zu generieren

Code: Alles auswählen

cVar := "Name"
cMacro := "{|x| IIf( x==NIL, ::Data:RecData:" + cVar  + ", ::Data:RecData:" + cVar  + " := x ) }"
::sleName:dataLink := &cMacro 
::sleName:setdata()
bekomme ich einen Fehler in der SetData-Zeile:
oError:args :
-> NIL
oError:canDefault : N
oError:canRetry : J
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Unbekannte Variable
oError:filename :
oError:genCode : 22
oError:operation : SELF
oError:osCode : 0
oError:severity : 2
oError:subCode : 2000
oError:subSystem : BASE
oError:thread : 1
oError:tries : 1
Was kann man hier machen?
Gruß,

Andreas
VIP der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

Re: XbpSle - Datalink

Beitrag von georg » Do, 14. Jun 2018 11:36

Hallo, Andreas -


wenn das Makro zur Laufzeit erstellt wird, kann es sich nicht auf lokale Variable beziehen, wie self. Dann sind nur PRIVATE und PUBLIC Variablen möglich.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von Tom » Do, 14. Jun 2018 13:51

Genau. Du müsstest die SELF-Referenz (den Doppelpunkt) durch einen Variablennamen ersetzen, und der müsste dann mindestens PRIVATE sein. In der Variable müsste das SLE stecken.
Herzlich,
Tom

Benutzeravatar
andreas
Foren-Moderator
Foren-Moderator
Beiträge: 1742
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas » Do, 14. Jun 2018 14:27

Ich habe jetzt in der Methode, die diese Macro-Zuweisungen macht, eine PRIVATE-Variable für deklariert und der das SELF zugewiesen.
Leider bekomme ich wieder den gleichen Fehler, nur jetzt auf die neue Variable.
Wo soll dann diese Variable in einer Klasse definiert werden, damit es funktioniert?
Gruß,

Andreas
VIP der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

Re: XbpSle - Datalink

Beitrag von georg » Do, 14. Jun 2018 14:36

Hallo, Andreas -


dann poste doch mal den Code.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
andreas
Foren-Moderator
Foren-Moderator
Beiträge: 1742
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas » Do, 14. Jun 2018 15:33

Den Code muss ich erstmals als Beispiel zusammenstellen.
Gruß,

Andreas
VIP der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11551
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: XbpSle - Datalink

Beitrag von AUGE_OHR » Do, 14. Jun 2018 18:12

und was ist wenn du den Codeblock über eine Function zusammen baust ?

Code: Alles auswählen

cVar := "Name"
cMacro := MakeBlock(Self,cVar)
::sleName:dataLink := &cMacro 

FUNCTION MakeBlock(oSelf,cVar)
LOCAL cMacro := "{|x| IIf( x==NIL, oSelf:Data:RecData:" + cVar  + ", oSelf:Data:RecData:" + cVar  + " := x ) }"
RETURN cMacro
gruss by OHR
Jimmy

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

Re: XbpSle - Datalink

Beitrag von georg » Do, 14. Jun 2018 19:08

Hallo, Jimmy -


irgendwie habe ich das Gefühl, dass das auch nicht klappen wird.

oSelf wird in MakeBlock() nicht verwendet, und daher wird auch die Codeblock-Umwandlung nicht funktionieren.

Ich verstehe im Moment nicht, was Andreas eigentlich will, daher meine Frage. Ich vermute, dass er Eingabefelder hat, die mit iVars in :recData korrespondieren. Dafür will er einen Zuweisungscodeblock haben, der immer auf das jeweilige Feld abgestimmt ist.

Also in der Art:

Code: Alles auswählen

cName := "Feld1"
cBlock := {|x| IIf( x==NIL, ::Data:RecData:Feld1, ::Data:RecData:Feld1 := x ) }
...
cName := "Feld2"
cBlock := {|x| IIf( x==NIL, ::Data:RecData:Feld2, ::Data:RecData:Feld2 := x ) }
...
Und das Ganze wahrscheinlich in einer Schleife?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11551
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: XbpSle - Datalink

Beitrag von AUGE_OHR » Do, 14. Jun 2018 19:24

georg hat geschrieben:
Do, 14. Jun 2018 19:08
oSelf wird in MakeBlock() nicht verwendet, und daher wird auch die Codeblock-Umwandlung nicht funktionieren.
:?:
ich übergebe "self" als Parameter "oSelf" da ich "::" nicht übergeben kann.
nun kann aber das "::" genau das Problem sein da es zur Laufzeit nichts davon weiss.
gruss by OHR
Jimmy

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

Re: XbpSle - Datalink

Beitrag von georg » Do, 14. Jun 2018 19:42

Hallo, Jimmy -


Deine Ansatz löst nicht das Problem.

Code: Alles auswählen

cVar := "Name"
cMacro := MakeBlock(Self,cVar)
::sleName:dataLink := &cMacro 

FUNCTION MakeBlock(oSelf,cVar)
LOCAL cMacro := "{|x| IIf( x==NIL, oSelf:Data:RecData:" + cVar  + ", oSelf:Data:RecData:" + cVar  + " := x ) }"
RETURN cMacro
Spielen wir das Ganze mal durch. Unterstellen wir mal, das wir genau das durchspielen. Wir erhalten dann eine Variable cMacro mit folgendem Inhalt:

Code: Alles auswählen

"{|x| IIf( x==NIL, oSelf:Data:RecData:Name, oSelf:Data:RecData:Name := x ) }"
Dieser String wird von MakeBlock() zurückgegeben, und in der aufrufenden Funktion wird es wieder (!) knallen, da z.B. oSelf nicht bekannt ist. Einverstanden?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11551
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: XbpSle - Datalink

Beitrag von AUGE_OHR » Fr, 15. Jun 2018 1:28

ok ... nächster Versuch

Code: Alles auswählen

cVar := "Name"
oSelf := self
cMacro := MakeBlock(oSelf,cVar)
::sleName:dataLink := &cMacro
gruss by OHR
Jimmy

Benutzeravatar
andreas
Foren-Moderator
Foren-Moderator
Beiträge: 1742
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas » Fr, 15. Jun 2018 9:43

Hallo Georg,

du hast mit deiner Vermutung recht! Ich möchte eine Automation erreichen, in dem die Namen von SLE als Bezug genommen und automatisch auf die entsprechende Daten gelinkt werden. Das gleiche soll auch mit den Methode passieren.
Ich möchte eine Standardklasse, von der ein Dialog zus. erbt und diese Zuweisungen durchführt.
Gruß,

Andreas
VIP der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
andreas
Foren-Moderator
Foren-Moderator
Beiträge: 1742
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Kontaktdaten:

Re: XbpSle - Datalink

Beitrag von andreas » Fr, 15. Jun 2018 9:46

Die Möglichkeit über zus. Funktion habe ich schon gestern ausprobiert, was aber leider zum gleichen Ergebnis führt.
Ich werde mal Support anschreiben, sobald ich die Zeit dafür finde, wahrscheinlich am WE.
Gruß,

Andreas
VIP der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e. V.

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2255
Registriert: Fr, 08. Feb 2008 21:29

Re: XbpSle - Datalink

Beitrag von georg » Fr, 15. Jun 2018 9:54

Hallo, Andreas -


m.E. solltest Du den Codeblock durch den Aufruf einer Funktion ersetzen. Da es sicher aber wohl um eine Schleifen handeln soll, musst Du mit Detached Locals arbeiten:

Code: Alles auswählen

bBlock := MakeBlock(self, cName)
...

FUNCTION MakeBlock(oSelf, cName)
LOCAL bBlock
bBlock := {|x| RufeMeineFunktion(oSelf, cName)}
RETURN (bBlock)
Das sollte so funktionieren.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Antworten