Seite 1 von 1

delete all for [ERLEDIGT]

Verfasst: Di, 16. Jun 2015 8:33
von Koverhage
Ich habe das Problem, dass die gewünschten Datensätze nicht oder nur zum Teil gelöscht werden.
Woran könnte das liegen ?

Code: Alles auswählen

dbselectarea( "vg" )
IF vg->(flock())
   delete all for ve_az = m_az
   vg->(DbUnlock())
   msgbox("Gesamteinheiten wurden gelöscht")
ELSE
   msgbox("Datei konnte nicht gesperrt werden, bitte nochmal versuchen")
ENDIF

Re: delte all for

Verfasst: Di, 16. Jun 2015 9:02
von Manfred
Hi Klaus,

Du hast "=" da stehen. Wie sieht es aus, passen die Bedingungen immer? Oder wäre evtl. "==" besser? Oder alles Upper() oder Lower() oder so ähnlich?

Re: delte all for

Verfasst: Di, 16. Jun 2015 9:03
von Martin Altmann
Oder hast Du vorher einen Filter/Scope auf der Datenbank aktiv, der nicht Deiner Löschbedngung entspricht?

Viele Grüße,
Martin

Re: delte all for

Verfasst: Di, 16. Jun 2015 9:06
von Manfred
reden wir von vielen Sätzen? Erweitere doch mal den Code und lass Dir anzeigen was drin steht, wenn nicht gelöscht wird. Manchmal sind es ganz blöde Fehler.

Re: delete all for

Verfasst: Di, 16. Jun 2015 9:19
von Koverhage
Scope / Filter nicht aktiv

m_az ist eine Zahl, die gebe ich vor und ich weiß das es die Nummer gibt, sonst könnte ich nicht beurteilen, dass die nicht gelöscht werden.
Erweitere doch mal den Code und lass Dir anzeigen was drin steht, wenn nicht gelöscht wird.
Wie ? Auf den Delete ALL habe ich doch keinen Einfluß.
Ich könnte den Code aus dem PPO nehmen und dort was einbauen ?

Re: delete all for

Verfasst: Di, 16. Jun 2015 9:21
von georg
Hallo, Klaus -


die Anweisung sieht "sauber" aus. Bestehen zu der Zeit Scopes oder Filter? Das könnte das Ergebnis beeinflussen.

(Update: Martin war schneller)

Re: delete all for

Verfasst: Di, 16. Jun 2015 9:27
von Manfred
Klaus,

mache einfach eine Do While Schleife und Skip, oder arbeite mit DbEval() und baue eine Funktion mit IF() ein. z.B.

Re: delete all for

Verfasst: Di, 16. Jun 2015 10:51
von Tom
DELETE ALL FOR <Bedingung> ist falsch. Entweder ALL oder FOR:

Code: Alles auswählen

DELETE FOR db->x = y

Re: delete all for

Verfasst: Di, 16. Jun 2015 11:40
von Koverhage
Tom,

ich würde Dir ja Recht geben, sehe es auch so aber aus der Hilfe von Xbase++

DELETE ALL FOR RechDatum < Date()-730 // Löschmarkierung setzen

Re: delete all for

Verfasst: Di, 16. Jun 2015 11:42
von Martin Altmann
Tom,
auch ich nutze das Konstrukt ohne Probleme.

Viele Grüße,
Martin

Re: delete all for

Verfasst: Di, 16. Jun 2015 11:54
von Koverhage
ich habe im DBU nachgesehen auch dort wird ohne ALL gearbeitet.
Habe das jetzt so wie Tom vorgeschlagen hat geändert und es funktioniert,
obwohl es anderen Stellen funktioniert (wie auch bei Martin).

Danke

Re: delete all for [ERLEDIGT]

Verfasst: Di, 16. Jun 2015 12:07
von Tom
Ihr habt mich jetzt echt irritiert - und es steht ja tatsächlich so in der Doku, auch bei REPLACE und anderen Kommandos. Tatsächlich benutze ich solche Konstrukte nur an ganz wenigen Stellen, und dort arbeitet DELETE FOR <Bedingung> einwandfrei. Ich wüsste auch nicht, wozu man die Klausel "ALL" in dieser Variante benötigen sollte - entweder, ich will einen einzelnen Datensatz löschen (DELETE), alle Datensätze (ggf. gemäß Filter oder Scope) - also DELETE ALL - oder all solche Datensätze, die einer Bedingung genügen (DELETE FOR).

Re: delete all for [ERLEDIGT]

Verfasst: Di, 16. Jun 2015 12:40
von Martin Altmann
Tom,
steht das nicht in deer Hilfe beschrieben?
DELETE FOR... löscht alle Datensätze AB DEM AKTUELLEN, die der Löschbedingung entsprechen!
Wenn man diese Einschränkung nicht will, muss man ALL verwenden oder auf dem ersten Datensatz stehen, wenn man das Kommando ausführt!

Viele Grüße,
Martin

Re: delete all for [ERLEDIGT]

Verfasst: Di, 16. Jun 2015 13:30
von Koverhage
Martin,

ab dem aktuellen finde ich in der DOKU nicht.
Parameter
-------------
FOR <lForCondition>
<lForCondition> ist ein optionaler logischer Ausdruck, der eine Bedingung vorgibt. Es werden nur die Datensätze zum Löschen markiert, bei denen <lForCondition> den Wert .T. (wahr) liefert.

ALL
Durch die Option ALL werden alle Datensätze zum Löschen markiert. Falls eine Bedingung angegeben ist, wird die Bedingung für alle Datensätze geprüft.
Ich habe unabhängig davon beim entfernen von ALL ein DbGoTop() eingefügt.

Re: delete all for [ERLEDIGT]

Verfasst: Di, 16. Jun 2015 14:10
von Martin Altmann
Klaus,
ich meine, dass das so mal in der Hilfe stand - frage mich jetzt bitte nicht, bei welcher Version von Xbase++

Viele Grüße,
Martin

Re: delete all for [ERLEDIGT]

Verfasst: Di, 16. Jun 2015 17:47
von Koverhage
Vermutlich in der OS/2 Version, praktisch in der Steinzeit ;-)