Struktur / ForEach

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

einfach mal so drüber philosofiert...

eigentlich müßten doch beide Datenbanken ein Änderungsdatum tragen,
wann der letzte Schreibzugriff stattgefunden hat.
das sollte eigentlich selbstverständlich sein, bei jedem Datenbanksystem.

... irgendwie erscheint mir halt doch der Ansatz die Datensätze händisch zu vergleichen etwas ... umständlich.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

@TheSaint

Das Problem ist, daß keiner Deine Datenbank(en) kennt. Vorgehensweisen gibt's dafür unendlich viele.
Mit der Auflistung der benötigten Inhalte deiner Datenbank hast schon mehr oder weniger eine Struktur. Wobei da nicht wirklich alles bräuchtest.
Wie auch immer, ofensichtlich fehlen Dir noch einige Grundkenntnisse, daher solltest besser mit einfacheren Dingen anfangen.
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Theex,

Danke für Deine Antworte.
Tja, da hast du recht, bin halt noch Anfänger.

Vielen Dank und viele Grüße
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

TheSaint hat geschrieben:Also die Datenbank besteht aus 160 Tabellen.
musst Du wirklich alle Daten aller Tabellen auf einen Schlag einlesen?
Das ist eigentlich eher unüblich.

Die meisten Datensätze einer Tabelle dürften mit anderen Datensätzen
anderer Tabellen in einer Beziehung stehen (Stichwörter Primary-Key und
Foreign-Key). Da könnte ein sinnvoller SQL-Query so manche Tabellen
miteinander 'joinen'.

Code: Alles auswählen

Select [felder] From [tabelle] Inner Join ...
Grüße ... Kiffi
a²+b²=mc²
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

jear hat geschrieben:@TheSaint

Nee, das wird noch doller. Nun durchläuft das Ganze die Schleifen n1 * n2 * n3 mal und es ändern sich immer nur die Angaben aus der Liste, deren Index sich gerade ändert.

Für Dein Problem gibt es verschiedene Lösungen, je nach Anforderungen.

Wenn alle 3 Listen genau die gleiche Anzahl Mitglieder haben und die zusammengehörenden Informationen unter dem jeweils gleichen Listenindex liegen, dann kannst Du auch mit dem Listenindex einer der Listen in die anderen Listen greifen.

etwa so:

Code: Alles auswählen

ForEach Liste1()
  ix = ListIndex(Liste1())
  SelectElement(Liste2(), ix) : SelectElement(Liste3(), ix)
  ; nun stehen alle 3 Listen "parallel" und man kann die Strukturfelder auslesen
Next
Es fragt sich dann aber, warum nicht nur eine Liste mit den drei Strukturen?

Wenn die Listen nicht auf diese Art "parallel" organisiert sind, kann man sie sowieso nur nacheinander auslesen.

Gibt es Ordnungsmerkmale, die den Zusammenhang zwischen bestimmten Mitgliedern definieren, dann muss man die Listen immer wieder nach diesen Merkmalen durchsuchen oder aber von vornherein eine weitere Liste der Indizes anlegen, die diese Zusammenhänge beschreiben.
Habe das jetzt umgesetzt, mit folgenden Codezeilen kann ich
auf alle Informationen zugreifen.

Code: Alles auswählen

        lId = ListIndex(DB2Zeile())
          SelectElement(DB2Zellinh(), lId) : SelectElement( DB2Tab(), lId)
Vielen Dank jear und auch allen anderen.

Viele Grüße
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Kiffi,

vielen Dank für Deine Antwort.

In Access 2003 VBA habe ich dies bereits einmal umgesetzt.
Ich habe zwei komplette Datenbanken miteinander verglichen.

Leider musste ich hierbei feststellen, das bei einem Vergleich
der SQL - Befehl zu lang geworden ist und SQL hier eine
Fehlermeldung brachte. "SQL-String" zu lang.
Hier habe ich mich dann beholfen, in dem ich die Tabellenspalten
in 40er Blöcke aufgeteilt habe und anschließend verglichen habe.

Nun dachte ich, da ich für das Einlesen einer gesamten Datenbank
ca. 22 Sekunden in PureBasic brauchte, den Vergleich der beiden
Datenbanken über PureBasic zu machen.

Das einlesen der beiden Datenbanken hat im moment nur
max 50 Sekunden gedauert.
Es sind ca 800000 Zelleninhalte der einzelnene Tabellen, bzw.
300000 Tabellenzeilen.

Das einzige was ich in PureBasic noch nicht so hinbekomme,
war, wie ich die Informationen bei mehreren Strukturen und LinkedListen verbinde und sie abrufe.

Nun bin ich dabei den Vergleich hin zu bekommen.

Vielen Dank nochmals für Deine Hilfe und viele Grüße
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

TheSaint hat geschrieben:Ich habe zwei komplette Datenbanken miteinander verglichen.
es geht nur um den Vergleich zweier Datenbanken? Das könnte man IMO
auch einfacher und flexibler hinbekommen.

Grüße ... Kiffi
a²+b²=mc²
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Kiffi hat geschrieben: es geht nur um den Vergleich zweier Datenbanken? Das könnte man IMO
auch einfacher und flexibler hinbekommen.
Würdest Du mich in Dein Geheimnis einweihen, wie es schneller und einfacher geht?

Brauche ja auch die Veränderungen in der Datenbank.

Viele Grüße
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

TheSaint hat geschrieben:Würdest Du mich in Dein Geheimnis einweihen, wie es schneller und einfacher geht?
jop, ich bastel da mal was...

Grüße ... Kiffi
a²+b²=mc²
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Kiffi hat geschrieben:
TheSaint hat geschrieben:Würdest Du mich in Dein Geheimnis einweihen, wie es schneller und einfacher geht?
jop, ich bastel da mal was...
Super. Bin mal gespannt.

Vielen Dank und viele Grüße
Antworten