AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Daten von einer Datanbank in eine ander Datenbank kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten von einer Datanbank in eine ander Datenbank kopieren

Ein Thema von Dumpfbacke · begonnen am 29. Aug 2016 · letzter Beitrag vom 29. Aug 2016
Antwort Antwort
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 12:25
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Hallo Leute,
ich habe ein Problem. Es scheint eine Firebird Datenbank bei mir def. zu sein. Beim Insert dauert es Stunden für 100 Datensätze. Mit Gfix sehe ich das dort Fehler 12 + 5 vorhanden sind. Berichtigen tut Gfix es leider nicht. Ein Backup geht auch nicht mehr. Also habe ich eine neue Datenbank angelegt. Nur wie bekomme ich die Daten da rüber ? Ich wollte es mit IBExpert machen (Table Data Compaser). Leider ist die Datenbank etwas größer 15 GB. 5 Tabellern bekomme ich nicht rüber. Hier reicht der Speicher nicht. Kann mir jemand sagen wie ich es sonst noch machen kann ?

Danke Tanja.
Tanja
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 12:32
Ich benutze IBexpert nicht mehr, aber wenn ich mich recht erinnere gibt es die Möglichkeit die Daten zu exportieren und importieren.
Also bestehende DB export und neue Db Import.
Fritz Westermann
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 12:46
In IBExert kann man die Metadaten und Daten in ein Skript exportieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 13:29
Danke für den Tip. So komme ich weitere. Leider geht es auch noch nicht da ich Datensätzet mit Fehleren haben welche ich vorher löschen muss. Nun ja bin schon am löschen. Leider.

Danke noch mals Tanja
Tanja

Geändert von Dumpfbacke (29. Aug 2016 um 14:18 Uhr)
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 14:35
Leider doch noch eine Frage. Ich kann leider nicht alle Datensätze exportieren, da ich immer eine Fehlermeldung erhalte.

Delphi-Quellcode:
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.
Kann ich die Datensätze alle auf einmal löschen ? Momentan mache ich es einzelen um dann zu exportieren

Tanja
Tanja
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 14:57
Kann ich die Datensätze alle auf einmal löschen ? Momentan mache ich es einzelen um dann zu exportieren
DELETE FROM Table [WHERE PrimaryKey = XYZ] Aber willst du wirklich alle Datensätze in der Tabelle löschen?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 14:58
Delphi-Quellcode:
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.
Kann ich die Datensätze alle auf einmal löschen ? Momentan mache ich es einzelen um dann zu exportieren
bei so einer Fehlermeldung gehen bei mir sämtliche Alarmglocken an. Solche Ungereimtheiten fallen ja nicht vom Himmel, sondern sind "hausgemacht". Meine erste Aktion wäre heraus zu bekommen, was da konkret schiefgelaufen ist, und dann wie man es bereinigen kann. Einfach löschen wäre mir zu wenig.

Wenn Du es an einem zeichen fest machen könntest dann wäre
delete from mytable where myfield like '%'||chr(##)||'%'; ene Möglichkeit (## ist der Dezimalwert des fehlerhaften Zeichen)

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

Registriert seit: 6. Feb 2006
Ort: Moers
535 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 15:58
Wenn das IBexpert ist, dann darauf achten dass in den "Database Registration Infos" der richtige Charset eingestellt ist.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 16:19
Mein Vorgehen bei so 'nem Problem wäre folgendes:

Zuerst versuchen, aus den Tabellen Insertstatements zu erstellen. Dabei werden Fehler protokolliert.

Die Insertstatments können dann per Datei in 'ne andere Datenbank übernommen werden.

Für die protokollierten Fehler systematisch prüfen, was da falsch ist. Tritt z. B. immer die gleiche Fehlermeldung auf und das auch noch bei der gleichen Spalte?

Dann prüfen, wer denn da diese fehlerverursachenden Werte in die Tabelle "reinhaut" und dem ein paar um die "Löffel" geben

Habe mal ca. 14 Tage nach einem Datenfehler gesucht, der nur sporadisch auftrat. Mit 'ner Methode, wie der folgenden bin ich dann dahinter gekommen, dass irgend wer es geschafft hatte in ein Datumsfeld den 31.04.2003 hineinzubekommen.

(Der Quelltext ist nur hingedattelt und weder kompiliert noch getestet worden - ist halt nur so 'ne Idee)
Delphi-Quellcode:
procedure InsertDateienErstellen(sTabelle : String; sIDSpalte : String);
const
        ciInsertsProDatei = 1000;
var
        i : Integer;
        k : Integer;
        sInsert : String;
        sValues : String;
        sl : TStringList;
        slFehler: TStringList;
        bFehler : Boolean;
begin
  sl := TStringList.Create;
  slFehler := TStringList.Create;
  k := 0;
  qry.Close;
  qry.Sql.Text := Format('Select * from %s order by %s',[sTabelle,sIDSpalte]);
  qry.Open; // Wenn's hier schon kracht, hab' ich auch keine gescheite Idee :-(
  sInsert := Format('insert into %s (',[sTabelle]);
  for i := 0 to qry.Fields.Count - 1 do begin
    if i := qry.Fields.Count - 1 then begin
      sInsert := sInsert + qry.Fields[i}.FieldName + ') values (';
    end else begin
      sInsert := sInsert + qry.Fields[i}.FieldName + ', ';
    end;
  end;
  while not qry.Eof do begin
    sValues := '';
    bFehler := False;
    for i := 0 to qry.Fields.Count - 1 do begin
      try
        // Hier könnte man noch abhängig vom DataType entscheiden,
        // ob die Ausgabe mit QuotedStr oder ohne QuotedStr erfolgen soll / muss.
        // Blobfelder dürften hierbei eh etwas "schwierig" werden ;-)
        if i := qry.Fields.Count - 1 then sValues := sValues + QuotedStr(qry.Fields[i}.AsString) + ');'
        else sValues := sValues + QuotedStr(qry.Fields[i}.AsString) + ', ';
      except
        on e : Exception do begin
          slFehler.Add(Format('%s: %s',[sIDSpalte, qry.FieldByName(sIDSpalte).AsString]));
          slFehler.Add(Format('Spalte: %s',[qry.Fields[i].FieldName]));
          slFehler.Add((e.Message);
          bFehler := True;
        end;
      end;
    end;
    if not bFehler then begin
      sl.Add(Format('%s%s',[sInsert,sValues]));
    end;
    Inc(k);
    if k mod ciInsertsProDatei = 0 then begin
      sl.Add('Commit;');
      sl.SaveToFile(Format('Insert_%s_%0.9d',[sTabelle,k]);
      sl.Clear;
    end;
    qry.Next;
  end;
  qry.Close;
  slFehler.SaveToFile(Format('Datenfehler_Tabelle_%s',[sTabelle]));
  sl.SaveToFile(Format('Insert_%s_%0.9d',[sTabelle,k]);
  slFehler.Free;
  sl.Free;
end;
Insgesamt sieht mir die Fehlermeldung sehr danach aus, dass da was in den Tabellen steht, was mit dem verwendeten CharSet nicht so wirklich kompatibel ist.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 16:46
Die Infos dieser seite sind dir bekannt?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 06:34 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