Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Daten in SQLite-DB importieren (https://www.delphipraxis.net/185116-daten-sqlite-db-importieren.html)

DanXe 16. Mai 2015 15:58

Daten in SQLite-DB importieren
 
Hallo zusammen

ich schreibe in zwei Anwendungen die Daten mit SQlite.dll in Datenbankdateien.
Es handelt sich um eine kleine SQLite3 Datenbank mit einigen Tabellen. Bei einer Anwendung muss ich noch die alten xml-Daten in meine neue DB haben.

Die Datei hat folgende Struktur:
Code:
<?xml version= 1.0 encoding= utf-8?>
<story>
   <Beschreibung>
      <Webseite> www...</Webseite>
      <KundenAnzahl> 32 </Kunden_Anzahl>
   </Beschreibung>
   <Kunde>
      <Daten>
         <KundenNr> 2 </KundenNr>
         <Name> ... </Name>
         <Vorname> ... </Vorname>
         <Beruf> ... </Beruf>
         <GeburtsDatum> ... </GeburtsDatum>
         <Telefon> ... </Telefon>
         <Email> ... </Email>
      </Daten>
      <Lieferdresse>
         <Strasse> ...</Strasse>
         <Plz> ...</Plz>
         <Ort>...</Ort>
         <Land>...</Land>
       </Lieferdresse>
       <Bestellungen>
         <Bestellung>
           <BestID> 9</BestID>
           <Bemerkung> RLL </Bemerkung>
           <BestellDatum> 11.02.2008</BestellDatum>
           <LieferDatum> 13.02.2008</LieferDatum>
           <Anzahl> 1 </Anzahl>
         </Bestellung>
         <Bestellung>
           <BestID> 23 </BestID>
           <Bemerkung> FF DC </Bemerkung>
           <BestellDatum> 23.06.2008</BestellDatum>
           <LieferDatum> 26.06.2008</LieferDatum>
           <Anzahl> 3 </Anzahl>
         </Bestellung>
       </Bestellungen>
       <Artikeln>
         <Artikel>
           <ArtikelID> 23 </ArtikelID>
           <Bezeichnung> Xx.. </Bezeichnung>
           <Preis> 109&#8364; </Preis>
           <Anzahl> 3 </Anzahl>
         </Artikel>
         <Artikel>
         //Viele andere Artikeln
         </Artikel>
       </Artikeln>
     </Kunde>
     //Andere Kunden mit anderen Bestellungen, Artikeln
     </Kunde>
  </story>
Um die Daten zu speichern, habe ich folgende Tabellen erstellt (1-N Beziehung):
Code:
CREATE TABLE Beschreibung (Webseite Varchar(255), Kunden_Anzahl Integer);';

CREATE TABLE Kunden (KundeID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Vorname Varchar(40), Nachname Varchar(40), GeburtsDatum Date, Beruf Varchar(55), Strasse Varchar(55), Plz Integer, Ort Varchar(30), Land Varchar (30), Telefon Varchar(40), Email Varchar(40));';

CREATE TABLE Bestellungen( BestID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Bemerkung Varchar(30), BestellDatum Date, LieferDatum Date, Anzahl Integer, KundeID Integer));';

CREATE TABLE Artikeln (ArtikelID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Bezeichnung Varchar (50), Preis Float, Anzahl Integer, KundeID Integer));';

Ich habe leider bis jetzt nie was mit XML zu tun gehabt. Ich habe bei Wikipedia ein paar Grundlagen zu XML (Schema,Aufbau..) durchgelesen und mich mit diesem Beispielprojekt http://fluuux.de/2012/08/der-umgang-...ien-in-delphi/ beschäftigt.

Ausserdem habe ich mir das hier auch angeschaut. http://www.delphipraxis.net/128090-x...portieren.html
Hier wird SimpleXML (von Jedis) eingesetzt.

Wäre es möglich, die Daten zu importieren, ohne SimpleXML zu benutzen? Wie lese ich die Datei (Werte unter den Nodes) aus.. Ich habe mehrere Tabellen und nicht nur eine. Die Daten müssen nur ein mal in die DB gebracht werden.

Vielleicht kann mir jemand eine Prozedur zeigen.
Ich wäre echt dankbar wenn mir jemand etwas Hilfe geben könnte (da ich nie was mit XML zutun gehabt habe)

.

Sir Rufo 17. Mai 2015 14:39

AW: Daten in SQLite-DB importieren
 
Tja, wenn du die Enterprise-Version hättest, dann wäre das recht simpel.
  • XML-Datenbindung-Wizard starten
  • XML-Datei angeben
  • Klassen bauen lassen
Und dann einfach die Daten laden und abarbeiten
Delphi-Quellcode:
procedure ProcessKunde( AKunde: IXMLKundeType );
begin
  Writeln( 'KundenNr: ', AKunde.Daten.KundenNr );
  Writeln( 'Name   : ', AKunde.Daten.Name );
  Writeln( 'Vorname : ', AKunde.Daten.Vorname );
  Writeln( 'Beruf  : ', AKunde.Daten.Beruf );
end;

procedure ProcessKundeList( AKundeList: IXMLKundeTypeList );
var
  LIdx: Integer;
begin
  for LIdx := 0 to AKundeList.Count - 1 do
    ProcessKunde( AKundeList.Items[ LIdx ] );
end;

procedure ProcessStory( AStory: IXMLStoryType );
begin
  ProcessKundeList( AStory.Kunde );
end;

procedure ProcessStoryFile( const AFilename: string );
var
  LStory: IXMLStoryType;
begin
  LStory := Loadstory( AFilename );
  ProcessStory( LStory );
end;

begin
  try
    CoInitialize( nil );
    try
      ProcessStoryFile( '..\..\Data\Daten.xml' );
    finally
      CoUninitialize;
    end;
  except
    on E: Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;
  ReadLn;

end.

DanXe 17. Mai 2015 15:33

AW: Daten in SQLite-DB importieren
 
Vielen Dank für deine Antwort!

Zitat:

Tja, wenn du die Enterprise-Version hättest...
Ich habe leider die Professional-Version..


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 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