Einzelnen Beitrag anzeigen

messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#10

AW: Array aus DB mit Zahlen füllen

  Alt 12. Mär 2014, 19:40
Moin und Danke erstmal für die Tipps. Hat ja ein wenig gedauert bis ich da wieder Zeit für habe.
Der Grund: der Import alter Daten dauert jetzt schon ein paar Wochen. Auch hier habe ich für jedes Fertigungslos, die Komponente und die Subkomponente sowie die Messdaten je einen Zugriff der sehr langsam ist. Hier kann ich auch nicht sicher sagen, ob ein Teil der Datensätze schon in der DB vorhanden ist und ich ein paar weitere Messdaten hinzu fügen muss (Die Messdaten sind oft in verschiedenen Dateien abgelegt).

Kann man das Beschreiben der Datenbank irgendwie beschleunigen?

Struktur ist:
Delphi-Quellcode:
 
      s := 'SELECT count(*) FROM ' + Fertigungslos + ' WHERE (Auftragsnummer = ' + QuotedStr(IntToStr(JobID)) + ' .... )';
      i := DM.IBCQuery1.FieldByName('COUNT').AsInteger;
      
      if i > 0 then
      begin
        //modify entry in table
        s := 'SELECT ID FROM ' + Fertigungslos + ' WHERE (Auftragsnummer = ' + QuotedStr(IntToStr(JobID)) + '.... )';
        if not DM.IBCQuery1.IsEmpty then
        begin
          idx := DM.IBCQuery1.fieldbyname('ID').AsInteger;
        end;
        s := 'UPDATE ' + Fertigungslos +, DRAWING_NO = .... 'WHERE ID = ' + IntToStr(idx);
        DM.IBCQuery1.SQL.Add(s);
        DM.IBCQuery1.ExecSQL;
        DM.IBCTransaction1.Commit;

      end
      else
      begin
        //add entry to table
        s := 'INSERT INTO ' + Fertigungslos + QuotedStr(Batch.DrawNo) + ....')';
        DM.IBCQuery1.SQL.Add(s);
        DM.IBCQuery1.ExecSQL;
        DM.IBCTransaction1.Commit;
      end;
      DM.IBCTransaction1.StartTransaction;
      DM.IBCQuery1.SQL.Clear;
      //Kontrolle
      s := 'SELECT ID FROM ' + Fertigungslos + ' WHERE (Auftragsnummer = ' + QuotedStr(IntToStr(JobID) .... ' )';
      DM.IBCQuery1.SQL.Add(s);
      DM.IBCQuery1.Open;
      if not DM.IBCQuery1.IsEmpty then
      begin
        idx := DM.IBCQuery1.fieldbyname('ID').AsInteger;
      end
      else
      begin
        Result := False;
        DM.IBCTransaction1.Commit;
        Exit;
      end;
      Batch.DBindex := idx;
      DM.IBCTransaction1.Commit;
      if SavePumps then
      begin
        for i := 0 to Fertigungslos.PumpCount -1 do
        begin
          //pumpen speichern
          SavePumpToDB(Fertigungslos.Items[i],idx); ------> hier gehen die Strukturen iterativ weiter.
        end;
      end;
      Result := True;
Das blöde ist, ich brauche es nur ein Mal.

Grüße, Messie

Geändert von messie (12. Mär 2014 um 20:59 Uhr)
  Mit Zitat antworten Zitat