Einzelnen Beitrag anzeigen

Dumpfbacke

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

Viele Datensätze Updaten / vergelichen

  Alt 15. Jul 2007, 15:36
Datenbank: Interbase • Version: V6.1 • Zugriff über: InterbaseExpress
Hallo leibe Delphianer,
ich muß hier etlich Datensätze vergeleiche bzw. aufbereiten updaten. Die Daten werden im CSV Format geliefert. Als erstes übertrage ich die Daten mal in eine Interbase Datei. Dieses Daten sollen nun umgewandelt bzw. mit Daten in eiener anderen Interbase DB verglichen werden. Es handelt sich um ca. 700.000 Datensätze.

Ich bekomme immer nach ca. 70.000 Datensätze eine Fehlermeldung, das zu wenige Arbeitsspeicher vorhanden ist und das auf einem Server mit 8 GB Ram.

Ich denke mal, das ich ein Fehler in meinen Programm habe welche ich einfach nicht finden kann. Ich habe mal den Code auf das nötigste gekürzt und hoffe, das mir hier jemand helfen kann. Es sein den Speicher nicht mehr freizugeben

Zuerst mal die Komponenten
SucheDaten1,SucheDaten,SucheDaten3,KanalSuchen sind TIBQuery´s
BearbeiteDaten1 ist eine TIBDataset

Ich habe hier schon einiges versucht wie z.B. ein Commit auf die Datenabk nach ca. 10.000 Datensätzen. Nur gebracht hat bis jetzt alles noch nicht.


Delphi-Quellcode:
procedure TPPusKanalEinlesen.DatenEinlesen;
var
I: Integer;
FehlerZaehler: integer;
Kanal: string;
HKanal1,HKanal2,HKanal3: string;
KanalZahl: integer;
Zaehler: integer;
begin
 Daten.SucheDaten1.Prepare;
 Daten.SucheDaten2.Prepare;
 Daten.SucheDaten3.Prepare;
 Daten.BearbeiteDaten1.Prepare;
 Daten.AnfangsDaten.Active := False;
 Daten.AnfangsDaten.Active := True;
 Daten.AnfangsDaten.First;
 While not Daten.AnfangsDaten.Eof do
     begin
     Daten.SucheDaten1.ParamByName('Wert1').AsSTring := Daten.AnfangsDaten.FieldByNAme('Wert1').AsString;
     Daten.SucheDaten1.Active := True;
     Daten.SucheDaten2.ParamByName('Wert2').AsSTring := Daten.AnfangsDaten.FieldByNAme('Wert2').AsString;
     Daten.SucheDaten2.Active := True;
     if (Daten.SucheDaten1.RecordCount > 0) and (Daten.SucheDaten2.RecordCount > 0 ) then
      begin
       Daten.BearbeiteDaten1.ParamByName('Test1').AsString := Daten.SucheDaten2.FieldByName('Test1').AsString;
       Daten.BearbeiteDaten1.ParamByName('Test2').AsString := Daten.SucheDaten1.FieldByName('Test2').AsString;
       Daten.BearbeiteDaten1.Active := True;
       if Daten.BearbeiteDaten1.RecordCount > 0 then
        begin
         //Wurde gefunden
         if Daten.BearbeiteDaten1.FieldByName('Kanal').AsString = 'then
          begin
           //Es ist bis jetzt noch kein Kanal angegeben.
           Daten.BearbeiteDaten1.Edit;
           //Hier wird noch etwas andres gemaucht habe ich jedoch gelöscht da unwichtig
           Daten.BearbeiteDaten1.FieldByName('TestDatum').AsString := DateToStr(AktuellesDatum);
           Daten.BearbeiteDaten1.Post;
          end
         else
          begin
           if Daten.BearbeiteDaten1.FieldByName('Kanal').AsString <> Kanal then
            begin
             Daten.BearbeiteDaten1.Edit;
             //Hier wird noch etwas andres gemaucht habe ich jedoch gelöscht da unwichtig
             Daten.BearbeiteDaten1.FieldByName('TestDatum').AsString := DateToStr(AktuellesDatum);
             Daten.BearbeiteDaten1.Post;
            end;
          end;
        end
       else
        begin
         FehlerZaehler := FehlerZaehler +1;
         Fehler.Caption := IntToStr(FehlerZaehler);
        end;
      end
     else
      begin
       FehlerZaehler := FehlerZaehler +1;
       Fehler.Caption := IntToStr(FehlerZaehler);
      end;
   Daten.AnfangsDaten.Next;
  end;
 Daten.TransEdit.Commit;
end;
Tanja
  Mit Zitat antworten Zitat