Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#5

Re: Effiziente Synchronisation Datenbank CSV-Datei

  Alt 19. Feb 2009, 08:24
Hallo,

schreib mal bitte ein bisserl mehr, was Du vorhast.

Soll die Datenbank anhand der CSV-Dateien aktualisiert werden oder sollen die CSV-Dateien anhand der Datenbank aktualisiert werden oder soll ein gegenseitige Abgleich erfolgen?
Wieviele CSV-Dateien werden für eine Aktualisierung benötigt, wie oft und welche Datenmengen?
Wie ist der Aufbau der CSV-Dateien.

Z.B. Alles in doppelten Hochkommata getrennt durch Semikolon.
Zeichenfolgen in doppelten Hochkommata, nummerische Werte ohne Hochkommata.
Feste Länge für alle Spalten...

Wenn die CSV-Dateien nicht zu groß sind, könntest Du sie in eine Stringliste einlesen.
Nun gehst Du her und liest diese Stringliste zeilenweise in eine zweite Stringliste ein, bei der Du Delimiter auf Dein Trennzeichen setzt und DelimitedText den Inhalt einer Zeile zuweist. Nun hast Du in jeder Zeile die einzelnen Werte und kannst sie Deiner Datenbankkomponente zuweisen.

Das Ganze könnte (ungetestet) z. B. so aussehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  slCSV : TStringList;
  slZeile : TStringList;
  i : Integer;
begin
  slCSV := TStringList.Create;
  slZeile := TStringList.Create;
  slCSV.LoadFromFile('Dateiname');
  for i := 0 to slCSV.Count - 1 do Begin
    slZeile.Delimiter := ';';
    slZeile.DelimitedText := slCSV[i];
    if table.Locate('Schluesselspalte',slZeile[0]) then begin
      table.Edit;
    end else begin
      table.Append;
      table.FieldByName('Schluesselspalte').AsString := slZeile[0];
    end;
    table.FieldByName('Name').AsString := slZeile[1];
    table.FieldByName('VorName').AsString := slZeile[2];
    table.FieldByName('Strasse').AsString := slZeile[3];
    // ...
    table.Post;
  end;
  slZeile.Free;
  slCSV.Free;
end;
  Mit Zitat antworten Zitat