Autor Beitrag
gerd8888
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Mi 25.04.12 16:02 
Das ist eine Datenbank, die man dafür einsetzt:
(1) wenn man die Daten so abspeichern will, dass man nur die erforderliche groesse abspeichert.
(2) die daten nicht doppelt einträgt, sondern datenzeiger darauf verweisen laesst.

und schliesslich

(3) man kann die daten auch suchen

Das mit der Datenbank-Klasse ist eine gute Idee. Das habe ich jetzt realisiert und
a) das alte Programm war nach dem Neustart durch filesize:=0 praktisch unbrauchbar, da die daten dann gelöscht wurden
b) wurde jetzt die procedure einfuegen schneller gemacht.

Kurzes Beispiel zu dem neuen Programm:
Es wurden in dem Beispiel 2 Felder festgelegt.
Es gibt 2 Edit Felder.
Da gibt man z.B. ein

Edit1: A
Edit2: 1

dann den Button eintragen.

Edit1: B
Edit2: 2

und

Edit1: A
Edit2: 3

Dann den Ausgabe Button.

Programm verlassen und man kann wieder durch ausgabe seine Daten sehen.

Desweiteren kann man anschliessend

edit1: A

Dann suche Button drücken

dann muesste er die ID1 und ID3 ausgeben

jetzt habe ich noch ein paar Fehler behoben.

Moderiert von user profile iconNarses: Titel vom neuen Topic übernommen, war: "mein datenbanksystem (komplettes programm mit source)".
Moderiert von user profile iconNarses: Anhänge aus dem neuen Topic hier eingefügt, getrennt nach Quelltext und Binary.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von gerd8888 am Mo 30.04.12 23:18, insgesamt 3-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 25.04.12 16:06 
Moin!

Gib bitte einen direkten Downloadlink an, wie es die Regeln für diese Sparte vorgeben. Alternativ und noch besser: du lädst dein Projekt hier als Anhang hoch! :idea: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Mi 25.04.12 18:04 
Hallo narses,

ich habe jetzt nochmal eine neue version drauf geladen.

(Das mit dem Direktdownload will ich kurz erklären, warum ich auf eine unterseite von mir geleitet habe:
weil npage beim download der datei datenbank-system.zip dann seite/datenbank-ststem.zip_2838383
und wenn ich die datenbank system.zip nochmal drauf spiele dan seite/datenbank-system.zip_84848484
eine andere Nummer vergibt und dann der Link nicht mehr gehen würde)

Also hoffentlich stoert es Dich nicht, wenn ich hier jetzt eine neue Version als Anhang sende.

Jetzt habe ich noch einige Fehler entdeckt.
Meine neue Version macht jetzt 100 zufaellige Eintraege auf ein Feld und jetzt klappt es.

Aber meine eigentliche Frage ist:
Welche Strategien gibt es, um das schneller zu machen.


Zuletzt bearbeitet von gerd8888 am So 29.04.12 22:42, insgesamt 1-mal bearbeitet
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Fr 27.04.12 23:48 
Ich stelle kurz mal die dynamsche datenbank vor:

Man braucht nur die Anzahl der Felder eingeben.
Danach gibt man seine Daten beliebiger Laengen ein.

Das Besondere, diese Daten werden auch nur mit dieser Laenge gespeichert.
Die html-doc habe ich aus zeitgruenden jetzt nicht auf dieses neue programm umgeaendert.

Was ich noch machen will:
1. hashtable auf die daten bezogen, damit praktisch es keine suche mehr gibt, sondern einen direktzugriff (hash und datenzeiger)
2. auf die von.dat und nach.dat nochmal zeiger in einer tabelle, um staendiges umschreiben zu verhindern. (Das bewirkt, dass die
eingabe schneller wird) Mich stoert das zB gar nicht, da ich nicht 1000 Daten auf einmal eingebe.

und natuerlich fehlt noch das Löschen bzw. umschreiben, was ich als naechstes machen will.
Aber das Grundgeruest funktioniert.


Zuletzt bearbeitet von gerd8888 am So 29.04.12 22:42, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 29.04.12 09:03 
Könntest du da mal ein bissel weiter erläutern, wofür man das jetzt praktisch einsetzen könnte? Bisher sehe ich da nur, dass irgendwelche Strings auf komplizierte Art und Weise in Dateien gespeichert werden. :gruebel:

Dann scheint es so, als könnte damit nur eine Tabelle verwaltet werden - das reicht für eine komplette Datenbank ja nicht aus. Wo ist da jetzt der Unterschied zu einem File of Record oder ähnlichem?

Und nicht zuletzt: Das Projekt ist so nicht benutzbar, da du alles in der Unit1 machst. Wenn jemand anderes dein Datenbanksystem verwenden möchte, um in einem anderen Projekt die nötigen Daten zu verwalten, wird er kaum deine Form verwenden wollen. Warum schreibst du nicht eine Datenbank-Klasse, deren Methoden dann von der Form aufgerufen werden? Besonders, wenn du das Projekt erweitern willst, kommst du mit dem Ansatz wahrscheinlich nicht besonders weit. :)

_________________
We are, we were and will not be.

Für diesen Beitrag haben gedankt: FinnO
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: So 29.04.12 21:40 
löschen


Zuletzt bearbeitet von gerd8888 am So 29.04.12 22:45, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 29.04.12 22:34 
Moin!

Aktualisiere bitte dein Programm im ersten Beitrag des Threads, so wie es die Regeln für diese Sparte vorsehen. Danke. ;)

Grund: So muss nicht jeder immer den ganzen Thread durchlesen, um an die aktuellste Version deines Programms zu kommen. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Blup
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 174
Erhaltene Danke: 43



BeitragVerfasst: Do 10.05.12 13:44 
Ich habe mir die Mühe gemacht den Quelltext anzuschaun und wurde enttäuscht.

Keine Spur von einer Datenbank, ich habe den Eindruck der Ersteller hat keine Vorstellung was eine Datenbank eigentlich ist.
Ein System ist es auch nicht, es ist nur eine Klasse enthalten. Diese hat eine Reihe von Funktionen und Feldern und alle sind public.
Dokumentation ist nicht vorhanden.
Die Klasse legt im Verzeichnis des Programms einen Unterordner mit einigen Dateien an, um dort Name-Wert-Beziehungen zu speichern. Die Namen der Dateien oder das Verzeichnis kann man nicht beeinflussen.

Es wird nichts geboten, was eine TStringList nicht schneller oder besser könnte.

user profile icongerd8888 hat folgendes geschrieben Zum zitierten Posting springen:
löschen

Der einzige sinnvolle Zweck erscheint mir, der Ersteller hat sich ein wenig mit dem Lesen und Speichern in Dateien beschäftigt. Es fehlt einfach die nötige "Schöpfungshöhe" für "Open Source Projekte". Deshalb schlage ich vor, das Thema entgültig zu löschen.
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Do 10.05.12 14:05 
user profile iconBlup hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mir die Mühe gemacht den Quelltext anzuschaun und wurde enttäuscht.


habe ich auch - ich wurde nicht enttäuscht ich habe das gefunden was ich bei dem Titel und den Postings zu erwarten hatte.

user profile iconBlup hat folgendes geschrieben Zum zitierten Posting springen:

Der einzige sinnvolle Zweck erscheint mir, der Ersteller hat sich ein wenig mit dem Lesen und Speichern in Dateien beschäftigt. Es fehlt einfach die nötige "Schöpfungshöhe" für "Open Source Projekte". Deshalb schlage ich vor, das Thema entgültig zu löschen.


Wie? Fangen wir hier jetzt schon mit Zensur an? Wenn dann verschieben aber sicherlich nicht löschen.

Ich bin mit Tipps für Forenmitglieder schon mächtig auf die Nase gefallen, deshalb habe ich bisher nichts geschrieben, aber jetzt kommts halt doch: @ Gerd: kauf dir ein Bcuh /lass dir eines schenken, das Grundlagen zu DBMS (nicht deren Anwendung also SQL und so) beinhaltet. Da findest Du sicherlich auch was im Internet. Du hast hier kein Datenbanksystem, sondern eine etwas komplizierte Speicherung von Daten in einer Datei gemacht. Das gabs schon zu Pascal-Zeiten...

Grüße
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 10.05.12 14:12 
Ich grätsche jetzt einfach mal dazwischen, bevor es hier ins OT abdriftet:

In der OpenSource-Sparte wird nichts gelöscht, weil es irgendwelchen Mindeststandards oder Qualitätsansprüchen nicht genügt. Wir werden damit auch nicht anfangen. Da hier auch keine Frage gestellt wird, sehe ich auch keine Möglichkeit, das irgendwoanders hin zu verschieben.

Sollte dazu Diskussionsbedarf bestehen, kann das in einem seperaten Topic getan werden (hoffentlich aber nicht :mrgreen:).

Danke, weitermachen. :D

_________________
We are, we were and will not be.
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Di 15.05.12 18:44 
Jetzt habe ich nochmal alles verbessert:

Ich stelle hier meine relationale Datenbank vor:

Man kann die Daten ganz normal
1.abspeichern
2.überschreiben
3.löschen. (einfach edit Felder leer lassen)

Es werden alle Daten dynamisch reingeschrieben.






Also Beispiel habe ich 3 Felder hergenommen:

z.B.

ID1

Herr Anton Maier

[Button Eintrag]

ID2

Herr Thomas Maier

[Button Eintrag]


Das besondere an der Datenbank ist, dass im Feld 1 das Wort Herr nur einmal abgespeichert wird. Und Maier natuerlich auch nur 1 mal.
Damit ist eine schnelle Suche möglich.

Beim ueberschreiben werden die Datenzeiger gelöscht bzw. verbogen.


Gibt man dann im edit1 "Herr" und laesst die anderen beiden leer, dann bekommt man beide angezeigt.
Die Suche ist derzeit mit einer UND-Verknuepfung versehen.
Beispiel:
edit1 "Herr"
edit2 "Thomas"

dann bekommt man nur ID2 als Ausgabe bei der Suche.

Ich habe alles etwas in der html-Seite dokumentiert.

Gerd

Moderiert von user profile iconNarses: Anhang in den ersten Beitrag verschoben, siehe oben.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 15.05.12 19:42 
Was genau soll denn der Zweck dieser Klasse sein? Als Übungsprojekt ist es nicht so schlecht, aber ich frage mich, ob du der Meinung bist, dass das auch in der Praxis anstelle von echten Datenbanken Sinn macht. :gruebel:

Deshalb nehme ich dich mal beim Wort: ;-)
user profile icongerd8888 hat folgendes geschrieben Zum zitierten Posting springen:
Das besondere an der Datenbank ist, dass im Feld 1 das Wort Herr nur einmal abgespeichert wird. Und Maier natuerlich auch nur 1 mal.
Damit ist eine schnelle Suche möglich.
Von der Geschwindigkeit her ist sie um Größenordnungen hinter normalen Datenbanken. Selbst die BDE ist z.B. beim Hinzufügen von Datensätzen sehr viel schneller.

Zum Vergleich:
Hinzufügen von 100.000 zufälligen Datensätzen dauert bei einer BDE-Tabelle ca. 25 Sekunden, bei dir brauchen schon 1.000 Datensätze 150 Sekunden.
Die Suche nach 100.000 zufälligen Datensätzen dauert bei der BDE ca. 11 Sekunden, bei dir braucht die Suche nach 1.000 Datensätzen schon 100 Sekunden.

Wenn man bei der BDE den Index entfernt und das extrem langsame Locate benutzt, dann ist deine Suche allerdings ähnlich schnell (allerdings mit nur 1000 Datensätzen), dafür dauert das Hinzufügen von 100.000 Datensätzen bei der BDE dann nur noch 3 Sekunden.
Aber die BDE ist nicht gerade ein gutes Beispiel, es gibt heute Datenbanken, die noch deutlich schneller sind. (Firebird, MS SQL, ...)

Hinzu kommt bei dir, dass die Felder nur über den Index angesprochen werden können, nicht über einen Namen.


Zuletzt bearbeitet von jaenicke am Di 15.05.12 20:54, insgesamt 1-mal bearbeitet
gerd8888 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Di 15.05.12 20:51 
danke für den vergleich. das waere naemlich meine naechste frage gewesen, weil ich wissen wollte wie schnell das andere datenbanken hinbekommen.

aber dazu eine kurze anmerkung.

ich nehme an, dass man bei der BDE (die ich nicht kenne) vorher die stringlaenge angeben muss.
Das sind dann jeweils konstante stringlaengen eintraege
dann ist das natuerlich schneller, da er sich die stringlaengenabfrage und die dynamischen eintraege spart.

aber der zeitvorteil geht hier auf kosten von der leerspeicherung.

meine eintraege koennte man auch schneller machen, indem man die zeiger nicht alle von vorne bis hinten um 1 erhoeht, sondern
wieder eine neue tabelle anlegt. Falls Du bei deinem Testversuch viele gleichen Eintraege gemacht hast.

Zitat:
Hinzu kommt bei dir, dass die Felder nur über den Index angesprochen werden können, nicht über einen Namen.


Das stimmt so aber nicht. Denn ueber den Namen komme ich wieder zum Index (ID) :)

Ich habe jetzt schon neue Pläne. Ich werde alles nochmal neu und besser machen.
Das dauert aber etwas.