Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi verlinkte datenbank, ohne feste karteikartengröße (https://www.delphipraxis.net/913-verlinkte-datenbank-ohne-feste-karteikartengroesse.html)

Jan 24. Sep 2002 20:00


verlinkte datenbank, ohne feste karteikartengröße
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also nuja, ist nicht ganz leicht zu erklären für mich..
Ich will mal so anfangen: Ich habe eine Personaldatenbank programmiert (wie wahrscheinlich jeder delphi Anfänger) und nun will ich 2 weitere datenbanken anfügen, welchedie Kranktage/Urlaubstage speichert und gestattet, mit ihnen rumzurechnen.
Nun weiss ich aber nur, wie ich datenbanken mit fester Recordgröße erstelle, indem ich den record mit den festgelegten variabeln in eine Datei schreibe. Was aber, wenn ich beliebig viele neue einträge in eine einzige karte schreiben will? und die nicht nur als einen langen string, sondern als einzelne Werte, aus denen ich nachher die Gesamt-fehlzeit/urlaubszeit errechnen kann. Weiterhin soll diese db nicht zusätzliche komponenten benötigen, sondern mit einer einzigen datei auskommen, so wie die personaldatei, die ich angelegt habe.
Das Projekt soll also nachher aus 3 DBs bestehen, die jeweils 1 datei haben.
So, nachdem ich mir jetzt einen Knoten in die Zunge erklärt hab, hoffe ich mal, dass jemand meine Problematik erkennt und mir weiterhelfen kann :]
so far:
mfg
Jan

Gast 25. Sep 2002 07:38

Hallo Jan, 8)

ich denke, dass sich hier bei Dir um eine tipische 1:n Beziehung handelt.

Nehmen wir an, dass Deine Tabelle mit der Karteien KARTEI heißt. Darüber hinaus werden alle Einträge (zu den Karteien) in der Tabelle KARTEIEINTRAG festgehalten.

Folgend jede Deine Tabelle die Du verwendest muss/sollte einen festen- Feld mit dem Namen ID Integer NOT NUL besitzen

Also wenn Deine einzelne Karte in der Tabelle KARTEI (z.B. für den Herr Maier) eine ID... sagen wir gleich 14 hat dann alle Einträge in der Tabelle KARTEIEINTRAG (die neben dem eigenem Feld ID auch ein verweis Feld (KARTEIINTRAG_ID Integer NOT NULL)
besitzt) die in dem Feld KARTEIEINTRAG_ID gleich 14 sind werden sich auf den
Namen Maier beziehen.

Somit kannst Du für eine Kartei (in der Tabelle KARTEI) beliebig viele Einträge erstellen in der Tabelle KARTEIEINTRAG


Gruß

Paul Jr.

Jan 25. Sep 2002 19:58

Hallo Paul Jr.,
also erstmal vielen dank, dass du auf meine Frage geantwortet hast, aber irgendwie ist mir das etwas zu sehr theoretisch, ich blick da nix und wieder nix, was wohl an mir liegt. Ich hab ja das Prog hinzugefügt, welches ich bisher gemacht hab. da kann man ja sehen, was ich bislang von Datenbanken verstehe. ich will ja eigentlich nichts anderes machen als nochmal genau so eine DB zu erstellen, nur dass ich während der Laufzeit weitere elemente in eine Karteikarte einfügen können will. Geht das?
Falls du genau das schon vorher beantwortet hast, und es nicht leichter zu erklären ist, dann muss ich wohl irgendwie erstmal noch ein bisschen Erfahrung sammeln.
Aber danke trotzdem für alle Antworten im Vorraus.
mfg
Jan

MrSpock 25. Sep 2002 21:19

Hallo Jan,

mir ist nicht ganz klar, ob du wirklich über Datenbanken (z.B. eine Paradoxdatenbank) sprichst oder über eine typisierte Datei!?

Wenn du eine Datenbank meinst, dann musst du 2 zusätzliche Tabellen anlegen. Falls du typisierte Dateien meinst, ist das auch machbar.

Also was von den beiden Optionen meinst du? Oder hab ich jetzt gar nix kappiert :nerd: ?

Jan 25. Sep 2002 21:35

Hallo MrSpock,
also ich glaub kaum dass du was nicht verstanden hast, sondern wenn dann wohl eher ich, ich weiss es selber nicht, was das genau ist, was ich meine, aber ich hab ja mein Prog oben angefügt, es dürfte wohl weniger lange dauern dir das so anzugucken, als wenn ich das erkläre :]
ich speichere einfach nur in eine datei per:
Code:
  assign(f,Dateipfad);
        reset(f);
        seek(f,pos);
        write(f,Karte);
        close(f);
das ist alles. und so soll das mit den 2 weiteren dateien auch gehen, nur dass ich halt oben erwähntes damit anstellen will.
besser so?
mfg
Jan[/code]

MrSpock 25. Sep 2002 21:50

Hallo Jan,

das hilft ja schon weiter. Du willst also mit typisierten Dateien arbeiten. Das geht natürlich. Problematisch ist dabei tatsächlich die Verknüpfung der Informationen in den verschiedenen Dateien. Ich werde dir dazu morgen Abend mal einen Vorschlag machen. Da es aber etwas länger dauert, das zu erklären und Vulkanier so gegen 22:45 Uhr müde werden, müssen wir das auf morgen verschieben :mrgreen: .

Jan 25. Sep 2002 22:07

Hallo MrSpock,
*vorspannungfastausdemstuhlfall*
ich bin mal gespannt, ob das dann sogar für mich zu verstehen ist, ich werd in der zeit mal mein delphi Wissen vertiefen :)
so long..
Jan

MrSpock 26. Sep 2002 19:18

Hallo Jan,

fangen wir mal an, ich gehe mal davon aus, dass zu einen Personenrecord erstellt hast, dieser könnte etwa so aussehen:

Code:
type
  Karte = record
    ID       : Integer;
    Nachname : String[30];
    Vorname  : String[30];
    PLZ      : String[10];
    Ort      : String[30];
    Strasse  : String[30];
   end;
Worauf ich hinaus will ist, du solltest wie Paul Jr schon angemerkt hat jeder Karteikarte (Person) eine ID zuordnen.

Die Daten speicherst du dann ja in einem:


Code:
var
  KarteiFile : File of Karte;
Nehmen wir jetzt mal die Urlaubsdatei, du solltest jetzt jedem Eintrag mitgeben, zu welcher Person er gehört.

Also z.B.:
Code:
type
  Urlaub = record
    Person   : Integer;
    Von      : TDate;
    Bis      : TDate;
  end;
Jetzt kannst du für jede Person beliebig viele Einträge in eine Datei : File of Urlaub schreiben. Diese werden nicht sortiert, sondern einfach hintereinander geschrieben.

Wird ein Eintrag später gelöscht, setzt du dessen ID z.B. auf -1, was eine Art Löschkennzeichen ist.

Soweit alles klar?

Jan 26. Sep 2002 20:19

Hallo MrSpock,
Soweit schon, danke für die infos, ich hab das tatsächlich genau so gemacht, aber du sagst, dass ich jetzt beliebig viele eintrage für eine person schreiben kann, meinst du damit, dass ich für jede urlaubszeit einen neuen record speichern soll, und beim auslesen der urlaubstage für eine bestimmte person die typisierte datei komplett durchlaufen soll und alle tage , die zu einer person gehören ausgeben soll?
Ich kann mir das schon vorstellen. Werde ich mal ausprobieren, aber eigentlich ist das ja nur eine umgehung meines Problems, denn ich willte dass die beiden variabeln die du da angegeben hast ("von", "bis") beliebig hinzugefügt werden können, also dann "von1" "bis1" usw, ich also während der laufzeit neue vars der karteikarte hinzufüge, und wenn das nicht geht es irgendwie anders löse, dass der das halt in eine einzige karteikarte/person schreibt, so dass ich nachher in der Urlaubsdatei genausoviele Karten habe wie in der Personaldatei. Aber wenn das nicht geht, dann ist deine Lösung glaube ich gerade gut genug. Vielen Dank hast mir echt weitergeholfen.
gruss
Jan

MrSpock 27. Sep 2002 16:47

@Daniel B: Ich hatte PLZ größer als 5 angenommen, damit man ggf. auch ein Länderkennzeichen davor setzen kann. Z.B. CS-1000 oder A-12345, etc.

@Jan: Grundsätzlich habe ich mir das genau so vorgestellt. Ich hätte dir nur noch ein bisschen was über Indices erklärt, mit denen man die Suche beschleunigen kann. Das macht aber nur Sinn, wenn du sehr viele Datensätze erwartest.

Was du auch machen kannst ist so genannte Comma Separated Values (CSV). Dabei werden die einzelnen Felder eines Datensatzes durch einen Trenner (z.B. ";") von einander getrennt. Die Sätze liest du dann in einem Rutsch als Text ein und zerlegst dann den Satz. Willst du dann später alle Datensätze um ein weiteres Feld erweitern, ist das kein Problem. Du musst dann nur einmalig das neue Feld an alle Datensätze anhängen. Die Namen der Felder könnten im ersten Datensatz abgelegt werden. Solche Dateien lassen sich übrigens sehr gut in Datenbanksysteme oder Tabellenkalkulationen importieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz