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