DataObject MemVar löschen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
DataObject MemVar löschen
Hallo,
wenn ich mit SCATTER NAME oDataObject einen Satz einlese, dann habe ich natürlich alle Felder mit drin - was ja auch der Sinn der Sache ist. Bei SCATTER NAME oDataObject werden dann auch alle Felder geschrieben, die es in der zu füllenden dbf gibt. Was eventuell nicht gewünscht ist.
Stellt sich die Frage: Wie lösche ich eine der MemVar?
Jan
wenn ich mit SCATTER NAME oDataObject einen Satz einlese, dann habe ich natürlich alle Felder mit drin - was ja auch der Sinn der Sache ist. Bei SCATTER NAME oDataObject werden dann auch alle Felder geschrieben, die es in der zu füllenden dbf gibt. Was eventuell nicht gewünscht ist.
Stellt sich die Frage: Wie lösche ich eine der MemVar?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: DataObject MemVar löschen
ich sehe nur die Möglichkeit, bei den ungewünschten Feldern den Inhalt der Zieldatei zu lesen und in das Objekt zu schreiben.
Weder bei DataObject() noch bei Abstract() ist das Löschen einer Instanzvariable vorgesehen ...
Oder du nutzt eben nicht die "Gieskanne" sondern machst eine eigene Routine.
Weder bei DataObject() noch bei Abstract() ist das Löschen einer Instanzvariable vorgesehen ...
Oder du nutzt eben nicht die "Gieskanne" sondern machst eine eigene Routine.
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: DataObject MemVar löschen
Der Zugriff auf eine DO-Instanzvariable, die nicht existiert, liefert NIL, und durch Zuweisung wird sie erzeugt. Es gibt keinen gelöschten Zustand, also etwas, das im Zugriff einen Laufzeitfehler generieren würde - das ist eine wesentliche Eigenschaft von Data Objects. Anders gesagt:
Code: Alles auswählen
o := DataObject():New()
? IsMemberVar(o,"Blubb") // .F.
? o:Blubb // NIL - aber kein Laufzeitfehler
o:Blubb := "Blubb"
? o:Blubb // Blubb
o:Blubb := NIL
? IsMemberVar(o,"Blubb") // .T., leider
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: DataObject MemVar löschen
Moin,
schade. Ich hatte die Hoffnung das die Klassen-Cracks hier eine Idee haben dazu.
Was natürlich ginge ist, das ich das DO umkopiere in einer FOR...NEXT-Schleife, und dabei die entsprechende MeberVar auszulassen. Und dann das GATHER auf das kopierte DO zu machen.
Das Problem, um das es hier geht: Ich kopiere halt Sätze aus einer dbf in eine andere. Die Struktur ist die gleiche. Problem: Das ist eine FOXCDX im einem "S"-Feld. Das KANN man eben nicht einfach so beschreiben. Und GATHER scheint das (im Gegensatz zu DbImport()) nicht zu merken, und steigt dann mit einem Laufzeitfehler aus wegen dem schreibgeschützen Feld.
Ich hab mal eine Mail an den Support geschickt. Mal sehen was Alaska dazu sagt. Im Prinzip wäre es ja gut wenn GATHER sowas berücksichtigen würde.
Jan
schade. Ich hatte die Hoffnung das die Klassen-Cracks hier eine Idee haben dazu.
Was natürlich ginge ist, das ich das DO umkopiere in einer FOR...NEXT-Schleife, und dabei die entsprechende MeberVar auszulassen. Und dann das GATHER auf das kopierte DO zu machen.
Das Problem, um das es hier geht: Ich kopiere halt Sätze aus einer dbf in eine andere. Die Struktur ist die gleiche. Problem: Das ist eine FOXCDX im einem "S"-Feld. Das KANN man eben nicht einfach so beschreiben. Und GATHER scheint das (im Gegensatz zu DbImport()) nicht zu merken, und steigt dann mit einem Laufzeitfehler aus wegen dem schreibgeschützen Feld.
Ich hab mal eine Mail an den Support geschickt. Mal sehen was Alaska dazu sagt. Im Prinzip wäre es ja gut wenn GATHER sowas berücksichtigen würde.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: DataObject MemVar löschen
Hallo Jan !
Noch besser wäre es wenn es wie in VFP eine FIELDS-Klausel mit EXCEPT und LIKE hätteIm Prinzip wäre es ja gut wenn GATHER sowas berücksichtigen würde.
--
Hans-Peter
Hans-Peter
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: DataObject MemVar löschen
wie wäre es wenn du dir eine eigene GATHER() Function schreibst ?
Code: Alles auswählen
Original \SOURCE\SYS\Blocks.prg
FUNCTION Gather( aValues )
IF Valtype( aValues ) == "A"
IF AScan( aValues, {|x| Valtype(x) <> "O" } ) > 0
AEval( aValues, {|x,i| FieldPut(i,x) } )
ELSE
AEval( aValues, {|o| o:getData() } )
ENDIF
ENDIF
RETURN aValues
Code: Alles auswählen
FUNCTION Gather( aValues )
IF Valtype( aValues ) == "A"
iMax := LEN(aValues)
FOR i := 1 TO iMax
x := FieldGet(i)
IF x = NIL
ELSE
FieldPut(i,x)
ENDIF
NEXT
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: DataObject MemVar löschen
Jimmy,
der Gedanke war mir inzwischen auch schon gekommen. Mir war vor der Antwort von Alaska nicht klar gewesen, das der Quellcode mitgeliefert wird.
Aber der Pfad ist nicht \SOURCE\SYS\Blocks.prg, sondern \SOURCE\runtime\SYS\Blocks.prg. Merkwürdig - Alaska Support hat exakt den gleichen Fehler gemacht...
Jan
der Gedanke war mir inzwischen auch schon gekommen. Mir war vor der Antwort von Alaska nicht klar gewesen, das der Quellcode mitgeliefert wird.
Aber der Pfad ist nicht \SOURCE\SYS\Blocks.prg, sondern \SOURCE\runtime\SYS\Blocks.prg. Merkwürdig - Alaska Support hat exakt den gleichen Fehler gemacht...
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: DataObject MemVar löschen
Alaska hat den PDR 7049 aufgemacht.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.