Jump to content
Fivewin Brasil

Ajuda cim mysql/sqllib


Luiz Fernando

Recommended Posts

colegas gostaria de saber de vcs qual seria a forma correta de gravar os itens,hoje deixo o commit dentro do for next, mais fiz um teste com ele para fora do for next fica mais rapido, gravando dois, dez itens não percebe a diferença, mais qdo é 150 , 200 itens dai da para anotar a diferença.

for i:=1 to len(aItens) 
    SQLBeginTrans()
    cSql:="INSERT INTO pedido(pedido,tipo... continuação do codigo
    cSql+="VALUES( "+any2sql(aDados[D_PEDIDO])+" ," 
    cSql+=" "+any2sql(aDados[D_TIPO])+" ,"           
    ... continuação do codigo
    cSql+=" "+any2sql(aItens[i,26])+")"              
    SqlExecute(cSql)
    if SQLErrorNO() > 0 
       fMensagem() 
       return(.f.) 
    endif 
    SqlExecute("commit")	 
    SQLRollBack()
    SQLEndTrans()
    SQLRefresh() 
next

ou assim

for i:=1 to len(aItens) 
    SQLBeginTrans()
    cSql:="INSERT INTO pedido(pedido,tipo... continuação do codigo
    cSql+="VALUES( "+any2sql(aDados[D_PEDIDO])+" ," 
    cSql+=" "+any2sql(aDados[D_TIPO])+" ,"           
    ... continuação do codigo
    cSql+=" "+any2sql(aItens[i,26])+")"              
    SqlExecute(cSql)
    if SQLErrorNO() > 0 
       fMensagem() 
       return(.f.) 
    endif 
next
SqlExecute("commit")	 
SQLRollBack()
SQLEndTrans()
SQLRefresh() 

Obrigado

Luiz Fernando

Link to comment
Share on other sites

Olá,

Eu faria um pouco diferente:

SQLBeginTrans()
cSql:="INSERT INTO pedido(pedido,tipo... continuação do codigo
cSql+="VALUES "
for i:=1 to len(aItens) 
    ( "+any2sql(aDados[D_PEDIDO])+" ," 
    cSql+=" "+any2sql(aDados[D_TIPO])+" ,"           
    ... continuação do codigo
    cSql+=" "+any2sql(aItens[i,26])+")"
next              
SqlExecute(cSql)
if SQLErrorNO() > 0 
       fMensagem() 
       return(.f.) 
endif 
SqlExecute("commit")	 
SQLRollBack()
SQLEndTrans()
SQLRefresh() 

É muito mais rápido.

Link to comment
Share on other sites

Olá,

Eu faria um pouco diferente:

SQLBeginTrans()
cSql:="INSERT INTO pedido(pedido,tipo... continuação do codigo
cSql+="VALUES "
for i:=1 to len(aItens) 
    ( "+any2sql(aDados[D_PEDIDO])+" ," 
    cSql+=" "+any2sql(aDados[D_TIPO])+" ,"           
    ... continuação do codigo
    cSql+=" "+any2sql(aItens[i,26])+")"
next              
SqlExecute(cSql)
if SQLErrorNO() > 0 
       fMensagem() 
       return(.f.) 
endif 
SqlExecute("commit")	 
SQLRollBack()
SQLEndTrans()
SQLRefresh() 
É muito mais rápido.

Ola Evandro, obrigado pela resposta, achei bem interessante seu metodo, mais da erro de sintaxe do mysql, vou tentar fazer novos teste, depois retorno ao topico...

Abraços

Luiz Fernando

Link to comment
Share on other sites

Luis Fernando,

Deu erro porque faltou delimitar cada linha de dados a ser inserida com a vírgula (,). Ficaria mais ou menos assim:

SQLBeginTrans()
cSql:="INSERT INTO pedido(pedido,tipo... continuação do codigo
cSql+="VALUES "
for i:=1 to len(aItens) 
    ( "+any2sql(aDados[D_PEDIDO])+" ," 
    cSql+=" "+any2sql(aDados[D_TIPO])+" ,"           
    ... continuação do codigo
    cSql+=" "+any2sql(aItens[i,26])+"),"
next
//
cSql:=substr(cSql,1,len(cSql)-1)  // Pra tirar a última virgula
//
SqlExecute(cSql)
if SQLErrorNO() > 0 
       fMensagem() 
       return(.f.) 
endif 
SqlExecute("commit")	 
SQLRollBack()
SQLEndTrans()
SQLRefresh() 
Link to comment
Share on other sites

  • 2 weeks later...

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...