AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie kann ich das am besten in eine DB Importieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich das am besten in eine DB Importieren?

Ein Thema von BBoy · begonnen am 25. Mai 2011 · letzter Beitrag vom 25. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2      
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 12:44
Datenbank: BDE • Version: 5.15 • Zugriff über: TurboDB
Ich importiere eine XML Datei in eine Datenbank.

Hier ein ausschnitt aus dieser Datei:
Code:
      <groundspeak:logs>
        <groundspeak:log id="161782893">
          <groundspeak:date>2011-05-20T19:00:00Z</groundspeak:date>
          <groundspeak:type>Found it</groundspeak:type>
          <groundspeak:finder id="4394458">jasmnsna</groundspeak:finder>
          <groundspeak:text encoded="False">dank warrex und ninawieden unserer schnaggel-AG nach der arbeit gesuch und gefunden zusammen sind wir stark
LG jasmin sabrina</groundspeak:text>
        </groundspeak:log>
        <groundspeak:log id="161778888">
          <groundspeak:date>2011-05-20T19:00:00Z</groundspeak:date>
          <groundspeak:type>Found it</groundspeak:type>
          <groundspeak:finder id="4442368">WARx</groundspeak:finder>
          <groundspeak:text encoded="False">War schon kurz vorm Verzweifeln aber dann doch mitsamt der gesamten Kraft der Schnaggel AG gefunden :)</groundspeak:text>
        </groundspeak:log>
        <groundspeak:log id="161777788">
          <groundspeak:date>2011-05-20T19:00:00Z</groundspeak:date>
          <groundspeak:type>Found it</groundspeak:type>
          <groundspeak:finder id="4471936">ninaen</groundspeak:finder>
          <groundspeak:text encoded="False">nach langer langer suche entlich gefunden nummer 7 für heute</groundspeak:text>
        </groundspeak:log>
      </groundspeak:logs>
Und zwar geht es um die einträge "<groundspeak:log id=" (oben sind es 3 Stück) diese sollen im selben datensatz gespeichert werden wie die restlichen daten auch. Nur ist die anzahl dieser Einträge immer verschieden. Es können 3 sein aber auch 30 oder gar 50.

Dachte mir das ich es mit einem Memofeld mache und jeden Eintrag in eine Memozeile schreibe. Die einzelnen Parameter hätte ich mit komma getrennt. Allerdings können die Einträge manchmal sehr lang werden und memo bricht automatisch nach 1024 Zeichen die Zeile. So kann ich dann nicht mehr mit memo.lines auf einzelne Einträge zugreifen.
Soll ich nun 50 Datenbankfelder (Memos) anlegen auch wenn meist viel weniger benötigt werden? Oder gibt es elegantere Lösungen?
Beim Importieren habe ich das mit einem Dynamischen Array gelöst, aber sowas gibt es ja bei einer DB nicht.

Wäre nett wenn jemand helfen könnte. Danke!

Geändert von BBoy (25. Mai 2011 um 12:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 12:48
Ich weiß nicht, ob es nur mir so geht, aber ich habe nicht verstanden, was Du möchtest. Was hat ein Memo mit einer Datenbank zu tun? Was sind das für IDs in Deiner Datei? Wie hast Du Dir die DB-Struktur gedacht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 12:53
Ich importiere eine XML Datei in eine Datenbank.
...
Dachte mir das ich es mit einem Memofeld mache und jeden Eintrag in eine Memozeile schreibe. Allerdings können die Einträge manchmal sehr lang werden und memo bricht automatisch nach 1024 Zeichen die Zeile. So kann ich dann nicht mehr mit memo.lines auf einzelne Einträge zugreifen.
Soll ich nun 50 Datenbankfelder (Memos) anlegen auch wenn meist viel weniger benötigt werden? Oder gibt es elegantere Lösungen?
Beim Importieren habe ich das mit einem Dynamischen Array gelöst, aber sowas gibt es ja bei einer DB nicht.
Wie? Was? Memo?
Wenn du XML ausliest, dann nimmst du dafür eine XML-Bibliothek. Die kann das nämlich anhand des XML STandards einlesen, ohne darauf vertrauen zu müssen, dass da auch ja Zeilenumbrüche drin sind. Du kannst morgen ein XML ohne Zeilenumbrüche bekommen, und diese Datei wäre immer noch korrekt, aber dein Code nicht!
Es gibt hier in der DP eine Abteilung für Tutorials, da findest du auch Tutorials zum Umgang mit XML.
Bevor du auch nur irgendwas anderes anfängst[1], sollest du dich da schlau gemacht haben.
Und danach überlege bitte, ob dein Programm wirklich eine evolutionäre Sackgasse darstellen soll. Denn die BDE ist schon lange nicht mehr unterstützt und läuft auf keinem 64Bit-System ohne manuelle Hacks.

[1] Ernsthaft, du MUSST dich damit auskennen, bevor du auch nur eine weitere Zeile in deinem Programm schreibst!
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 13:03
Und zwar geht es um die einträge "<groundspeak:log id=" (oben sind es 3 Stück) diese sollen im selben datensatz gespeichert werden wie die restlichen daten auch. Nur ist die anzahl dieser Einträge immer verschieden. Es können 3 sein aber auch 30 oder gar 50.
Wenn ich die Daten richtig interpretiert habe, dann verbirgt sich hinter "<groundspeak:log id=" immer ein Datensatz. (und Log ID ist die Satznr) Und da ist zunächst einmal deren Anzahl völlig unerheblich, wenn Du die vorliegenden Daten wirklich in eine DB importieren willst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 13:09
TurboDB und ähnliche Datenbanken sind ein guter Ersatz für die BDE und immer noch weit verbreitet. Für mich als Heimanwender absolut ausreichend.

Der Datensatz besteht aus viel mehr als nur diesem kleinen Teil der oben gezeigt wird. Hier geht es darum wie ich diesen oben gezeigten Teil in diesen Datensatz einbringe.

Die XML Datei habe ich bereits erfolgreich importiert mit einer XML Komponente, dass ist kein Problem. Die meisten Daten aus dieser XML Datei kann ich auch einfach in Datenbankfelder (als String deklariert) eintragen. Also auch kein Problem.
Es sind also schon alle daten importert, außer diese:>
Probleme bereiten mir nur die Einträge aus der XML Datei (siehe beispiel oben) die mehrfach vorkommen. So hat das Beispiel oben 3 x <groundspeak:log Einträge mit Parametern wie ID, Date, Type usw. Und jeder dieser Einträge muss in meine DB eingetragen werden.
um einen Eintrag in die DB aufzunehmen könnte ich einfach die entsprechenden Datenbankfelder anlegen und fertig. Aber es sind immer verscheiden viele dieser Einträge (3, 30 oder noch mehr) und eben das bereitet mir probleme. Eine primitive Lösung wäre einfach 50 Datenbankfelder (nur so als vorsorge) für diese Einträge anzulegen. Aber denke nicht das es das optimale ist..... Sorry ich weis net wie ich das erklären soll.....

Jeder andere eintrag ist einfach zu übernehmen: Name=Meyer, Vorname=Peter, Ort=Frankurt usw. usw. Aber das oben möchte ich so übernehmen:
Log ID 1234434, date, type, finder, text.
Also als einen eintrag aber mit Parametern. Deswegen meine Idee mit dem DBMemo, da könnte ich jeden eintrag (Log ID 1234434, date, type, finder, text.) in eine Memo Zeile schreiben und könnte beim auslesen mit memo.lines auf einzelne einträge zugreifen. Aber das geht nicht da DBMemo nach 1024 zeichen einen zeilenumbruch macht.
Ich möchte sozusagen eine Liste in einem einzelnen Datenbankfeld speichern.

Geändert von BBoy (25. Mai 2011 um 13:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 13:13
Nochmal: überleg Dir doch erst einmal eine sinnvolle DB-Struktur. Wie viele Tabellen hast Du denn bisher?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 13:14
Ich importiere eine XML Datei in eine Datenbank.

Dachte mir das ich es mit einem Memofeld mache und jeden Eintrag in eine Memozeile schreibe. Die einzelnen Parameter hätte ich mit komma getrennt. Allerdings können die Einträge manchmal sehr lang werden und memo bricht automatisch nach 1024 Zeichen die Zeile. So kann ich dann nicht mehr mit memo.lines auf einzelne Einträge zugreifen.
Soll ich nun 50 Datenbankfelder (Memos) anlegen auch wenn meist viel weniger benötigt werden? Oder gibt es elegantere Lösungen?
*g* das nennt sich dann normalisieren von Datenbanken... und in dem Fall gibt es anstelle der Spalte mit dem Memo, oder die 50 zusätzlichen Spalten einfach eine weitere Tabelle:

ID INTEGER
Inhalt MEMO
ID-Des-Datensatzes-In-der-ersten-Tabelle

Somit kannst Du zu einem Datensatz eine beliebige Anzahl von weiteren Datensätzen speichern.

Allerdings würde ich dir doch sehr empfehlen dich in die Datenbankgrundlagen einzuarbeiten....

Grüße
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 13:20
Wenn zu einem Datensatz eine variable gleichartige Datenmenge gehört, kann man das prima in einer extra Tabelle sammeln.

Beispiel (mal ganz einfach und reduziert):
Code:
TabelleWohnung
  Id : Integer;
  Strasse : Text;
  Ort : Text;

TabelleBewohner
  WohnungsId : Integer
  Name : Text;
Du kannst nun jeder Wohnung eine beliebige Anzahl Bewohner zuordnen, die Du über WohnungsId filtern/zuweisen kannst.

€: Ok, 6 Minuten im Tab geschlummert, Lemmys Hinweis geht in die gleiche Richtung.
Btw. wenn Beiträge in Tab's "schlafen" kommt auch keine "RedBox"... da geht wohl was verloren.

Geändert von Satty67 (25. Mai 2011 um 13:22 Uhr)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 13:23
Das mit der 2. Tabelle hört sich gut an

Du meinst ich sollte eine 2. Tabelle anlegen in der die oben genannten Felder eingetragen werden.
Frage ist dann wie ich das mit der ersten Tabelle verknüpfe, also das wenn z.B. der 7. Datensatz angezeigt wird das dann auch die richtigen Daten aus der 2. Tabelle angezeigt werden.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Wie kann ich das am besten in eine DB Importieren?

  Alt 25. Mai 2011, 13:25
Ich vermute, Du hast nur Lemmys Beitrag gelesen, schau Dir meinen nochmal an (#8), der veranschaulicht genau den Vorschlag nochmal etwas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 Uhr.
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