PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Moderator: Moderatoren
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: So, 02. Mär 2014 16:36
PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Hallo,
PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Kann mir bitte jemand erklären, wieso DbGoTop() in Verbindung mit der PGDBE eine unzulässige Funktion sein soll?
PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Kann mir bitte jemand erklären, wieso DbGoTop() in Verbindung mit der PGDBE eine unzulässige Funktion sein soll?
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Das kann darauf verweisen, dass die Suche im Index und der Indexschlüssel nicht übereinstimmen, bezogen auf die Typisierung. Es wird mit einem alphanumerischen Wert in einem numerischen Index gesucht, sowas. DBFNTX ist da äußerst tolerant, aber alle anderen DBEs reagieren zickiger. Die Fehlermeldung selbst ist natürlich irreführend, aber, wie gesagt - ich kenne das vorwiegend im Kontext von Index-/Typenproblemen. Es könnte auch auf ein Integritätsproblem verweisen (Indexe nicht übereinstimmend).
Herzlich,
Tom
Tom
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: So, 02. Mär 2014 16:36
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Genau das war es . Hätte nicht gedacht, dass bei einem INDEX so eine Fehlermeldung kommen kann.
Herzlichen Dank
Herzlichen Dank
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: So, 02. Mär 2014 16:36
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Interessant ist es aber schon...
SET FILTER TO TERMIN->CUSTID == 1234567890 <-- Funktioniert
n1 := 1234567890
SET FILTER TO TERMIN->CUSTID == n1 <-- Funktioniert nicht, unzulässige Funktion beim anschließenden DbGoTop()
SET FILTER TO TERMIN->CUSTID == 1234567890 <-- Funktioniert
n1 := 1234567890
SET FILTER TO TERMIN->CUSTID == n1 <-- Funktioniert nicht, unzulässige Funktion beim anschließenden DbGoTop()
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Freut mich!
Es gibt da so einige Unterschiede zwischen den DBEs, wie oben skizziert. Grundsätzlich allerdings macht ein DbSetFilter nichts weiter, als dem Workarea-Objekt den Filterausdruck zuzuweisen, würde ich behaupten. Erst mit der Navigation in der Tabelle wird der Filter wirksam bzw. evaluiert. Deshalb kann man beim SET FILTER im Prinzip machen, was man will (so lange es syntaktisch korrekt ist), aber sobald man den Satzzeiger bewegt (DbGoTop(), DbGoto(), DbSkip(), DbSeek() usw.) und also geprüft werden muss, ob der Datensatz, auf den man bewegen würde, der Filterbedingung genügt oder nicht (oder halt völlig falsch ist), knallt es.Interessant ist es aber schon...
Herzlich,
Tom
Tom
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: So, 02. Mär 2014 16:36
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Das habe ich verstanden, meinte nur, weil die beiden Ausdrücke, bis auf die Variablenübergabe, identisch sind. Einmal wird der Wert direkt im Filter gesetzt und einmal per Variable übergeben .
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Ist "n1" denn wirklich an der Stelle noch sichtbar, an der der Filterausdruck möglicherweise evaluiert wird? Wenn Du z.B. in einer Funktion auf diese Weise einen Filter bestückst, aber dann woanders in der Tabelle navigierst, sind Variablen, die im Filterausdruck referenziert wurden, natürlich nicht mehr sichtbar, wenn sie funktionslokal waren.
Code: Alles auswählen
USE KUNDEN
SetMyFilter()
DboGotop() // Crash
FUNCTION SetMyFilter()
LOCAL c1 := "Hallo"
SET FILTER TO db->name == c1
RETURN .T.
Herzlich,
Tom
Tom
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Ist es hier nicht auch so wie beim ADS: Im Filterausdruck dürfen keine Speichervariablen enthalten sein.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Marcus Herz
- 1000 working lines a day
- Beiträge: 861
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
DbSetFilter() hat als 1. Parameter einen Codeblock, dort kann mann lokale Vaiablen auswerten:
dbSetDilter({|| db->name ==c1})
Das sollte auch bei PGDBE funktionieren
dbSetDilter({|| db->name ==c1})
Das sollte auch bei PGDBE funktionieren
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Tut es.Das sollte auch bei PGDBE funktionieren
Herzlich,
Tom
Tom
-
- Cut&Paste-Entwickler
- Beiträge: 49
- Registriert: So, 02. Mär 2014 16:36
Re: PGDBE + DbGoTop() = Fehler (Unzulässige Funktion)
Dankeschön für eure Hilfe
Jetzt bin ich wieder ein Stück schlauer geworden
Jetzt bin ich wieder ein Stück schlauer geworden