Datenübernahme von Xbase zu Windev
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Datenübernahme von Xbase zu Windev
Beim Umwandeln von Xbase .dbf-Tabellen erden ab einem bestimmten Moment die logischen Felder nicht mehr korrekt umgewandelt.
Nach mehreren Versuchen und Kontakt mit der technischen Abteilung von PC-Soft ergibt sich folgender Lösungsweg:
- es muss der Foxpro OLE DB Treiber versendet werden.
Download ab hier: http://www.microsoft.com/en-us/download ... x?id=14839
Nur - das ist der Treiber aus FoxPro-Zeiten. Daher ist dieser Treiber nur bis und mit Windows XP einsetzbar.
PC-Soft ist darüber informiert. mal sehen, was die machen.
Workaround:
Mit dem internen Treiber von Windev umstellen (so kommen auch die memos mit). Anschliessend nachbearbeiten der logischen Felder.
Ich exportiere die .DBF in eine sdf-Datei mittels DbExport in Xbase. Eine Rutine scannt diese Datei durch und ersetzt so die logischen Werte an richtiger Stelle.
Nach mehreren Versuchen und Kontakt mit der technischen Abteilung von PC-Soft ergibt sich folgender Lösungsweg:
- es muss der Foxpro OLE DB Treiber versendet werden.
Download ab hier: http://www.microsoft.com/en-us/download ... x?id=14839
Nur - das ist der Treiber aus FoxPro-Zeiten. Daher ist dieser Treiber nur bis und mit Windows XP einsetzbar.
PC-Soft ist darüber informiert. mal sehen, was die machen.
Workaround:
Mit dem internen Treiber von Windev umstellen (so kommen auch die memos mit). Anschliessend nachbearbeiten der logischen Felder.
Ich exportiere die .DBF in eine sdf-Datei mittels DbExport in Xbase. Eine Rutine scannt diese Datei durch und ersetzt so die logischen Werte an richtiger Stelle.
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Ich habe in anderen Export Fällen immer mit set alternate to, einer FOR NEXT Schleife und "?" genau den Datensatzaufbau erzeugt, den ich benötigt habe (SDF, SQL etc.)
DBEXPORT mag etwas schneller sein als die FOR NEXT, aber so ist man flexibler beim Format: 0/1 oder Ja/Nein bei logik Feld, Datum, Memo etc.
DBEXPORT mag etwas schneller sein als die FOR NEXT, aber so ist man flexibler beim Format: 0/1 oder Ja/Nein bei logik Feld, Datum, Memo etc.
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Das Problem hat nun eine Bearbeitungsnummer und wird irgendwann mal als Fix integriert. Grund ist übrigens nicht ein Fehler von Windev, sondern von Xbase-Seite her, da offensiochtlich nicht immer ein Wert in ein logisches Feld geschrieben wird. Heisst, dass der Inhalt NIL ist und nicht 0 (=false). Wieso dies nur sporadisch vorkommt, ist nicht klar, da das Erstellen der Datensätze mit APPEND BLANK entsteht.
Diese Tatsache hat mich zu einer Alternative gezwungen. Allerdings mit dem schönen Nebeneffekt, flexibel die Daten anpassen zu können.
Die Umwandlung von XBase zu WIndev verläuft nun 3-Stufig
1. Export aus Xbase
eventuelles Umwandeln zu Oem zu Ansi
Ergebnis: 2 Dateien, eine mit der Struktur (Erweiterung SDF) und die Andere mit dem Inhalt (Erweiterung TXT)
2. Umwandlungsprogramm geschrieben in Windev
Die Analyse beinhaltet dieselben Datenfelder aber mit den für Windev passenden Feldtypen. Hier sind bekanntlich wesentlich mehr Typen möglich.
Das ModifyFromSDF ersetzt die logischen Felder korrekt. Liest das DSF durch und bei einem logischen Feld wird der Wert im TXT gelesen und bei 1 auf true gesetzt sonst auf false.
3. Das eigentliche Programm erstellt nun die passenden Dateien beim ersten Aufruf
Die Dateien aus dem Transfeer werden ausserhalb der Analyse geladen. In der Analyse stehen die Dateien in der gewünschten Form (mehr Felder und auch fehlende Felder der Transferdateien).
Zusätzlich kann beim Einlesen auf ungültige oder nicht mehr benötigte Datensätze kontrolliert, welche nicht verarbeitet werden.
Dies kann nach HcopyRecord eingebaut werden und je nach Ergebnis lässt man den Hadd einfach weg!
Diese Tatsache hat mich zu einer Alternative gezwungen. Allerdings mit dem schönen Nebeneffekt, flexibel die Daten anpassen zu können.
Die Umwandlung von XBase zu WIndev verläuft nun 3-Stufig
1. Export aus Xbase
Code: Alles auswählen
DbeLoad( "SDFDBE" ) // Ergebnis: .T.
SET ORDER TO 0
SET FILTER TO
SELECT(1)
DbExport( cSDF,,,,,,, "SDFDBE" , ; // cSDF ist der Name der zu erstellenden Textdatei
{ {SDFDBE_LOGICAL_TOKEN, "10"} } )
Ergebnis: 2 Dateien, eine mit der Struktur (Erweiterung SDF) und die Andere mit dem Inhalt (Erweiterung TXT)
2. Umwandlungsprogramm geschrieben in Windev
Die Analyse beinhaltet dieselben Datenfelder aber mit den für Windev passenden Feldtypen. Hier sind bekanntlich wesentlich mehr Typen möglich.
Code: Alles auswählen
IF NOT HDBOpen("ZLMAND","MA",CompleteDir(EDT_Pfadalt)+"ZLMAND.DBF") THEN
Error("hdbopen zlmand nicht ok")
RESULT False
END
HChangeDir(Mandanten,EDT_Pfadneu)
HCreation(Mandanten,"","","",hChangeCharset)
// HDeleteAll(Mandanten)
HReadFirst("ZLMAND")
i=0
WHILE NOT HOut
IF HCopyRecord(Mandanten,"ZLMAND") THEN
HAdd(Mandanten)
i++
END
HReadNext("ZLMAND")
END
ModifyFromSDF("ZLMAND",EDT_Pfadalt,EDT_Pfadneu,False) // ersetzen logische Felder
3. Das eigentliche Programm erstellt nun die passenden Dateien beim ersten Aufruf
Die Dateien aus dem Transfeer werden ausserhalb der Analyse geladen. In der Analyse stehen die Dateien in der gewünschten Form (mehr Felder und auch fehlende Felder der Transferdateien).
Code: Alles auswählen
IF NOT HDeclareExternal(CompleteDir(EDT_Pfadalt)+"Trans_MAND.fic","TRMAND") THEN
Error("hdbopen zlmand nicht ok")
RESULT False
END
HChangeDir(Mandanten,EDT_Pfadneu)
HCreation(Mandanten,"","","",hChangeCharset)
HReadFirst("TRMAND")
i=0
WHILE NOT HOut
IF HCopyRecord(Mandanten,"TRMAND") THEN
HAdd(Mandanten)
i++
END
HReadNext("TRMAND")
END
HClose("TRMAND")
HCancelDeclaration("TRMAND")
Dies kann nach HcopyRecord eingebaut werden und je nach Ergebnis lässt man den Hadd einfach weg!
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Ist das nur nach Append blank (ab und zu) vorgekommen oder auch nach replace ... with .f. ?
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Ich habe es eben mal mit DBU durchgespielt und die DBF im Hexeditor geöffnet.
Append Blank hat ausschließlich Blanks an die Datei angehängt. Erst ein copy to ... oder ein Replace with .f. haben dann die Werte gesetzt.
Beim DBU dann auch 0.0 für die Zahlen. T und F stehen übrigens in der Datei, nicht 0 !
Append Blank hat ausschließlich Blanks an die Datei angehängt. Erst ein copy to ... oder ein Replace with .f. haben dann die Werte gesetzt.
Beim DBU dann auch 0.0 für die Zahlen. T und F stehen übrigens in der Datei, nicht 0 !
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Liegt es an Alaska ?
Weiterer Test mit Cli**er 5.2 DBU und gleiches Verhalten ...
Ein COPY TO oder (vermutlich) APPEND FROM beseitigen den Fehler (nur copy to probiert).
Damit kann man auch einfach die Anzahl der Datensätze einschränken bzw. bei APPEND FROM auch die Struktur ändern.
Weiterer Test mit Cli**er 5.2 DBU und gleiches Verhalten ...
Ein COPY TO oder (vermutlich) APPEND FROM beseitigen den Fehler (nur copy to probiert).
Damit kann man auch einfach die Anzahl der Datensätze einschränken bzw. bei APPEND FROM auch die Struktur ändern.
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Hubert, ich kanns dir nicht sagen. Die Fehler ereignen sich direkt aus dem in Xbase erstellten Code (APPEND-Befehl). Aber eben nicht immer... Von da her gesehen vermute ich deine Annahme, dass Xbase da nicht immer korrekt arbeitet.
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Hallo Herbert,
ich hatte mich falsch ausgedrückt, Xbase++ verhält sich wie Cli**er !
Append Blank erzeugt nur einen Satz mit Blanks, erst ein REPLACE auf das Feld speichert die Formatierung die nötig ist.
Ein COPY TO repariert aber eine DBF auf jeden Fall.
ich hatte mich falsch ausgedrückt, Xbase++ verhält sich wie Cli**er !
Append Blank erzeugt nur einen Satz mit Blanks, erst ein REPLACE auf das Feld speichert die Formatierung die nötig ist.
Ein COPY TO repariert aber eine DBF auf jeden Fall.
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Bist du sicher? Ein COPY TO... SDF macht dies jedenfalls nicht.
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
ein copy to SDF habe ich nicht ausprobiert, ich sprach von DBF Dateien und dem internen Aufbau.
Nach meinen Tests (Testprogramm habe ich im Xbase Forum veröffentlicht) hat ein COPY TO (ohne SDF) eine DBF erzeugt die intern alle Felder richtig darstellt.
... wobei ich probiere es mal:
so stellt sich die SDF Datei dar, statt der Blanks sind hier 0.00 bei den Zahlen und T/F bei logischen Feldern, was will man mehr ?
Nach meinen Tests (Testprogramm habe ich im Xbase Forum veröffentlicht) hat ein COPY TO (ohne SDF) eine DBF erzeugt die intern alle Felder richtig darstellt.
... wobei ich probiere es mal:
Code: Alles auswählen
1234567890F 0.00
T 0.00
F 0.00
F# 0.00
F 1.00
F 0.00
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Hm. Was heist bei dir "Blanks"? Der Wert NIL?
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Hallo Herbert,
den Wert NIL gibt es DBF / Text Dateien gar nicht. Ein Blank ist ein chr(32) bzw. chr(0x20), auch als Leerzeichen oder SPACE(1) bekannt.
Wenn eine Variable in Xbase++ NIL ist, dann ist sie vom Typ unbestimmt, für API Aufrufe wird das zu einem Null-Pointer ( 0 statt einer gültigen Speicheradresse).
Falls du die alte Funktion BLANK() aus den XbToolsIII meinst, die erzeugt eine Variable des übergebenen Typs, aber mit LEEREM Wert:
N => 0
D => leeres Datum etc.
C => ""
Ich wollte nur erwähnen, dass man mit COPY TO eine Exportdatei erzeugen kann, die Feder mit definiertem Inhalt erhält.
den Wert NIL gibt es DBF / Text Dateien gar nicht. Ein Blank ist ein chr(32) bzw. chr(0x20), auch als Leerzeichen oder SPACE(1) bekannt.
Wenn eine Variable in Xbase++ NIL ist, dann ist sie vom Typ unbestimmt, für API Aufrufe wird das zu einem Null-Pointer ( 0 statt einer gültigen Speicheradresse).
Falls du die alte Funktion BLANK() aus den XbToolsIII meinst, die erzeugt eine Variable des übergebenen Typs, aber mit LEEREM Wert:
N => 0
D => leeres Datum etc.
C => ""
Ich wollte nur erwähnen, dass man mit COPY TO eine Exportdatei erzeugen kann, die Feder mit definiertem Inhalt erhält.
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Datenübernahme von Xbase zu Windev
Alles klar. Nein, Tools habe ich nie verwendet.