Guten Morgen ,
folgendes Problem: Datensätze mit einer speziellen Bedingung sollen in der Datenbank teilweise verändert an die Datenbank wieder neu Angehängt werden !
Ich hätte das jetzt so gemacht:
Temp DBF angelegt mit den Datensätzen die die Bedingung erfüllen also
copy to Temp.dbf for ... ( da werden doch dann auch vorhandene FTPs mit kopiert )
danach in der Temp DBF die 2 Felder pro Datensatz geändert
und dann mit
Append from ...
wieder alle geänderten Datensätze angehängt und die Temp DBF wieder gelöscht
oder ?
Mfg Klaus
Kopieren einzelner Datensätze und Append from
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
- 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: Kopieren einzelner Datensätze und Append from
ja so kann man das machen und die Memofelder werden (sogar komprimiert) mitkopiert
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 246
- Registriert: Mi, 04. Jun 2014 12:01
- Wohnort: FRANKEN
Re: Kopieren einzelner Datensätze und Append from
Ok Danke, da bin ich dann schon mal nicht auf dem Holzwegbrandelh hat geschrieben:ja so kann man das machen und die Memofelder werden (sogar komprimiert) mitkopiert
und wenn vor dem APPEND FROM
mit SET INDEX TO XXX.CDX der Index Aktiv ist werden auch alle darin enthaltenen TAGs aktualisiert ?!
Da ich jetzt alles auf FOXCDX umgestellt habe mit mehreren TAGs im INDEX !
Mfg Klaus
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2825
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: Kopieren einzelner Datensätze und Append from
Hallo, Klaus -
man sollte grundsätzlich die Index-Datei direkt nach der DBF-Datei öffnen, damit alle Änderungen an den Daten auch in der Index-Datei widergespiegelt werden. Alles andere bringt mit hoher Wahrscheinlichkeit Inkosistenzen in die Index-Dateien.
Ausnahme ist aus meiner Sicht, wenn ein PACK oder DELETE ALL durchgeführt werden soll, dann öffnet man nur die Datei und erstellt danach die Index-Datei (mit den Tags) neu.
man sollte grundsätzlich die Index-Datei direkt nach der DBF-Datei öffnen, damit alle Änderungen an den Daten auch in der Index-Datei widergespiegelt werden. Alles andere bringt mit hoher Wahrscheinlichkeit Inkosistenzen in die Index-Dateien.
Ausnahme ist aus meiner Sicht, wenn ein PACK oder DELETE ALL durchgeführt werden soll, dann öffnet man nur die Datei und erstellt danach die Index-Datei (mit den Tags) neu.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen 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: Kopieren einzelner Datensätze und Append from
Ich kann Georg nur voll zustimmen.
Eine andere Ausnahme sind Änderungen an der Datei die ohne Index laufen müssen, dann kann man alle Indexe löschen, Änderungen durchführen und danach neu aufbauen.
Gerade bei sehr großen Dateien kann es enorm schneller sein die Dateien ohne Index Ballast zu verarbeiten, wenn man diese nicht braucht.
Beispiel PACK ... oder mein Ersatz copy to for .not. deleted() in temporäre Datei, alte löschen, neue umbenennen.
Eine andere Ausnahme sind Änderungen an der Datei die ohne Index laufen müssen, dann kann man alle Indexe löschen, Änderungen durchführen und danach neu aufbauen.
Gerade bei sehr großen Dateien kann es enorm schneller sein die Dateien ohne Index Ballast zu verarbeiten, wenn man diese nicht braucht.
Beispiel PACK ... oder mein Ersatz copy to for .not. deleted() in temporäre Datei, alte löschen, neue umbenennen.
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: Kopieren einzelner Datensätze und Append from
Temp-Tabellen sollte man allerdings nur ausnahmsweise verwenden. Leichter und schneller ist es, die fraglichen Datensätze in ein Array einzulesen - im elegantesten Fall in ein Array aus Datensatzobjekten - und dieses zu bearbeiten. Anschließend hängt man alle Arrayelemente an die bestehende Tabelle wieder an. Das funktioniert bei fast jeder Datenmenge - und es ist immer schneller und robuster als der Umweg über temporäre Tabellen.
Code: Alles auswählen
a := {}
DbSetFilter/DbSetScope // Bedingung für Tabelle setzen
DbGoTop()
n := FCount()
x := 0
DO WHILE !Eof()
AAdd(a,Array(n))
x ++
FOR i := 1 TO n
a[x,i] := FieldGet(i)
NEXT
DbSkip(1)
ENDDO
* jetzt sind alle fraglichen Datensätze im Array, weitermachen. Geht auch noch eleganter über DbEval() und ggf. eine Datensatzklasse (Scatter/Gather)
Herzlich,
Tom
Tom