Namensgleichheit bei LOCAL und FIELD [ERLEDIGT]

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Namensgleichheit bei LOCAL und FIELD [ERLEDIGT]

Beitrag von UliTs »

Hallo allerseits,

ich hatte gerade mit der 1.90.341 länger nach einem Fehler gesucht.
Im Code gab es eine LOCAL-Variable UserId, die es auch in der geöffneten Tabelle User gab. Im Programm gab es folgenden Code:

Code: Alles auswählen

LOCAL UserId
....
IF User->UserId=1234
...
Das Programm stieg immer mit der Fehlermeldung NIL=1234 aus.
Anscheinend wird hierbei fälschlicherweise auf die LOCAL-Variable UserId zugegriffen.

Ein Fehler im Compiler, oder?

Edit: Im Titel MEMVars durch FIELD ersetzt.
Zuletzt geändert von UliTs am Mo, 29. Feb 2016 14:25, insgesamt 3-mal geändert.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von georg »

Hallo, Uli -


nein, wohl eher nicht.

LOCAL und STATIC Variablen werden vom Compiler werden des Compilers "aufgelöst", d.h. in Speicheradressen umgewandelt. Und da geht der Compiler hat wohl mit "Search and Replace" vor. Dabei kann der Compiler nur schwer unterscheiden, ob die LOCAL/STATIC Variable gemeint ist, oder ob es eventuell ein Feld in einer (zum Compilezeitpunkt nicht geöffneten!) Datei dieses Namens gibt. Im Zweifel wandelt er den Feldnamen in Deiner Anweisung in einer Speicheradresse um, die dann bei der Ausführung zum Abbruch führt.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von Herbert »

Da xbase auch anstelle von user->userid nur userid akzeptiert (wenn du die user-db aktuell offen hat), geht das nicht.
Die Local-Variable versteckt die andere.
Du musst die local-Variable anders benennen.

Ein schlauer Compiler sollte eigentlich darauf hinweisen...
Grüsse Herbert
Immer in Bewegung...
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von georg »

Hallo, Hubert -


das tut der Compiler, wenn man ihn lässt. Es gibt da so einen Schalter, der auf nicht-initialisierte Variablen hinweist. Man muss diesen Schalter nur setzen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von Herbert »

...Herbert :shock:
Grüsse Herbert
Immer in Bewegung...
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von georg »

Irgendwie verwechsle ich Euch immer, warum, das ist mir nicht ganz klar ...
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von brandelh »

Also ein FELD mit Bezeichner sollte vorgehen ... (aber ich will es jetzt nicht behaupten)

ob es aber Sinn macht ist eine andere Sache, daher heißen die LOCAL bei mir in dem Fall cUserID
Gruß
Hubert
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von Herbert »

Kommt darauf an, ob die UserID numerisch oder Alfanumerisch ist...
Stichwort ungarische Notation
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von brandelh »

Stimmt, bei mir ist sie immer ein String, im Beispiel oben aber numerisch.
Also: nUserID ;-)
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von UliTs »

Herbert hat geschrieben:Da xbase auch anstelle von user->userid nur userid akzeptiert (wenn du die user-db aktuell offen hat), geht das nicht.
Die Local-Variable versteckt die andere.
Du musst die local-Variable anders benennen.

Ein schlauer Compiler sollte eigentlich darauf hinweisen...
Nein, eine schlaue Programmiersprache sollte das logisch wie von mir beschrieben und erwartet handhaben :D
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von Martin Altmann »

Nun,
ich würde vermuten, es würde geklappt haben, hieße dein alias nicht User.

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von Manfred »

@Martin ?

ich stelle mich auch hinter Uli. Wenn man nichts angibt müßte die Var genommen werden und wenn der Alias davor kommt das Feld. Ist für mich jetzt logisch. Wird ja dann genau definiert. Ich meine das hätte wir hier irgendwo schonmal diskutiert. Wobei Hubert allerdings vollkommen Recht hat. Variablen ungarisch notieren. Kommt immer gut.
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von Martin Altmann »

Probiere es halt aus.
Klar sollte bei einem Alias vorne dran das Feld genommen werden - aber schon mal was vom "alias" MEMVAR-> gehört??

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von Manfred »

ja gut, wer seine DBF memvar benennt, der gehört eh mit dem Klammerbeutel gepudert
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
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von HaPe »

Hallo Zusammen !

Gibts in Xbase++ nicht auch den m. Operator (wie in Foxpro) :roll:
Wird der vor einen Variable-Namen gestellt weiß der Compiler/Interpreter dass er die Speicher-Variable und nicht eine eventuell gleichlautende Feld-Variable nehmen soll.
Wie oben schon erwähnt, kann dieses Namens-Problem nie auftreten wenn man für Speicher-Variablen konsequent die ungarische Notation verwendet. =D>
--
Hans-Peter
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von georg »

Hallo,


also, wir kennen nicht die ganze Geschichte, dünkt mir ...

Code: Alles auswählen

FUNCTION Main()
   Local UserID
   USE USER ALIAS USER NEW EXCLUSIVE
   IF User->UserID = 1234
      //
   ENDIF
RETURN (.T.)
Mit meinen Standard-Einstellungen:

Code: Alles auswählen

     COMPILE_FLAGS       = /p /q /w /wl 
läuft dieses Beispiel einwandfrei.

Die DBF-Datei enthält nur einen Satz, in dem das Feld UserID den Wert 1 enthält. Aber auch mit einer leeren DBF gibt es bei mir keinen Abbruch.

Uli, welche Compiler-Flags verwendest Du?

Wobei, ich habe hier die 1.90.355 im Einsatz, es mag sein, dass das ein Problem in der 1.90.341 ist. (Die Versionsnummer kommt mir etwas seltsam vor?)
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von AUGE_OHR »

UliTs hat geschrieben:ich hatte gerade mit der 1.90.341 länger nach einem Fehler gesucht.
wie schon gesagt wurde ist das keine offizielle Version sondern aus der BETA Phase 1.9.331 -> 1.9.355 SL1

seit v1.9.341
v342
PDR 109-6048 Enabling or disabling XbpStatic obj. causes childs to vanish
( All Windows platforms )

PDR 109-6049 SDFDBE does not support USE ... READONLY
( All Windows platforms )
v345
v346
v347
PDR 109-6050 XbpActiveXControl: Owner reset to parent object
( All Windows platforms )

PDR 109-6051 XbpActiveXControl: Position incorrect if parent is tab page
( All Windows platforms )

PDR 109-6053 PP fails to handle #if _YES_ properly if #define _YES_ .T.
( All Windows platforms )

PDR 109-6057 ARC.EXE: LANGUAGE-specific CHARACTER resource not found
( All Windows platforms )

PDR 109-6064 XbpRTF: Value in :SelColor incorrect for GRA_CLR_BLACK
( All Windows platforms )

PDR 109-6068 XbpToolBar: Incorrect position after :Create(), :AddItem()
( All Windows platforms )

PDR 109-6070 Error in DbImport when default DBE does not match workarea
( All Windows platforms )

PDR 109-6072 XbpPushButton:Activate not triggered with owner-drawing
( All Windows platforms )

PDR 109-6073 Function RunShell may cause IDSC
( All Windows platforms )

v350
v355
PDR 109-6083 XbpSle, XbpCombobox: Cue Banner not displayed
( All Windows platforms )

PDR 109-6084 OrdSetCustom() may fail with IDSC
( All Windows platforms )

PDR 109-6088 XbpSpinButton: Button imagery differs compared to Win2000
( Windows NT 4.0 )

PDR 109-6108 XbpPushButton: Transp. caption image displayed incorrectly
( All Windows platforms )

PDR 109-6109 XbpSetting: Artifacts when moving window over Xbase Parts
( All Windows platforms )

PDR 109-6110 Misleading error message if Signal():wait()/:signal() fail
( All Windows platforms )

PDR 109-6112 GraSetFont() yields IDSC if font object is in INIT state
( All Windows platforms )
alle closed PDR seit v1.8x anbei
Clospdrx_19355.zip
closed PDR v1.8x -> v1.9.355 SL1
(8.05 KiB) 240-mal heruntergeladen
gruss by OHR
Jimmy
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: Namensgleichheit bei LOCAL und MEMVARs

Beitrag von georg »

Hallo,


@Hans-Peter: Zu Deiner Frage: es gibt zwei Möglichkeiten, MEMVARS und Felder aus einer Datei zu kennzeichnen.

Für ein Feld ginge das so:

Code: Alles auswählen

FUNCTION Main()
   Local UserID
   FIELD UserID IN USER
   USE USER ALIAS USER NEW EXCLUSIVE
   IF User->UserID = 1234
      //
   ENDIF
RETURN (.T.)
Allerdings mag der Compiler das nicht:

Code: Alles auswählen

DEMO.PRG(3:0): error XBT0214: Duplicate variable declaration UserID
1 error(s) found in file DEMO.PRG!
Das sollte belegen, dass der Compiler richtig arbeitet, wenn man ihn mit den richtigen Informationen füttert.

Ansonsten kann man dynamische Variablen durch ein vorgesetztes M-> als solche kennzeichnen.

Ach ja, und zum Titel: Felder aus einer Datei sind keine MEMVARs. MEMVARs kann man durch das Schlüsselwort MEMVAR deklarieren, und damit erzeugt man PRIVATE bzw. PUBLIC. Für Felder aus Dateien gibt es FIELD.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Namensgleichheit bei LOCAL und FIELD

Beitrag von UliTs »

Hoppla :color:

Danke für den Hinweis! Ich habe den Titel geändert.

Jimmy: richtig ist 1.90.331 Sorry
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Namensgleichheit bei LOCAL und FIELD

Beitrag von UliTs »

Hallo Georg,

als Dein Beispiel funktioniert auch mit der 1.90.331 .
Ich kann den (vermeintlichen?) Fehler nicht mehr reproduzieren. Da es sowieso ein Tippfehler in der Bezeichnung der LOCAL-Variablen war, hat es erledigt :-) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten