Nach Problemen mit einer Fremdsoftware die DBF Dateien einliest, stellte ich fest, dass sowohl bei Clipper als auch bei Xbase++
Append Blank nur einen Satz mit Blanks anlegt, egal welcher Datentyp tatsächlich definiert ist.
Erst wenn ein Feld mit REPLACE einen Feldtyp konformen Text erhält, wird dieses Feld nach Typ formatiert.
Logische Felder werden übrigens intern mit "F" und "T" bestückt, nicht mit 0 und 1 wie in anderen Systemen üblich.
Falls Ihr also Daten mit Fremdsystemen austauscht und die Probleme melden, nutzt COPY TO zur Erstellung einer Exportdatei.
Diese wird dann alle Infos mit Grundwerten enthalten.
Was macht Append Blank ?
Moderator: Moderatoren
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Was macht Append Blank ?
Was erzählst Du denn da? Append Blank erzeugt einen neuen, physisch vorhandenen Datensatz in der Tabelle, Zeichenfelder sind leer, retournieren aber ihre Länge in Blanks, numerische Felder enthalten 0/0.00, logische .F. und Datumsfelder ein leeres Datum. Außerdem wird der Datensatz gesperrt.
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Was macht Append Blank ?
Hallo Tom,
ich habe hier mit DBU die DBF erzeugt, im Textfeld was eingegeben, Pfeil ab und 10 Datensätze erzeugt.
Mit Clipper DBU und Xbase++ DBU - ein direktes Programm habe ich nicht geschrieben, aber DBU muss ja auch Append Blank benutzen
Und die DBF sieht im HEX-EDITOR genauso aus wie ich beschrieben habe !
Xbase++ selbst hat damit aber natürlich keine Probleme, das wollte ich nicht zum Ausdruck bringen !
ich habe hier mit DBU die DBF erzeugt, im Textfeld was eingegeben, Pfeil ab und 10 Datensätze erzeugt.
Mit Clipper DBU und Xbase++ DBU - ein direktes Programm habe ich nicht geschrieben, aber DBU muss ja auch Append Blank benutzen
Und die DBF sieht im HEX-EDITOR genauso aus wie ich beschrieben habe !
Xbase++ selbst hat damit aber natürlich keine Probleme, das wollte ich nicht zum Ausdruck bringen !
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Was macht Append Blank ?
Hallo, Hubert.
Jetzt verstehe ich. Ja, ein Append Blank reserviert zunächst nur den Raum, den ein Datensatz in einer Tabelle einnehmen würde, und füllt ihn mit Blanks. Das ist per Definition beim Tabellenmodell DBF so (so steht es auch schon im "Handbuch der Dateiformate", International Thomson Publishing, Günter Born, 1985) - es ist die Aufgabe der Engine bzw. der verwendeten Software, diesen Fall abzufangen. Alle Programme, die mit DBF hantieren, sollten das beherrschen. Erst ein physikalisches Replace bzw. eine Bestückung der Felder findet erst statt, wenn die Datensätze manipuliert werden. Diese Verfahrensweise ist nicht unüblich und gilt auch für andere Dateitypen.
Jetzt verstehe ich. Ja, ein Append Blank reserviert zunächst nur den Raum, den ein Datensatz in einer Tabelle einnehmen würde, und füllt ihn mit Blanks. Das ist per Definition beim Tabellenmodell DBF so (so steht es auch schon im "Handbuch der Dateiformate", International Thomson Publishing, Günter Born, 1985) - es ist die Aufgabe der Engine bzw. der verwendeten Software, diesen Fall abzufangen. Alle Programme, die mit DBF hantieren, sollten das beherrschen. Erst ein physikalisches Replace bzw. eine Bestückung der Felder findet erst statt, wenn die Datensätze manipuliert werden. Diese Verfahrensweise ist nicht unüblich und gilt auch für andere Dateitypen.
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Was macht Append Blank ?
OK, prüfen wir das mit dem Programm ...
wie man sieht sind NUR die REPLACE-Felder sind gesetzt. Mit einem COPY TO kann man aber die Struktur richtig stellen.
PS: du hast es zwar schon erkannt - ich war zu langsam - aber mein Beispiel möchte ich doch anbringen
Nochmal, das ist eigentlich kein Problem, aber wenn man DBF Daten mit fremden Tools (oder Lowlevel) weiter verarbeitet, kann dieses zu Problem führen.
Code: Alles auswählen
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
proc main
dbcreate("TestEXE",{ { "Text","C",10,0},;
{ "L1" ,"L", 1,0},;
{ "T2" ,"C", 1,0},;
{ "Zahl","N", 5,2} } )
use testexe exclusive
append blank
replace field->Text with "1234567890"
append blank
replace field->L1 with .t.
append blank
append blank
replace field->T2 with "#"
append blank
replace field->zahl with 1
append blank
? "OK"
copy to testCopy
return
PS: du hast es zwar schon erkannt - ich war zu langsam - aber mein Beispiel möchte ich doch anbringen
Nochmal, das ist eigentlich kein Problem, aber wenn man DBF Daten mit fremden Tools (oder Lowlevel) weiter verarbeitet, kann dieses zu Problem führen.
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Was macht Append Blank ?
Man kann auch so etwas machen:
Code: Alles auswählen
APPEND BLANK
RepDefaults()
...
FUNCTION RepDefaults()
LOCAL n
FOR n := 1 to FCount()
DO CASE
CASE FieldInfo(n,FLD_TYPE) == "N" // FLD_TYPE ist als 1 in DMLB.CH definiert
FieldPut(n,0)
CASE FieldInfo(n,FLD_TYPE) == "L"
FieldPut(n,.F.)
CASE FieldInfo(n,FLD_TYPE) == "D"
FieldPut(n,CtoD(" . . "))
ENDCASE
NEXT
RETURN NIL
Herzlich,
Tom
Tom