AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TADODataSet.LoadFromFile in DB schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

TADODataSet.LoadFromFile in DB schreiben

Ein Thema von PistolenPeter · begonnen am 11. Mai 2011 · letzter Beitrag vom 11. Mai 2011
Antwort Antwort
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#1

TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 13:03
Datenbank: Oracle • Version: 10g • Zugriff über: TADODataSet
Hallo zusammen,

ich möchte Daten aus einer XML Datei laden und zurück in eine Datenbank schreiben.
Die XML Datei habe ich zuvor mit TADODataSet.SaveToFile erzeugt.
So sieht mein zurzeit Code aus:

Delphi-Quellcode:
  DataSetSource.LoadFromFile(FileName);

  CreateTable(DataSetSource); // eigene Methode erstellt leere Tabelle je nach Zieldatenbank
  DataSetDest.CommandText := 'SELECT * FROM FileName WHERE 1=0';
  DataSetDest.Open;

  while NOT DataSetSource.Eof do
  begin
    DataSetDest.Insert;

    for n := 0 to DataSetSource.Fields.Count - 1 do
    if NOT DataSetSource.Fields[n].IsNull then
      DataSetDest.Fields[n].Value := DataSetSource.Fields[n].Value;
    DataSetDest.Post;

    DataSetSource.Next;
  end;
end;
Das ist allerdings sehr langsam.
Ich habe schon probiert das "DataSetDest.Post" erst nach dem gesamten Durchlauf auszuführen, aber das hat auch keinen merklichen Unterschied gemacht.

Hat jemand einen Idee, wie man das Ganze etwas schneller hinbekommt?
Es müsste doch eine Möglichkeit geben über das Recordset Daten zu kopieren, oder nicht?
Alle Versuche in diese Richtung sind allerdings kläglich gescheitert.

Grüße
Peter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 13:06
Hallo und Willkommen in der DP ,

kannst Du nicht einfach die INSERT INTO SELECT FROM-Syntax benutzen? Ich bin nicht sicher, kann mir aber vorstellen, dass das schneller geht.
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
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#3

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 13:44
Hallo Detlef,

Danke für Deine schnelle Antwort.
Nach dem Einladen der XML Datei über LoadFromFile kann ich über die ADODataSet Komponente auf die Daten zugreifen.
Die SQL Anweisung, wie von Dir vorgeschlagen, verlangt aber doch im "SELECT FROM" Teil eine existierende Tabelle in der aktuellen Datenbank, oder nicht?
Ich verstehe nicht, wie ich dort als Quelle ein DataSet angeben soll.

Grüße
Peter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 13:59
Sry, Du hast recht, ich hatte Dich falsch verstanden. Dann muss man sich wohl etwas anderes ausdenken
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
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 14:07
Gibts nicht irgendwelche Oracle-Tools, mit denen man solche Dateien direkt in die Datenbank blasen kann? SQLLoader, IrgendwasPump,...?
Ralph
  Mit Zitat antworten Zitat
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#6

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 14:38
Ja, da gibt's jede Menge und teilweise sogar sehr gute Programme.
Aber ich brauche eines das
  1. als DLL in andere meiner Anwendungen integriert werden kann.
  2. Daten von unterschiedlichen Datenbanken kopiert (von Oracle zu MS SQL oder umgekehrt).
  3. quelloffen und lizenzfrei ist.
Grüße
Peter
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 14:48
Keine Ahnung ob das schneller ist, aber kann man nicht beim durchlaufen der Source nur einen riesen String erzeugen, der nachher ein "SQL-Insert Into" - Befehl wird und dann mit einem Insert alles in die Tabelle schreiben?

Das sequenzielle durchlaufen der Quelle, das ja wahrsch. das langsame ist, wird dabei natürlich leider nicht vermieden.
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 15:34
Die Loader Funktionen von Oracle sind ein Teil des Produkts.
Damit kannst Du eine XML Tabelle als externaltable deklarieren und importieren. Sie muss dafür allerdings zunächst auf den Server.

also
a) XML Datei auf den Server
b) external table darauf definieren
c) Zieltabelle erzeugen
d) Daten laden
Gruß, Jo
  Mit Zitat antworten Zitat
PistolenPeter

Registriert seit: 11. Jun 2010
9 Beiträge
 
#9

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 15:47
Wie gesagt möchte ich aber Tabellen auch in andere Datenbanken kopieren können.
Eigentlich geht es nur darum Tabellen zu exportieren, per E-Mail zu versenden (deshalb das XML Format) und anschließend wieder zu importieren.
Quell- und Zieldatenbank dürfen dabei keine Rolle spielen, da ich auch Tabellen vom SQL Server in Oracle oder umgekehrt importieren möchte.

Dateien auf den Datenbankserver kopieren kann ich leider nicht.

Grüße
Peter
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: TADODataSet.LoadFromFile in DB schreiben

  Alt 11. Mai 2011, 18:13
Dass es eine beliebige DB sein soll, war mir nach dem Intro usw. nicht ganz klar.

Ok, dann vielleicht per [ADODataset].recordset
Das bietet Zugriff auf die Recordset Schnittstelle.

Dort geht dann sowas (VB Beispiel), vielleicht hilft Dir das- nach Portierung- weiter:
Code:
Dim p As New PropertyBag

p.WriteProperty "Tmp", rs1
Set rs2 = p.ReadProperty("Tmp")

Presto! A genuine copy.

(einer der ersten google Treffer, gibt auch ausführlichere Beispiele, Stichwort PropertyBag ADO copy recordset)


Insert Scripte dürften auch schneller sein, als per Dataset/ per Field/ post zu arbeiten.
Wurde ja schon vorgeschlagen.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:16 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