[Gelöst] Feld kann nicht gelöscht werden

9. September 2010 20:08

Hallo,
Ich möchte ein Feld (Datentyp: Date) löschen und bekomme folgende Fehlermeldung:

Sie können den Typ des Feldes MeinFeld (in der Tabelle Customer) nicht löschen oder ändern, bevor Sie das Feld nicht in allen Datensätzen auf 0 (Null) oder '' (Leerzeichen) gesetzt haben. Diese Meldung erscheint, da ein Wert ungleich null im Datensatz No.='0010015' im Mandanten Testmandant gefunden wurde.

Also habe ich versucht den Feldinhalt zu löschen:
Code:
Customer.RESET;
Customer.FINDSET;
Customer.MODIFYALL("MeinFeld",0D);

Leider ohne Erfolg. Was muss ich machen?

Gruß
Ralf
Zuletzt geändert von ralf5 am 10. September 2010 09:40, insgesamt 1-mal geändert.

Re: Feld kann nicht gelöscht werden

9. September 2010 20:17

Lass das FINDSET mal weg. Vor einem MODIFYALL macht nur ggf. SETRANGE oder SETFILTER Sinn, wenn nicht alle Datensätze modifiziert werden sollen.

Re: Feld kann nicht gelöscht werden

10. September 2010 09:40

Hallo Kai,

vielen Dank, ich habs hinbekommen. :-D

Warum aber das Findset ein Problem ist verstehe ich allerdings nicht. Ich dachte das nur mit Findset oder Find('-') die Daten auch abgefragt werden.

Gruß
Ralf

Re: Feld kann nicht gelöscht werden

10. September 2010 10:11

ralf5 hat geschrieben:Ich dachte das nur mit Findset oder Find('-') die Daten auch abgefragt werden.

Jein. Bei allen ...ALL-Befehlen (MODIFYALL, DELETEALL) wird intern auch eine Abfrage gestartet. Logisch, denn der SQL-Server muss ja die zu ändernden Datensätze erst einmal greifen, um sie ändern zu können.

Re: [Gelöst] Feld kann nicht gelöscht werden

10. September 2010 10:59

In 2009 gibt es allerdings noch das Problem, dass z.B. ein DELETEALL nicht immer eine Transaktion startet. (bei mir Tritt ein Fehler auf, wenn ich im VK-Auftrag mit gebuchter Anzahlung das Statistik-Fenster aufrufe. Wenn dort im Ondelete- Trigger der "Sales Line" eine Tabelle nur mit Tab.RESET, Tab.SETRANGE(..), Tab.DELETEALL gelöscht wird, dann bekommt man die Fehlermeldung. das eine Transaktion gestartet werden muss). Lösung des Problems ist dann das Hinzufügen eines FIND...- Befehls.

Gruß, Fiddi