Seite 1 von 1

Append from

Verfasst: Di, 03. Jul 2018 23:13
von medmaster
Ich verwende den Befehl, um von einer temporären Datei Datensätze an eine andere .dbf anzuhängen.
Beide Dateien haben exakt die gleiche Struktur.
Fehler : es werden nicht alle Feldinhalte übertragen - ich erinner mich an alte Hinweise, dass der Befehl nicht sauber arbeitet.
Stimmt das ? Und was könnte ich als Ersatz nehmen ?
Danke fürs Nachdenken !
Rainer

Re: Append from

Verfasst: Mi, 04. Jul 2018 3:03
von AUGE_OHR
medmaster hat geschrieben: Di, 03. Jul 2018 23:13 Beide Dateien haben exakt die gleiche Struktur.
dann ist es easy

Code: Alles auswählen

   SELECT 1
   USE DBF_A EXCLUSIV
   aStruct := DbStruct()
   iMax := LEN(aStruct)
   SELECT 2
   USE DBF_B EXCLUSIV

   SELECT 1
   DO WHILE .NOT. DBF_A->( EOF() )
        DBF_B->( DbAppend() )
        i := 0
        FOR i := 1 TO iMax
            DBF_B->( FieldPut( DBF_A->(FieldGet(i) ) ) )
        NEXT
        DBF_A->( DbSKIP() )
   ENDDO
wenn es zwar die selben Feldnamen sind aber nicht die Reihenfolge dann

Code: Alles auswählen

    FieldPos( <cFieldName> ) --> nFieldPosition
medmaster hat geschrieben:Fehler : es werden nicht alle Feldinhalte übertragen
wenn nicht beide DBFNTX sind : verwendest du VIA beim APPEND FROM :?:
medmaster hat geschrieben:ich erinner mich an alte Hinweise, dass der Befehl nicht sauber arbeitet.
Stimmt das ? Und was könnte ich als Ersatz nehmen ?
bei der DBFDBE und FOXDBE wüsste ich von keinen solchen Problemen aber bei DELDBE gibt es einige PDR Einträge.

Re: Append from

Verfasst: Mi, 04. Jul 2018 6:48
von Jan
Rainer,

wenn Du mit Xbase++ 2.0 arbeitest, könntest Du das mal mit GATHER und SCATTER versuchen.

Code: Alles auswählen

DO WHILE .NOT. ersteDbf->(EoF())
   DbSelectArea(ersteDbf)
   SCATTER NAME oDatensatz
   DbSelectArea(zweiteDbf)
   zweiteDbf->(DbAppend())
   GATHER NAME oDatensatz
   ersteDbf->(DbSkip())
ENDDO
Etwas aufwändiger als Append From, aber wenn beide dbf deckungsgleich sind, sollte das gut gehen. Es geht auch, wenn die nicht deckungsgleich sind, aber dann wird nur der Inhalt geschrieben, wo die Felder in beiden dbf gleich sind.

Jan

Re: Append from

Verfasst: Mi, 04. Jul 2018 10:08
von mini990
Hallo,
ich nutze seit zig Jahren folgendes:

Code: Alles auswählen

FUNCTION COPYSATZ2DBF(cDBF)
LOCAL z:=0; inhalt:={}; oldDBF:=select()
for z = 1 to fcount()
	aadd(inhalt,&(fieldname(z)))
next z
select &cDBF
if addrec(1)
	for z = 1 to fcount()
		replace &(fieldname(z)) with inhalt[z]
	next z
	unlock
	select(oldDBF)
	return .t.
endif
select(oldDBF)
return (.f.)
Gruß Stefan

Re: Append from

Verfasst: Mi, 04. Jul 2018 10:42
von Tom
Ich finde keinen offenen PDR zu "APPEND", der das Verhalten erklären könnte. Wir nutzen derlei zwar selten, aber es sind uns keine aktuellen Fehler (1.9SL1/2.0) von Kunden bekannt.

In der 2.0 kann man auch ein "SELECT * INTO OBJECTS aData" auf der Quelle verwenden - und ein "UPDATE <cTable> FROM aData" auf dem Ziel. Das wird aber auf dasselbe hinauslaufen wie APPEND FROM und die ganzen Workarounds hier.

Re: Append from

Verfasst: So, 08. Jul 2018 13:46
von medmaster
danke allen - ich nehm eins von den Umgehungsprogrammen !
Rainer