Seite 1 von 1

DELETE() [erledigt]

Verfasst: Mo, 09. Aug 2010 13:21
von Herbert
Ich hatte einen Schreibfehler in der Source und eben DELETE() anstelle des simplen DELETE geschrieben gehabt.
Allerdings wird mit Delete() kein Satz gelöscht. Es passiert nichts.

Da der Compiler keinen Fehler brachte, heisst das doch, dass irgendwo eine Delete()-Funktion exisitiert.

Was macht denn das Delete()?

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 13:53
von Rolf Ramacher
Hi Herbert,

sowie ich das verstanden habe, kannst du mit delete() innerhalb einer schleife bzw. einer vorgabe mehrere Datensätze löschen.
ich arbeite immer mit Dbdelete() - 123->(DbDetele()) - innerhalb einer do - while schleife.
in beiden Fällen sind die datensätze als gelöcht markiert. - mit (Dbpack()) sind sie ja weg.

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 13:55
von brandelh
Hallo,

schau doch mal in die PPO (compilerschalter /P setzen) Datei, dann siehst du die internen Befehle.

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 18:35
von Tom
Offenbar hat die nichtdokumentierte Funktion dieselbe Wirkung wie die (dokumentierte) Funktion "Deleted()". Jedenfalls deute das hier darauf hin:

Code: Alles auswählen

FUNCTION Main()
USE test NEW
DbGoTop() // erster Satz ist gelöscht
? Delete() // Ja
? Deleted() // auch Ja
DbSkip(1) // zweiter Satz ist NICHT gelöscht
? Delete() // Nein
? Deleted() // auch Nein
CLOSE
RETURN nil
@Herbert: Im PPO-Code bleibt der Funktionsaufruf schlicht stehen.

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 18:48
von Tom
Hallo, Rolf.
sowie ich das verstanden habe, kannst du mit delete() innerhalb einer schleife bzw. einer vorgabe mehrere Datensätze löschen.
Nur zum (besseren) Verständnis: Mit dem Kommando "DELETE" (also ohne Klammern) kann man einzelne Datensätze löschen. Die Direktivdatei "STD.CH" macht daraus das "DbDelete()", das Du auch verwendest. Es spielt also keine Rolle, ob man Kommando oder die äquivalente Funktion DbDelete() benutzt, jedenfalls bis zu dem Punkt, an dem man mit Alias-Operatoren arbeitet oder Rückgabewerte verarbeiten will.

Die Funktion "Delete()" gibt es offiziell überhaupt nicht, sie macht aber - siehe oben - offenbar dasselbe wie die Funktion "Deleted()", nämlich anzeigen, ob ein Datensatz gelöscht ist.

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 18:52
von Martin Altmann
Tja - und warum macht sie das wohl?
Aus dem selben Grund warum z.B. solche Dinge auch funz(t)en:

Code: Alles auswählen

SET DELE ON
SET PROC TO bla.prg
Es reicht unter Clipper doch aus, die ersten vier Buchstaben eines Kommandos zu schreiben - sofern es dadurch eineindeutig ist!

Viele Grüße,
Martin

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 19:00
von Tom
Hallo, Martin.

Verblüffend aber, dass das auch für Funktionen gelten soll. :shock: Ich habe gerade mal getestet - das hier funktioniert wirklich:

Code: Alles auswählen

? Round(5,2) // 5.00
? Roun(5,2) // 5.00
? Dele() // .F. - keine Tabelle geöffnet
Ganz erstaunlich.

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 19:07
von Tom
Ah. Licht am Horizont. If everything fails, read the f*cking manual. Bei "Elemente eines Xbase++-Programms", Unterbereich "Funktionen" wird ausgeführt:

Einige reservierte Funktionsnamen unterliegen aus Gründen der Kompatibilität der dBase Konvention, wonach ein Bezeichner bis auf die ersten vier Buchstaben abgekürzt werden kann.

Darunter "Deleted()" und - Zufallstreffer - "Round()". Es handelt sich um:

Replicate()
Transform()
DevPos()
Round()
Deleted()
Lower()
RTrim()
Break()
Seconds()
Upper()
Select()
Empty()
SetPos()
ValType()
CMonth()
Space()
PCount()
Inkey()
SubStr()

Re: DELETE()

Verfasst: Mo, 09. Aug 2010 23:15
von Herbert
Oh, danke allerseits, sehr interessant!