Update taking long time (again)

Discussion of open issues, suggestions and bugs regarding MyDAC (Data Access Components for MySQL) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
Willo
Posts: 34
Joined: Thu 24 Aug 2006 18:29

Update taking long time (again)

Post by Willo » Tue 11 Sep 2007 22:20

I have the following code, no matter if im working on my own computer (localhost) or connected to the network server (via IP), it takes from 15 to 35 seconds to insert or update the table.

What i should check?

BTW. im using Mydac 3.55, D7 and MySQL 5.0.xxx

Code: Select all

Dm.MyQactualiza.SQL.Text := 'INSERT INTO polizas (SL_POL,    SL_NUM,      SL_SOL,   SL_ASEG,  SL_DOM,   SL_FREC, SL_OBS1, '+
                               					    'SL_OBS2,   SL_EDO,      SL_TIPO,  SL_VIG1,  SL_VIG2,  SL_CIA,  SL_AGE,  '+
                                                           'SL_PRI,    SL_PFRA,     SL_DERP,  SL_IVA,   SL_COM,   SL_1ERP, SL_SIGP, '+
                                                           'SL_FPOL,   SL_FPA,      SL_FREN,  SL_POLA,  SL_COB,   SL_OBS3, SL_OBS4, '+
                                                           'SL_RENOV,  SL_CODCLT,   SL_VPAG,  SL_DESVP, SL_PLAZO, SL_MON,  SL_FALTA,'+
                               					    'SL_SUBAG,  SL_CONTRATO, SL_EXPE,  US_ID,    SU_ID,    SELSA,   SL_FACT1ER, '+
                                                           'SL_DESCTO, SL_UPFEC,    SL_UPFVEN,SL_UPNUM, SL_UPFOL) VALUES '+

  						 					  '(:SL_POL,   :SL_NUM,     :SL_SOL,  :SL_ASEG, :SL_DOM,  :SL_FREC, :SL_OBS1, '+
                               					   ':SL_OBS2,  :SL_EDO,     :SL_TIPO, :SL_VIG1, :SL_VIG2, :SL_CIA,  :SL_AGE,  '+
                                                          ':SL_PRI,   :SL_PFRA,    :SL_DERP, :SL_IVA,  :SL_COM,  :SL_1ERP, :SL_SIGP, '+
                                                          ':SL_FPOL,  :SL_FPA,     :SL_FREN, :SL_POLA, :SL_COB,  :SL_OBS3, :SL_OBS4, '+
                                                          ':SL_RENOV, :SL_CODCLT,  :SL_VPAG, :SL_DESVP,:SL_PLAZO,:SL_MON,  :SL_FALTA,'+
                                                          ':SL_SUBAG, :SL_CONTRATO,:SL_EXPE,:US_ID,   :SU_ID,   :SELSA,   :SL_FACT1ER,'+
                                                          ':SL_DESCTO,:SL_UPFEC,   :SL_UPFVEN,:SL_UPNUM,:SL_UPFOL)';

         	Dm.MyQactualiza.Parambyname('SL_FREN').Asdatetime   := Encodedate(1900,1,1);
	    	Dm.MyQactualiza.Parambyname('SL_FALTA').Asdatetime  := Gfechaact;
     	Dm.MyQactualiza.Parambyname('SL_POLA').AsString     := '';
          Dm.MyQactualiza.Parambyname('SL_RENOV').Asstring    := '';
          Dm.MyQactualiza.Parambyname('SL_UPNUM').Asstring    := '';
          Dm.MyQactualiza.Parambyname('SL_UPFOL').Asstring    := '';
          Dm.MyQactualiza.Parambyname('SL_UPFEC').Asdatetime  := Encodedate(1900,1,1);
          Dm.MyQactualiza.Parambyname('SL_UPFVEN').Asdatetime := Encodedate(1900,1,1);

     end
     else
     begin
     	//determina si es necesario generar nuevos recibos en la edicion de polizas
     	If (Qpolizas.FieldByName('SL_FPA').AsInteger  Strtoint(Copy(Eformadepago.Text,1,1))) or
        	(Trunc(Qpolizas.FieldByName('SL_VIG1').AsDateTime)  Trunc(Evigencia1.Date)) Or
        	(Trunc(Qpolizas.FieldByName('SL_VIG2').AsDateTime)  Trunc(Evigencia2.Date)) or
        	(Roundto(Qpolizas.FieldByName('SL_PRI').Asfloat,-2)  Roundto(Eprimaneta.Value,-2)) Or
          (Roundto(Qpolizas.FieldByName('SL_DESCTO').Asfloat,-2)  Roundto(Edescuento.Value,-2)) Or
        	(Roundto(Qpolizas.FieldByName('SL_PFRA').AsFloat,-2)  Roundto(Epagofracc.Value,-2)) Or
        	(Roundto(Qpolizas.FieldByName('SL_DERP').AsFloat,-2)  Roundto(Egastosexp.Value,-2)) Then
          	xnvosrecibos := True;

     	Dm.Bitacora('POLIZAS','Edicion de poliza',Epoliza2.Text);

          Dm.MyQactualiza.SQL.Text := 'UPDATE polizas SET SL_POL = :SL_POL, SL_NUM = :SL_NUM, SL_SOL = :SL_SOL, SL_ASEG = :SL_ASEG,'+
          				 		'SL_DOM = :SL_DOM, SL_TEL = :SL_TEL, SL_FREC = :SL_FREC, SL_OBS1 = :SL_OBS1, SL_OBS2 = :SL_OBS2,'+
                               		'SL_EDO = :SL_EDO, SL_TIPO = :SL_TIPO, SL_VIG1 = :SL_VIG1, SL_VIG2 = :SL_VIG2, SL_CIA = :SL_CIA,'+
  						 		'SL_AGE = :SL_AGE, SL_PRI = :SL_PRI, SL_PFRA = :SL_PFRA, SL_DERP = :SL_DERP, SL_IVA = :SL_IVA,'+
 						 		'SL_COM = :SL_COM, SL_1ERP = :SL_1ERP, SL_SIGP = :SL_SIGP, SL_FPOL = :SL_FPOL, SL_FPA = :SL_FPA,'+
  						    		'SL_FREN = :SL_FREN, SL_POLA = :SL_POLA, SL_COB = :SL_COB,'+
  						 		'SL_OBS3 = :SL_OBS3, SL_OBS4 = :SL_OBS4, SL_RENOV = :SL_RENOV, SL_CODCLT = :SL_CODCLT,'+
                               		'SL_VPAG = :SL_VPAG, SL_DESVP = :SL_DESVP, SL_PLAZO = :SL_PLAZO, SL_MON = :SL_MON, '+
                               		'SL_SUBAG = :SL_SUBAG, SL_CONTRATO = :SL_CONTRATO, SL_EXPE = :SL_EXPE, US_ID = :US_ID, SU_ID = :SU_ID,'+
  						 		'SELSA = :SELSA, SL_FACT1ER = :SL_FACT1ER, SL_DESCTO=:SL_DESCTO Where SL_ID = :Old_SL_ID';
         Dm.MyQactualiza.ParamByName('Old_SL_ID').AsInteger := Qpolizas.FieldByName('SL_ID').AsInteger;

     end;

     If xrenova = True Then
     begin
         	Dm.MyQactualiza.Parambyname('SL_FREN').Asdatetime := Gfechaact;
     	Dm.MyQactualiza.Parambyname('SL_POLA').AsString   := xpolactual;
          Dm.MyQactualiza.Parambyname('SL_RENOV').Asstring  := Epoliza2.text;
     end;

    	Dm.MyQactualiza.Parambyname('US_ID').Value       := Gusid;
     Dm.MyQactualiza.Parambyname('SL_SOL').Value      := Esolicitud.Text;
     Dm.MyQactualiza.Parambyname('SL_POL').Value      := Epoliza2.Text;
     Dm.MyQactualiza.Parambyname('Sl_DOM').AsString   := Copy(CBdireccion.Text,1,5);
     //Dm.MyQactualiza.Parambyname('SL_codclt').Value   := Ecl_codclt.Text;
     Dm.MyQactualiza.Parambyname('SL_NUM').Value      := strtoint(Ecliente.Text);
     Dm.MyQactualiza.Parambyname('SL_ASEG').Value     := Easegurado.Text;
     Dm.MyQactualiza.Parambyname('SL_FPOL').Asdatetime:= Eemision.Date;
     Dm.MyQactualiza.Parambyname('SL_FREC').AsDatetime:= Gfechaact;
     Dm.MyQactualiza.Parambyname('SL_OBS1').Value     := Eobs1.Text;
     Dm.MyQactualiza.Parambyname('SL_OBS2').Value     := Eobs2.Text;
     Dm.MyQactualiza.Parambyname('SL_OBS3').Value     := Eobs3.Text;
     Dm.MyQactualiza.Parambyname('SL_OBS4').Value     := Eobs4.Text;
     Dm.MyQactualiza.Parambyname('SL_EDO').Value      := Copy(Eestatus.Text,1,1);
     Dm.MyQactualiza.Parambyname('SL_COB').Value      := Copy(Cobertura.text,1,Ansipos('-',Cobertura.text)-1);
     Dm.MyQactualiza.Parambyname('SL_TIPO').Value     := Eramo.text;
     Dm.MyQactualiza.Parambyname('SL_VIG1').Asdatetime:= Evigencia1.Date;
     Dm.MyQactualiza.Parambyname('SL_VIG2').Asdatetime:= Evigencia2.Date;
     Dm.MyQactualiza.Parambyname('SL_CIA').Value      := Ecia.Text;
     Dm.MyQactualiza.Parambyname('SL_PRI').Value      := Eprimaneta.Value;
     Dm.MyQactualiza.Parambyname('SL_DESCTO').Value   := Edescuento.Value;
     Dm.MyQactualiza.Parambyname('SL_PFRA').Value     := Epagofracc.Value;
     Dm.MyQactualiza.Parambyname('SL_DERP').Value     := Egastosexp.Value;
     Dm.MyQactualiza.Parambyname('SL_IVA').Value      := Eiva.Value;
     Dm.MyQactualiza.Parambyname('SL_COM').Value      := Ecomision.Value;
     Dm.MyQactualiza.Parambyname('SL_1ERP').Value     := E1erpago.Value;
     Dm.MyQactualiza.Parambyname('SL_SIGP').Value     := E2opago.Value;
     Dm.MyQactualiza.Parambyname('SL_FPA').value      := Strtoint(Copy(Eformadepago.Text,1,1));
     Dm.MyQactualiza.Parambyname('SL_VPAG').Value     := Copy(Eviapag.Text,1,1);
     Dm.MyQactualiza.Parambyname('SL_FACT1ER').Value  := Efact1er.Text;
   	Dm.MyQactualiza.Parambyname('SL_AGE').Value      := Esubag.Text;
     Dm.MyQactualiza.ParamByName('SELSA').Value       := Strtointdef(Eselsa.Text,0);
     Dm.MyQactualiza.ParamByName('SU_ID').Value       := xsucursal;
     Dm.MyQactualiza.Parambyname('SL_DESVP').Value    := Edesviapag.Text;
     Dm.MyQactualiza.Parambyname('SL_CONTRATO').Value := Econtrato.Text;


     if Esubag.Text  '' then
     	Dm.MyQactualiza.Parambyname('SL_SUBAG').Value    := Esubag.Text
     else
          Dm.MyQactualiza.Parambyname('SL_SUBAG').Value    := '0';

     If RBdlls.Checked then
          Dm.MyQactualiza.Parambyname('SL_MON').AsString := 'D'
     else
     	Dm.MyQactualiza.Parambyname('SL_MON').AsString := 'P';

     Fcappol.Cursor := crHourglass;
     Dm.MyQactualiza.Execute;

Antaeus
Posts: 2098
Joined: Tue 14 Feb 2006 10:14

Post by Antaeus » Thu 13 Sep 2007 07:26

Try to execute the following simple commands, and note down the time of their executions:

Code: Select all

  - SELECT 1;
  - INSERT INTO atable (afield) VALUES (1).
Also catch your long INSERT statement with parameters substituted by their values, and measure in bytes size of this statement. I explained how to do this here.

PS: Please do not duplicate topics in the future.

Post Reply