Jump to content
Fivewin Brasil

SELECT, INSERT e UPDATE


Luiz Fernando

Recommended Posts

Pessoal com a ajuda de alguns colega aqui consegui resolver problema de lentidão no mysql com SELECT e, INSERT , mais com UPDATE sera que tem algum macete.

SELECT, no exemplo abaixo busco vários registros de uma unica vez 

  cPedidos := ""
  for i=1 to len(aBaixas)
      cPedidos += ANY2SQL( aBaixas[i,1] ) + ","
  next
  cPedidos := Left(cPedidos,Len(cPedidos)-1)  
  cSql="SELECT p.duplicat,date_format(p.vencto,'%d/%m/%y'),p.boleto,p.valor,p.cliente,c.razao"
  cSql+=",p.pago,date_format(p.pagto,'%d/%m/%y')"
  cSql+=" FROM parcela as p"
  cSql+=" LEFT JOIN cliente as c on p.cliente = c.cod_client" 
  cSql+=" WHERE p.duplicat IN ("+ cPedidos + ") "


INSERT,  no exemplo abaixo consigo dar o insert em vários registro indo no banco de dados uma unica vez

  SQLBeginTrans()
  *                            1    2      3        4        5      6      7       8        9
  cSql:="INSERT INTO vendas(pedido,data,cliente,subtotal,desconto,total,encargo,terminal,condicao"
  *          10      11     12    13     14       15  
  cSql+=",vendedor,usuario,data1,hora1,operacao,empresa"+")"
  cSql+="VALUES "
  for i=1 to len(aVendas)
  	   cSql+=" ( "+any2sql(aVendas[i,1])+" ,"            // 01
  	   cSql+=" "+any2sql(aVendas[i,2])+" ,"            // 02
  	   cSql+=" "+any2sql(aVendas[i,3])+" ,"            // 03
  	   cSql+=" "+any2sql(aVendas[i,4])+" ,"            // 04
  	   cSql+=" "+any2sql(aVendas[i,5])+" ,"            // 05
  	   cSql+=" "+any2sql(aVendas[i,6])+" ,"            // 06
  	   cSql+=" "+any2sql(aVendas[i,7])+" ,"            // 07
      cSql+=" "+any2sql(aVendas[i,8])+" ,"            // 08
  	   cSql+=" "+any2sql(aVendas[i,9])+" ,"            // 09
  	   cSql+=" "+any2sql(aVendas[i,10])+" ,"           // 10           
  	   cSql+=" "+any2sql(aVendas[i,11])+" ,"           // 11
      cSql+=" SUBSTRING(now(),1,10) ,"                // 12
      cSql+=" SUBSTRING(now(),12,5) ,"                // 13
  	   cSql+=" "+any2sql(aVendas[i,12])+" ,"           // 14
  	   cSql+=" "+any2sql(aVendas[i,13])+") "           // 15
      cSql+=iif( i=len( aVendas), "", "," )
  next
  SqlExecute(cSql)
  if SQLErrorNO() > 0 
     fMensagem() 
     return(.f.) 
  endif 
  SqlExecute("commit")	 
  SQLRollBack()
  SQLEndTrans()
  SQLRefresh() 

 

UPDATE, agora aqui como fazer algo para ir no banco uma unica vez ????

SQLBeginTrans()
for i=1 to len(aBaixas)
      cSql:="UPDATE parcela SET"
      cSql+="  encargo="+any2sql(aBaixas[i,9])+" ,"
	  cSql+=" desconto="+any2sql(0)+" ,"
	  cSql+="    pagto="+any2sql(aBaixas[i,7])+" ,"
	  cSql+="     pago="+any2sql(aBaixas[i,8])+" ,"
	  cSql+="    usu_b="+any2sql(cUsuario)+" ,"
      cSql+="   data_b= SUBSTRING(now(),1,10) ,"
      cSql+="   hora_b= SUBSTRING(now(),12,5) ,"
	  cSql+="    maq_b="+any2sql(cTerminal)+" ,"
	  cSql+=" lotepago="+any2sql(cLote)+" "
	  cSql+=" WHERE duplicat ='"+ALLTRIM(aBaixas[i,1])+"'"
	  sqlexecute(cSql)
	  if SQLErrorNO() > 0 
	     fMensagem() 
	     return(.f.) 
	  endif 
next
SQLExecute("commit")
SQLRollBack() 
SQLEndTrans() 
SQLRefresh()

 

Obg

Luiz Fernando

 

Link to comment
Share on other sites

 

Luiz Fernando,

Infelizmente no caso do UPDATE não tem como. Tens que fazer como estás fazendo, ou seja, executando todos os UPDATEs que são necessários.

Perfeito Kleyber, era só para saber mesmo, em caso de update em massa o importante que o campo que estiver no WHERE seja um indexador, dai podemos fazer update de 2mil 5mil registro que não demora nada.

 

Obg

Luiz Fernando

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...