Kopieren einzelner Datensätze und Append from

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Kopieren einzelner Datensätze und Append from

Beitragvon xbaseklaus » Mi, 16. Mär 2016 9:31

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
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: Kopieren einzelner Datensätze und Append from

Beitragvon brandelh » Mi, 16. Mär 2016 9:32

ja so kann man das machen und die Memofelder werden (sogar komprimiert) mitkopiert
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13483
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Kopieren einzelner Datensätze und Append from

Beitragvon xbaseklaus » Mi, 16. Mär 2016 9:42

brandelh hat geschrieben:ja so kann man das machen und die Memofelder werden (sogar komprimiert) mitkopiert


Ok Danke, da bin ich dann schon mal nicht auf dem Holzweg :-)

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
xbaseklaus
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 246
Registriert: Mi, 04. Jun 2014 12:01
Wohnort: FRANKEN

Re: Kopieren einzelner Datensätze und Append from

Beitragvon georg » Mi, 16. Mär 2016 9:51

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.
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1848
Registriert: Fr, 08. Feb 2008 22:29

Re: Kopieren einzelner Datensätze und Append from

Beitragvon brandelh » Mi, 16. Mär 2016 9:59

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.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13483
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Kopieren einzelner Datensätze und Append from

Beitragvon Tom » Mi, 16. Mär 2016 10:17

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6726
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin


Zurück zu Newbie

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast