Jump to content
Fivewin Brasil

evandro

Membros
  • Posts

    2,514
  • Joined

  • Last visited

  • Days Won

    19

Posts posted by evandro

  1. Olá,

    Dá para usar os comandos DBF, só que é um quebra-galho. O certo é você "brincar" bastante com o SGDB escolhido ( recomendo MySql ) antes de migrar. Depois de migrar teste todas as rotinas para ver se deu algum problema e ver também questão de tempo de processamento. Tem rotina que vai ficar mais rápida e outras vão ficar mais demoradas. Priorize a conversão das rotinas que ficarão mais lentas e/ou das que são mais críticas.

  2. Olá,

    O problema é o subselect, que também se faz presente na sugestão do João. Sugiro criar uma tabela temporária, criar um índice nesta tabela e relacionar (join) com a principal.

    Seria algo mais ou menos assim:

    create TEMPORARY table temp
    SELECT MAX(pe.data) AS data, pe.produto
    FROM pedido as pe
    WHERE pe.tipo='1' and data < '2015-11-30'
    GROUP BY pe.produto
    ORDER BY pe.produto;
    
    CREATE INDEX produto ON temp (produto);
    
    SELECT temp.data, prod.produto, prod.descricao
    FROM produto as prod
    LEFT JOIN temp ON prod.produto = temp.codigo;
    
    
  3. Olá,

    Se vc usar DBF até que fica legal mas se usar banco de dados aborte a idéia...

    Discordo totalmente. O Alex2002 desenvolveu uma rotina que faz esta busca mais rápido do que se fosse DBF (argh!). Creio até que ele já postou esta rotina por aqui.

  4. Olá,

    Tente assim:

    function tr_etiqueta_g()
      cSql:='USE empresoft;'
      SqlExecute(cSql) 
    
      cSql:='DROP TRIGGER tr_etiqueta_g;'
      SqlExecute(cSql) 
    
      cSql:='CREATE'
      cSql+=' TRIGGER tr_etiqueta_g'
      cSql+=' AFTER'
      cSql+=' INSERT'
      cSql+=' ON altepre'
      cSql+=' FOR EACH ROW BEGIN'
      cSql+=' INSERT INTO etique_gandola ( produto,preco,conferido )'
      cSql+=' VALUES ( new.codigo, new.vlratu, "N" ) ;'
      cSql+=' END;'
      cSql+=''
      SqlExecute(cSql) 
    return .t.
    
    
  5. Olá,

    Faça uma rotina que verifique a existência. Caso não exista, crie.

    aSql := SqlArray( 'SHOW TRIGGERS FROM empresoft ' )
       
    for i := 1 to len( aTriggers )
     
          nAchou:=AAscan( aSql, lower(aTriggers[i]) )
           
          if nAchou=0
                 if !CriaTrigger( aTriggers[i] )
                      MsgAlert( 'problema', 'Problema' )
                 endif
          endif
    next
    return nil
    
    static function CriaTrigger( cTrigger )
    
    if cTrigger='tr_etiqueta_g'
        cSql:='USE empresoft;'
        cSql+=''
        cSql+='DROP TRIGGER tr_etiqueta_g;'
        cSql+=''
        cSql+='CREATE'
        cSql+=' TRIGGER tr_etiqueta_g'
        cSql+=' AFTER'
        cSql+=' INSERT'
        cSql+=' ON altepre'
        cSql+=' FOR EACH ROW BEGIN'
        cSql+=' INSERT INTO etique_gandola ( produto,preco,conferido )'
        cSql+=' VALUES ( new.codigo, new.vlratu, "N" ) ;'
        cSql+=' END;'
        cSql+=''
        SqlExecute(cSql) 
    endif
    
    return .t.
  6. Olá,

    Seria algo assim:

    create temporary table temp1 
    SELECT vda.CODVEN, SUM(vda.QTDVEN) AS TOTAL_VENDIDO, COUNT(*) AS Num_Pedido
    FROM vendas AS vda 
    where vda.COD_PRODUTO = 1
    GROUP BY vda.CODVEN;
    
    create index temp1 on temp1 ( codven )
    
    create temporary table temp2 
    comp.COD_PRODUTO, SUM(comp.QTDE_COMPRADA) AS TOTAL_COMPRADO, COUNT(*) AS Num_comprado
    from compras as comp
    where comp.COD_PRODUTO = 1
    GROUP BY vda.CODVEN;
    
    create index temp2 on temp2 ( codven )
    
    SELECT vda.CODVEN, vda.TOTAL_VENDIDO, vda.Num_Pedido,
    comp.COD_PRODUTO, comp.TOTAL_COMPRADO, comp.Num_comprado, 
    comp.QTDE_COMPRADA-vda.QTDVEN AS SALDO
    FROM temp1 AS vda 
    LEFT JOIN temp2 AS comp ON vda.CODVEN = comp.COD_PRODUTO 
    
    
  7. Olá,

    Fiz o AR que imprime 2 por página, que deve ser o que você quer. No formulário coloquei apenas um MasterData da altura de meia página com todas as informações no MasterData. Funciona perfeitamente.

  8. Olá,

    Primeiro agradecer pela alcunha de "Pilantra" hehehehe.

    É claro que fazer um Encontro em Petrópolis, Curvelo ou outra cidade do interior tem inúmeras vantagens, teremos o maior prazer em organizar, mas tem uma desvantagem que mata tudo: deslocamento, logística. É muito mais complicado do que se for em SP ( que tem a maioria do fivewiners ) ou BH (que tem os mais presentes nos Encontros).

    O tema, muito bem colocado pelo Marcelo, deve ser os rumos a adotar para Web e Mobile. Os outros, citados anteriormente, são específicos para um ramo de negócio. Pode até ser abordado também, claro, mas vejo que o primordial é traçarmos um caminho a seguir, orientarmos para o futuro, que já é presente.

    E nem preciso reafirmar que sendo em Petrópolis, Rio, Curvelo, BH, SP, Guarulhos ou onde for, estarei presente.

  9. Olá,

    Marcelo, vai ser na Rua Teresa, 1515 mesmo???

    Você acha que o Marcelo vai fazer um evento destes na mega loja da Rua Teresa? Nada disto. Tem outros locais muito mais apropriados. Até a casa dele deve comportar. Ele morava numa mansão num sítio, mudou para outra melhor. Imagine esta nova! Além disto tem vários locais bacanas.

×
×
  • Create New...