Autor |
Beitrag |
gerd8888
      
Beiträge: 205
Erhaltene Danke: 3
Win7
Delphi 10.1 Starter (kostenlos) Lazarus
|
Verfasst: 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 Narses: Titel vom neuen Topic übernommen, war: "mein datenbanksystem (komplettes programm mit source)".
Moderiert von Narses: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
gerd8888 
      
Beiträge: 205
Erhaltene Danke: 3
Win7
Delphi 10.1 Starter (kostenlos) Lazarus
|
Verfasst: 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 
      
Beiträge: 205
Erhaltene Danke: 3
Win7
Delphi 10.1 Starter (kostenlos) Lazarus
|
Verfasst: 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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
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 
      
Beiträge: 205
Erhaltene Danke: 3
Win7
Delphi 10.1 Starter (kostenlos) Lazarus
|
Verfasst: So 29.04.12 21:40
Zuletzt bearbeitet von gerd8888 am So 29.04.12 22:45, insgesamt 1-mal bearbeitet
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Blup
      
Beiträge: 174
Erhaltene Danke: 43
|
Verfasst: 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.
gerd8888 hat folgendes geschrieben : | 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
      
Beiträge: 792
Erhaltene Danke: 49
Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
|
Verfasst: Do 10.05.12 14:05
Blup hat folgendes geschrieben : | 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.
Blup hat folgendes geschrieben : |
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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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  ).
Danke, weitermachen. 
_________________ We are, we were and will not be.
|
|
gerd8888 
      
Beiträge: 205
Erhaltene Danke: 3
Win7
Delphi 10.1 Starter (kostenlos) Lazarus
|
Verfasst: 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 Narses: Anhang in den ersten Beitrag verschoben, siehe oben.
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
Deshalb nehme ich dich mal beim Wort:  gerd8888 hat folgendes geschrieben : | 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 
      
Beiträge: 205
Erhaltene Danke: 3
Win7
Delphi 10.1 Starter (kostenlos) Lazarus
|
Verfasst: 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.
|
|
|