Frage zum Alias [Erledigt]

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

Moderator: Moderatoren

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

Frage zum Alias [Erledigt]

Beitrag von Jan »

Hallo,

normalerweise setze ich DbXXX-Funktionen immer so ein: adressen->(DbSeek(....)). Wenn ich aber die Standard-Funktionen erweitern möchte - wie mache ich das dann mit einer eigenen Db-Funktion? Also z. B. adressen->(MyDbSeek(...))? Wie bekomme ich den angegebenen Alias in meine Funktion rein? Kann ich den vorgestellten Alias irgendwie abfragen? Oder rmuß ich den besser als zusätzlichen Parameter mit übergeben?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Frage zum Alias

Beitrag von brandelh »

probiert habe ich es nicht, aber es müsste so sein, dass in deiner Funktion dann der richtige Selectbereich / Alias angesprochen wird.
Versuche es einfach aus:

Code: Alles auswählen

use db1 alias DB1 NEW
use db2 alias DB2 NEW
? MyFunc() // sollte DB2 sein
? DB1->(MyFunc()) // sollte DB1 sein

function MyFunc()
return alias()
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Frage zum Alias

Beitrag von georg »

Hallo, Jan -


ich verstehe die Schreibweise alias->(Funktion()) so, dass die Funktion ausgeführt wird, und dabei der aktuelle Select()-Bereich (z.B. "Kunden") mit dem Alias "überschrieben" wird, der angegeben ist (z.B. "Artikel"). Das funktioniert auch mit anderen Funktionen, d.h. Huberts Beispiel zeigt es recht gut.

Um den Alias-Namen zu erfahren, führst Du einfach die alias()-Funktion aus.

Ich habe eine DBF-Klasse, in der ich in den Methoden mit (::alias)->(irgendwas()) operiere.
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: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Frage zum Alias

Beitrag von brandelh »

Es ist so wie ich dachte, etwas ausführlicheres Testprogramm:

Code: Alles auswählen

procedure main
   set alternate to test.txt
   set alternate on
   use db1 alias DB1 NEW
   use db2 alias DB2 NEW
   ? "1. direkt",alias(),select()
   MyFunc() // sollte DB2 sein
   ? "2. direkt",alias(),select()
   DB1->(MyFunc()) // sollte DB1 sein
   inkey(10)
return

function MyFunc()
   ? alias(),select()
return alias()
Ergebnis:

Code: Alles auswählen

1. direkt DB2          2
DB2          2
2. direkt DB2          2
DB1          1
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Frage zum Alias

Beitrag von Jan »

Hallo Hubert,

da bist Du mir mit Deinem Testergebnis zuvor gekommen. Vielen Dank für die Arbeit.

Das macht die Arbeit mit erweiterten DbXXX()-Funktionen natürlich wesentlich einfacher.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten