Seite 1 von 2

Überprüfung der richtigen Datensatz-Reihenfolge in dbase

Verfasst: 13.11.2008 11:22
von wolfde
Hallo liebe PureBasic-Gemeinde!

Wir arbeiten in meinem Unternehmen mit Adress-Datenbanken von bis zu 750.000 Datensätzen. Das Programm für die Optimierung von Pressepost-Sendungen mit der Deutschen Post AG hat einen Bug, der derzeit nicht zu beheben ist. Die Daten kommen augenscheinlich korrekt als txt-Datei aus dem Pressepostprogramm. Wir müssen sie dann noch in Access weiterverarbeiten, um sie für den Druck aufzubereiten. Der Bug ist, dass sich die Reihenfolge der Datensätze verändert, wenn sie in Access oder dbase importiert werden. Wir können die korrekte Reihenfolge zwar erzwingen, wenn wir das Feld mit der laufenden Nummer indizieren. Aber ich vertraue nicht darauf, dass die Daten dann immer 100 %ig richtig rauskommen. Der Schaden, der entstehen kann, könnte für unser Unternehmen ruinös sein.

Deshalb suche ich nach einer Möglichkeit, eine dbase-Datei (wir exportieren die Daten in dbase, da sie so von dem Produktionsdrucker benötigt werden) darauf zu kontrollieren, ob die Reihenfolge eines Feldes von der ersten bis zur letzten Adresse absolut korrekt ist. Könnte das eine Aufgabe sein, die mit PureBasic zu erledigen ist?

Vielen Dank für Antworten auf die Frage. Für konkrete Hilfe könnte ich mir auch durchaus vorstellen, einen bezahlten Auftrag zu vergeben.

Aber ich würde auch gerne lernen und verstehen :) .

Liebe Grüße aus Hannover

Re: Überprüfung der richtigen Datensatz-Reihenfolge in dbase

Verfasst: 13.11.2008 11:38
von Kiffi
Noch mal für mich zur Klärung: Du redest von einer Feldverschiebung, nicht
von einer Datensatzverschiebung? Sprich: Feld 5 erscheint ab und zu im
Feld 4 oder im Feld 6 (alle nachfolgenden Felder verschieben sich dann
ebenso). Ist das korrekt?

Die einzige Möglichkeit, die mir hier einfällt ist, dass die Felder in der
Textdatei mit einem Feldtrenner (beispielsweise einem Semikolon)
getrennt sind und in einem dieser Felder eben dieser Feldtrenner
vorkommt.

Normalerweise werden die Felder in diesem Fall mit Textbegrenzern
umschlossen (beispielsweise mit 'Gänsefüßchen'). In diesem Fall kann
das Programm, dass die Daten importiert, die Feldtrennzeichen innerhalb
eines Feldes als 'normales' Zeichen interpretieren.

Kleines Beispiel:

Code: Alles auswählen

Feld1: Dies ist ein 
Feld2: unsinniger Text; allerdings 
Feld3: sehr fehleranfällig
wenn wir nun diese 3 Felder mit Semikolon separiert als CSV darstellen
wollen, ergibt sich diese Konstellation:

Code: Alles auswählen

Dies ist ein;unsinniger Text; allerdings;sehr fehleranfällig
jedes Programm, das diese Zeile interpretiert, wird 4 Felder erkennen,
da in Feld 2 das Semikolon als Textbestandteil vorkommt.

aus diesem Grund müssen die Felder mit Textbegrenzern versehen werden:

Code: Alles auswählen

"Dies ist ein";"unsinniger Text; allerdings";"sehr fehleranfällig"
Das umschliessen der Felder mit Textbegrenzern muss allerdings von
dem Programm, das die Daten exportiert, vorgenommen werden.

Grüße ... Kiffi

Verfasst: 13.11.2008 11:53
von wolfde
Es geht nicht um eine Verschiebung der Felder, sondern der Datensätze. Beispiel: Datensätze 1-850 werden korrekt hintereinander geschrieben. Aber dann folgt 3450 bis 4532 und dann geht es wieder mit 851 weiter usw.

Verfasst: 13.11.2008 11:56
von Kiffi
wolfde hat geschrieben:Es geht nicht um eine Verschiebung der Felder, sondern der Datensätze.
ok, sind die Datensätze denn durchnummeriert? Sprich: Steht beispielsweise
an erster Stelle eine fortlaufende Nummer?

Grüße ... Kiffi

Verfasst: 13.11.2008 11:58
von NicTheQuick
Normalerweise sollte man Datensätze nicht abhängig von ihren Positionen in der Datenbank
machen, sondern immer eine mitlaufende eindeutige ID vergeben. Damit wäre es dann egal,
wie die Daten geordnet sind, da jeder Datensatz seine eigene ID hat.

Falls es nicht mit ID geht:
Sind die Daten nach einem bestimmten Schema geordnet oder gar ungeordnet in der DB.
Wenn sie nach einem bestimmten Schema geordnet sind, müsste man sie eben nachträglich
neu sortieren. Da könnte natürlich auch PB helfen. Es ist nur fraglich, wie schnell das bei
750.000 Einträgen gehen wird.

Verfasst: 13.11.2008 11:59
von wolfde
Ja, sie sind durchnummeriert. Dieses Feld indizieren wir auch. Dann ist die Reihenfolge a u g e n s c h e i n l i c h korrekt. Aber ich traue dem Frieden nicht - bei so großen Datenmengen. Und das lässt sich auch nicht mehr durch manuelles scrollen kontrollieren.

Verfasst: 13.11.2008 12:02
von Kiffi
wolfde hat geschrieben:Ja, sie sind durchnummeriert.
Dann sortiere die Datensätze doch einfach:

Code: Alles auswählen

Select * From DeineTabelle Order By DeineNummer
Dann sind sie nicht nur augenscheinlich in der richtigen Reihenfolge ;-)

Grüße ... Kiffi

Verfasst: 13.11.2008 12:06
von wolfde
Ich habe mal ein paar Datensätze kopiert. So sieht das aus:

"LFDNR";"BundNR";"BWM";"Titel/Ausgabe.Beleglesezeile";"ZUSTPLZORT";"ZUSTADR";"Firma2";"Firma1";"Firma3";"REF Nr";"PREMIUMADRESS"
"1";"1";"Bund";"*11111#10464074#0309*";"50189 Elsdorf";"Fröbelstr. 3d // 17";"Vorname Zuname";"Anrede";"";"778855";"4445411914002B67..."
"2";"1";"Bund";"*11111#10351600#0309*";"50189 Elsdorf";"Gesoleistr. 112";"Vorname Zuname";"Anrede";"";"622336";"4445411914002B67..."
"3";"1";"Bund";"*11111#10483521#0309*";"50189 Elsdorf";"Zum Bahnert 7";"Vorname Zuname";"Anrede";"";"806610";"4445411914002B67Ä..."

(Die Felder "Vorname Zuname" und "Anrede" habe ich immer mit eben diesen Wörten belegt, um aus datschutzrechtlichen Gründen die Daten unkenntlich zu machen.)

Edit by NicTheQuick: Zeilen gekürzt

Verfasst: 13.11.2008 12:08
von wolfde
Tut mir leid für die wahrscheinlich ziemlich ahnungslos erscheinende Frage, aber: kann ich die dann über PureBasic auch als dbase-Datei ausgeben lassen?

Verfasst: 13.11.2008 12:10
von Kiffi
wolfde hat geschrieben:Ich habe mal ein paar Datensätze kopiert. So sieht das aus:
ja, wie geschrieben:

Code: Alles auswählen

Select * From DeineTabelle Order By LFDNR
Die Datensätze vor dem Import zu sortieren ist unsinnig.
Das ist Aufgabe der Datenbank.

Grüße ... Kiffi

// Edit: wolfde, bitte editiere Deinen Beitrag oben mal und verkürze die
Feldinhalte. Die überlangen Zeilen reißen das Layout des PureBoard
auseinander und somit ist das Lesen der Beiträge sowie anklicken der
Buttons rechts ohne scrollen nicht mehr möglich..


// Edit2: Danke, @NTQ :allright: