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
Benutzerbild von p80286
p80286

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

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 13: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
548 Beiträge
 
Delphi 12 Athens
 
#2

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 14: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
 
#3

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 15: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
 
#4

AW: Daten von einer Datanbank in eine ander Datenbank kopieren

  Alt 29. Aug 2016, 15: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 10:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz