Function im Macro ? [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
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

Function im Macro ? [erledigt]

Beitrag von AUGE_OHR »

mit dem original DBU.EXE kann ich mit F6 -> REPLACE das eingeben
DBU_Macro.JPG
DBU_Macro.JPG (19.74 KiB) 3504 mal betrachtet
das Feld "Aktion" ist Type "C" und der Code in DBU sieht so aus

Code: Alles auswählen

DBUCOPY.PRG

538         IF M->how_many = 0
539            REPLACE &field_mvar WITH &with_what ;
540                    WHILE &while_cond FOR &for_cond
541         ELSE
542            REPLACE NEXT M->how_many &field_mvar WITH &with_what ;
543                    WHILE &while_cond FOR &for_cond
544         ENDIF
545         stat_msg("Ersetzen beendet")
wenn ich nun diesen Code mit Xbase++ verwenden dann ist das Feld Aktion LEER !

hierzu das beiliegende Demo

Code: Alles auswählen

   USE TEST1 EXCLUSIVE
*  REPLACE TEST1->AKTION WITH   cText   // -> String "STR(RECNO())"
   REPLACE TEST1->AKTION WITH  &cText   // -> leer
*  REPLACE TEST1->AKTION WITH  (cText)  // -> String "STR(RECNO())"
*  REPLACE TEST1->AKTION WITH &(cText)  // -> String "STR(RECNO())"

   ? TEST1->AKTION
   WAIT
wie bekommt man das mit Xbase++ hin ?
Zuletzt geändert von AUGE_OHR am Mi, 10. Jun 2015 21:30, insgesamt 2-mal geändert.
gruss by OHR
Jimmy
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: Function im Macro ? [erledigt]

Beitrag von AUGE_OHR »

em, äh ... irgendwie funktioniert es doch mit der Xbase++ Version und auch

Code: Alles auswählen

&cText
&(cText)
arbeitet so wie es sollte ... hm ... ob es am re-boot lag ... :roll:
gruss by OHR
Jimmy
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: Function im Macro ?

Beitrag von AUGE_OHR »

also heute ist nicht mein Tag ... geht, geht nicht, geht teilweise ...

Code: Alles auswählen

PROCEDURE Main
LOCAL cFeld := "AKTION"
LOCAL cMore := "STR(RECNO())"
LOCAL cText := "hallo"

...

   DO WHILE !EOF()
*     REPLACE TEST1->AKTION WITH   cText   // -> String "hallo"
*     REPLACE TEST1->AKTION WITH  &cText   // -> crash ***
*     REPLACE TEST1->AKTION WITH  (cText)  // -> String "hallo"
*     REPLACE TEST1->AKTION WITH &(cText)  // -> crash

      REPLACE &cFeld WITH cText
      SKIP
   ENDDO
   BROWSE()

   GO TOP
   DO WHILE !EOF()
*     REPLACE TEST1->AKTION WITH   cMore   // -> String "STR(RECNO())"
*     REPLACE TEST1->AKTION WITH  &cMore   // -> 1
*     REPLACE TEST1->AKTION WITH  (cMore)  // -> String "STR(RECNO())"
*     REPLACE TEST1->AKTION WITH &(cMore)  // -> 1

      REPLACE &cFeld WITH &cMore
      SKIP
   ENDDO
   BROWSE()
***
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 : hallo
oError:osCode : 0
oError:severity : 2
oError:subCode : 2000
oError:subSystem : BASE
was mache ich verkehrt :?:
Dateianhänge
MACRO_Func.ZIP
(527 Bytes) 137-mal heruntergeladen
gruss by OHR
Jimmy
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: Function im Macro ?

Beitrag von Martin Altmann »

Wie, was machst Du verkehrt? Nichts!
Wo hast Du denn eine Funtkion Hallo() definiert, die aufgeruft werden könnte, wenn Du mit cText arbeitest?

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: Function im Macro ?

Beitrag von Tom »

Eben. cText enthält "hallo". Will man das als Makro evaluieren, wird versucht, "hallo" auszuführen. "cText" ist kein Makro.

In einem vergleichbaren Konstrukt wäre es sicher sinnvoller, so zu arbeiten:

Code: Alles auswählen

cFeld := "AKTION"
cText := "hallo"
FieldPut(FieldPos(cFeld),cText)
Ist auch schneller.
Herzlich,
Tom
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: Function im Macro ?

Beitrag von AUGE_OHR »

hi,

Danke für eure Antworten aber es trifft nicht das Problem.
die Lösung von Tom geht mit "cText" aber nicht mit "cMore" denn auch dort wird auch der String "STR(RECNO())" eingetragen.

das "komische" daran ist das der Source Code von DBU.EXE es ja scheinbar macht wenn ich STR(RECNO()) eingebe.
auch komisch : bei einem "String" muss ich die "" verwenden sonst kommt das
XppDBU_Replace_String.JPG
XppDBU_Replace_String.JPG (33.68 KiB) 3452 mal betrachtet
die Frage ist also : wie bekomme ich das Demo mit "beiden" Fällen zum laufen ?
gruss by OHR
Jimmy
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: Function im Macro ?

Beitrag von AUGE_OHR »

der Hinweis von DBU.EXE brachte die Lösung

Code: Alles auswählen

error_msg("Die Typen des Ersetzen-Ausdrucks und Feldinhalts stimmen nicht überein")
wenn ich nun das einsetzte funktioniert beides

Code: Alles auswählen

LOCAL cFeld := "AKTION"
LOCAL cMore := "STR(RECNO())"
LOCAL cText := "'hallo'"

   REPLACE &cFeld WITH &cText
   REPLACE &cFeld WITH &cMore
gruss by OHR
Jimmy
Antworten