Entwickler-Ecke

Datenbanken - Max Datensatzanzahl in Paradox-DB


derfnam - Fr 13.02.04 18:27
Titel: Max Datensatzanzahl in Paradox-DB
Hi Leute,

ich bin dabei, eine Anwendung mit einer riesigen Refferenztabelle zu erstellen. Dazu habe ich eine Paradox-Tabelle mit 20 Feldern erstellt und diese dann zu Testzwecken mit Daten gefüllt. Nun mein Problem: Bei ~262000 Datensätzen bekomme ich die Meldung, das keine weiteren Datensätze hinzugefügt werden können. Da aber geplant ist, mehr als das dreifache an Daten unterzubringen stehe ich nun vor einem Problem.
Die Datenbank hat hat dann eine Größe von ~255MB.
Wenn Paradox nicht mehr Daten verwalten kann, welche könnte es dann?

Ach so, das ganze passiert unter Delphi 7.

Wäre schön, wenn jemand einen Tip für mich hätte


tomtom62 - Fr 13.02.04 19:07

Für solche Datenmengen solltest Du eine "richtige" Datenbank nehmen. Probier mal Firebird (Interbase-Clone).

Ist kostenlos und ein paar, wenn auch nicht übermässig gute, Komponenten dafür sind bei Delphi auch schon dabei...


grayfox - Sa 14.02.04 13:57

hallo manfred!

starte den BDE-Administrator, wähle das register 'Configuration', klick auf das plus vor drivers und dann native, wähl paradox aus und ändere die blocksize von 2048 auf 32768 und den level auf 7.
somit dürfen die paradox-tabellen 2.147.483.647 byte gross werden. wieviele datensätze das sind hängt von der anzahl, dem typen und der grösse der stringfelder deiner tabellen ab

achtung: die änderungen werden erst ab der nächsten angelegten tabelle wirksam, da die blocksize von bestehenden tabellen nicht geändert werden kann --> neue tabelle anlegen und deine daten dorthin übernehmen...

mfg, stefan


derfnam - Mo 16.02.04 07:50
Titel: Danke
Hallo Stefan,

der Tip hat wunderbar hingehauen.
Ich bekomme nun über 2Mio Einträge in meine Datenbank. Das sollte ersteinmal genügen.

Vielen Dank noch mal.

mfg

Manfred


grayfox - Di 17.02.04 00:20

hallo fred! :)

freut mich, dass ich dir weiterhelfen konnte. jetzt kannst wieder eine ganze menge daten in deiner tabelle unterbringen ;)

mfg, stefan


tsd - Sa 23.05.20 18:33

Hallo,
Jahre später muß ich noch mal in die alte Datenbank rein.

Delphi 2010, Paradox 4.0, Abfrage funktioniert: Daten aus einer Haupttabelle und ein paar weiteren Tabellen werden über eine Abfrage zusammen gesammelt und sollen in einem Unterformular für die Details angezeigt werden.

Problem: Das klappt alles bis Datensatz 32768. Bei Datensatz 32768 und höher werden nur die Daten angezeigt, die aus der Haupttabelle stammen. Die Daten der anderen Tabellen werden im Detailformular nicht angezeigt. Diese Daten sind aber vorhanden.

Danke fürs Reindenken!


Viele Grüße
Thomas


mandras - Sa 23.05.20 22:22

Guten Abend,

da ich den Aufbau Deiner DB nicht kenne ist meine Vermutung reinste Spekulation.
Kann es sein daß die Detaildatensätze mittels eines short-Int-Feldes auf den
Datensatz der Haupttabelle zeigen und aus irgendwelchen Gründen schon bei 2^15 das nicht mehr
richtig funktioniert? Dann als Datentyp einen 32Bit-Int-nehmen


tsd - So 24.05.20 03:42

Vielen Dank Mandras, das muß ich prüfen - liegt auf der Hand, gute Idee!
Genau das war der Grund: Ich hatte per parambyname den Parameter befüllt und assmallint verwendet. Jetzt habe ich asinteger dafür eingesetzt und alles funktioniert.

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt


tsd - So 24.05.20 09:43

gibt‘s denn eine Möglichkeit, sich so was von Delphi beim Compilieren anzeigen zu lassen als Fehlerquelle? Delphi kann es ja eigentlich nicht wissen, was da für Werte ankommen?

Auch bei der Programmausführung gab‘s keine Fehlermeldung. Wahrscheinlich ist die Abfrage mit irgendeinem unsinnigen Wert durchgeführt worden, der natürlich nicht gefunden wurde. Weiß jemand, welcher Wert da übertragen wird , wenn smallint z.B. mit dem Wert 40.000 belegt wird?


ub60 - So 24.05.20 11:06

user profile icontsd hat folgendes geschrieben Zum zitierten Posting springen:
Weiß jemand, welcher Wert da übertragen wird , wenn smallint z.B. mit dem Wert 40.000 belegt wird?

Das kannst Du selber testen:


Delphi-Quelltext
1:
2:
3:
4:
5:
var i: Smallint;
begin
  i:=StrToInt(Edit1.Text);  // Hier 40000 eingeben.
  ShowMessage(IntToStr(i));
end;

Hier konkret kommt -25536 heraus.

ub60


tsd - So 24.05.20 19:18

und eine Syntaxprüfung oder Compilierhilfe gibt‘s da nicht, die das automatisch prüft und beim Compiliere meldet?


ub60 - So 24.05.20 23:14

user profile icontsd hat folgendes geschrieben Zum zitierten Posting springen:
und eine Syntaxprüfung oder Compilierhilfe gibt‘s da nicht, die das automatisch prüft und beim Compiliere meldet?


Prinzipiell kann Delphi das. Hier gäbe es z.B. schon einen Fehler beim Compilieren.

Delphi-Quelltext
1:
2:
3:
4:
5:
var i: Smallint;
begin
  i:=40000;  // Hier gibt es schon beim Compilieren einen Fehler!
  ShowMessage(IntToStr(i));
end;


Leider habe ich keine Ahnung, wie das bei Paradox geregelt ist.

ub60