[gelöst] Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 09:27

Hallo allerseits,

wir benutzen 4.03 mit der nativen Datenbank. Nun möchte ich (zu Administrationszwecken) die Datenbankgröße und den "Füllstand" der Datenbank auswerten bzw. anzeigen. Das geht ja über ->Datei ->Datenbank ->Infornationen. Geht das irgendwie auch zur Laufzeit im Programm? Ich hab in der Doku nichts finden können.

Vielen Dank
Zuletzt geändert von elf am 9. Dezember 2011 11:01, insgesamt 1-mal geändert.

Re: Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 09:35

Auf SQL-Basis hättest du bestimmt eine Chance gehabt, aber "native" ist mir kein Weg bekannt.
Naja, höchstens die Größe der fdb-Datei könntest du auswerten, aber das sagt nichts über die Belegung aus.

Re: Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 09:57

Man könnte beispielsweise die temporäre Tabelle 2000000028 "Table Information" nehmen und dort das Feld "Size (KB)" in Summe über die ganze Tabelle auswerten. Das sollte Pi mal Daumen stimmen. :-)

mfg,
winfy
Zuletzt geändert von winfy am 9. Dezember 2011 09:59, insgesamt 1-mal geändert.

Re: Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 09:59

Ähem :oops: :-P

Re: Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 10:03

Hallo Natalie,

ganz exakt ist das glaube ich auch nicht aber so ungefähr sollte das stimmen.

mfg,
winfy

Re: Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 10:05

Also die Größe der Datenbankdatei(en) krieg ich über die Tabelle 'Database File' (2000000010) raus. Das mit den einzelnen Files Pi mal Daumen/Fensterkreuz hab ich auch schon angedacht. Ich dachte es gäbe vielleicht einen direkten Weg die Belegung rauszukriegen. Immerhin "kennt" Navi diese Zahl ja (siehe ganz oben).

Re: Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 10:22

Ich habe noch folgende Lösung gefunden: http://www.mibuso.com/howtoinfo.asp?FileID=3

Im Prinzip der selbe Ansatz, aber hier wird noch die BLOB Größe in der Objekttabelle (Tabelle 2000000001) in Kilobyte dazugezählt.

Luc Van Dyck hat geschrieben:Sometimes you want to give a warning when database usage is getting close to the database size.
eg. For large batch operations, it becomes almost impossible to execute properly, when the database has reached 99% of the database size.

Therefore you need to calculate the database usage and database size, using C/AL code.

These routines does just that, but they can't be 100% accurate. This is caused by BLOB-fields in objects, as they are stored in a compressed form (by using a pkzip algorithm and removing 0's and trailing blanks). Hence there is a difference in the used (KB) figures according to the Database - Information form.



Code:
fctGetDbUsage() : Decimal
lrecTableInfo.FIND('-');
REPEAT
  ldecDbUsed := ldecDbUsed + lrecTableInfo."Size (KB)";
UNTIL lrecTableInfo.NEXT = 0;

lrecObject.FIND('-');
REPEAT
  ldecDbUsed := ldecDbUsed + (lrecObject."BLOB Size" / 1024);
UNTIL lrecObject.NEXT = 0;

EXIT(ldecDbUsed);


Allerdings geht das sicher noch etwas performanter, indem man bei der Ermittlung der BLOB Größe die Division aus der Schleife nimmt.

mfg,
winfy

Re: Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 11:01

ja, das geht und ist ein Näherungswert. Für meine Bedürfnisse wird das reichen.

Vielen Dank Euch

Re: [gelöst] Datenbankgrösse zur Laufzeit ermitteln

9. Dezember 2011 22:36

Hallo,

also die Größe der DB-Dateien bekommst du über die Tabelle "Database File" (ist nicht im Objektdesigner sichtbar,geht nur über Formdesigner)

Gruß, Fiddi

Re: [gelöst] Datenbankgrösse zur Laufzeit ermitteln

10. Dezember 2011 09:45

Hallo Fiddi,

das hab' inzwischen schon rausgekriegt, steht auch weiter oben im Thread beschrieben, Danke trotzdem.

Ich habe das bezüglich der Belegung jetzt so gelöst wie von winfy beschrieben, funzt gut und ist auch schnell genug .