Einzelnen Beitrag anzeigen

Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#1

Insert geschwindigkeit verbessern

  Alt 10. Feb 2005, 13:27
Datenbank: Firebird • Version: 1.5.1 • Zugriff über: Sql (Zeos)
hallo leute,

ich moechte mich mal an die profis hier wenden und frag ob und wie ich das schreiben in die db schneller machen kann, dazu hier erstmal der quellcode:

Delphi-Quellcode:
if DM.ZCONDATA.Connected=false then DM.ZCONDATA.Connect;
        // schreiben der asset_data

      DM.ZQ.SQL.Clear;
      dm.ZQ.SQL.Add('INSERT INTO ASSET_DATA');
      dm.ZQ.SQL.Add('(ASSET_ID'); //a
      dm.ZQ.SQL.Add(',GEO_ID'); //b
      dm.ZQ.SQL.Add(',DATA)'); //c
      dm.ZQ.SQL.Add('values');
      dm.ZQ.SQL.Add('(:a,:b,:c);');
      dm.ZQ.ParamByName('a').AsInteger:=caid;
      dm.ZQ.ParamByName('b').AsInteger:=0; }
  lasset:=Tstringlist.Create;
  AssignFile(tempfile,OpeniDLG.FileName);
  Reset(tempFile);

  While not EOF(tempFile) do
  begin
    c:=c+1;
    ReadLN(tempFile,tempString);
    if c=1 then
    begin
    if (firstline) then
    begin
      dm.ZQ.ParamByName('c').AsString:=tempstring;
      dm.ZQ.ExecSQL;
    end;
    end
    else if c>1 then
    begin
      dm.ZQ.ParamByName('c').AsString:=tempstring;
      dm.ZQ.ExecSQL;
    end;
    bkrehab_fprogress.pb_progress.Position:=filepos(tempfile);
    bkrehab_fprogress.Panel2.Repaint;
    lasset.Append(tempstring)
  end;
dm.ZQ.SQL.Clear;
  dm.zq.SQL.add('commit retain;');
  dm.ZQ.ExecSQL;
in der while schleife lege ich den parameter c immer neu fest und schreibe per execsql in die db, nach schleifendurchlauf dann commit...
nun dauert das ganze bei ca. 6500 datensaetzen doch recht lange... ich hab mal was gelesen dass stored procedures schneller sind ... aber wie macht man sowas, geht das mit zeos... ist es ratsam? ich habe ja keine erfahrung damit... oder gibts andere moeglichkeiten die geschwindigkeit zu verbessern?
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat