Jump to content
Fivewin Brasil

Eroni

Membros
  • Posts

    561
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by Eroni

  1. Usando um arquivo HBR para cada fonte e chamando do menu funciona certinho, acabei de testar, mas a duvida que não encontrei no forum é como gerar um unico arquivo com todos os fontes, (repositorio)

    Abraços

  2.  

     

    Isso ai Gilmer, eu também trabalho com HRBs, coloco tudo em um unico arquivo que chamo de repositório. Os 19mbs é a soma do executavel (4mb) com o HRB (15MB) que carrego na memoria ao abrir.

    Realmente é bem mais fácil e pratico trabalhar com HRB, por exemplo, se o cliente tem um erro no cadastro de funcionarios (por exemplo) você precisa apenas atualizar o HRB correspondente ao cadastro do funcionario e não enviar todo um executavel.

     

    Abraços

     

    Boa tarde, esta solução que estou procurando a bastante tempo e nunca consegui gerar estes HRB que funcionasse satisfatoriamente, pode postar o script para compilação e linker?

  3. Bom dia pessoal, acredito que este assunto é de interesse publico, alguém já poderia postar aqui sua experiência, tipo acesso a banco de dados, etc?

    Eu particularmente ainda estou a procura de uma solução, pois não quero iniciar em uma ferramenta para daqui a pouco sair dela, vou aguardar mais alguns meses para decidir.

    Abraços a todos.

  4. Bom dia Amigo, qual o nome desta função? Ela está em alguma classe específica da NFe?

    Estou para iniciar a implementação da leitura do xml para dar entrada na NF de fornecedor e tenho interesse também, posso ajudar neste caso.

    Abraços.

  5. Bom dia pessoal, baixei o fivedroid porém tentei de várias formas criar uma máquina virtual para testes com desenvolvimento android, porém todas sem sucesso. Alguém ai com mais experiência pode dizer como e com quais ferramentas montou ambiente de desenvolvimento?

    Abraços e obrigado antecipadamente.

  6. Bom dia pessoal, estou sendo pressionado por alguns clientes para migrar uma solução que já integra com o ERP de desktop para uma plataforma móvel e o fivetouch parece que seria uma solução, mas tudo que li ate agora não menciona como é feito ( ou se será ) o acesso a bancos de dados relacionais. Na minha opinião todo o resto é coisa que se pode ir melhorando aos poucos, mas o acesso a banco de dados é essencial para se iniciar o desenvolvimento de aplicações, alguém já usou e pode passar a experiência?

  7. Bom dia, os dados estão no manual do Sped, mas acredito que a parte mais dificil será criar a estrutura dos blocos, pois os dados, você conhecendo o seu sistema e lendo o manual vai ser fácil.

    Eu já tenho rodando, é um desenvolvimento bem complexo, se quiser me pode me adicionar no skype.

  8. Crisvan, bom dia, acho que o fato de rodar o exe já resolveu o problema do MAP, o fato de não mostrar nada e ficar no processos do windows deve ser um problema dentro do seu main.prg, já passei por isso a muito tempo atrás mas nao lembro especificamente como resolvi, mas tenho quase certeza que é dentro do main.prg, ou então ele não está sendo o fonte principal da sua aplicação.

  9. Olá, Luiz, por acaso já tentou usar "left outer join" ao invés de simplesmente "left join" ? Porque dependendo se for junção por fora ou junção por dentro o resultado pode ser diferente caso exista registros em uma tabela e não na outra.

  10. Boa tarde, ai está o que eu uso, resumidamente:

    AAdd( aCampos, { "c001fili_", "c", 04, 00, " " } ) // codigo da empresa
    AAdd( aCampos, { "c001codi_", "c", 06, 00, " " } ) // codigo
    AAdd( aCampos, { "c001aliq_", "n", 18, 03, 0 } ) // % aliquota
    AAdd( aCampos, { "c001redu_", "n", 18, 03, 0 } ) // % de reducao
    AAdd( aCampos, { "c001obse_", "c", 80, 00, " " } ) // observacoes

    SW_ChangeStruct( "arq001", aCampos )

    *******************************************************************************************
    *******************************************************************************************
    /*
    * Altera a estrutura de uma tabela
    */
    *******************************************************************************************
    *******************************************************************************************
    FUNCTION SW_ChangeStruct( cTable, aNew )
    LOCAL lRet := .T.
    LOCAL aOld
    LOCAL cName, cType, nDec, nCols, cNull, nLen, cStr, cAfter, cDef
    LOCAL nLenOld, nDecOld, a
    LOCAL oSql := SR_GetConnection()
    LOCAL cSql := ""
    LOCAL cStrDef,nAt,aArray

    cTable := Upper( cTable )

    IF cTable <> NIL .AND. ValType( aNew ) == "A" .AND. Len( aNew ) > 0

    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cSql := "Select * from " + cTable + " LIMIT 1 "
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cSql := "Select TOP 1 * from " + cTable
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cSql := "Select * from " + cTable + " WHERE ROWNUM < 2 "
    OTHERWISE ; cSql := "Select * from " + cTable
    ENDCASE

    oSql:Execute( cSql )

    oSql:IniFields( .F. )
    aOld := oSql:AFields
    cStr := ""

    nCols := Len( aNew )

    FOR a := 1 TO nCols

    SysRefresh() // reapresentar os controles

    cName := Upper( aNew[ a, 1 ] )
    cType := aNew[ a, 2 ]
    nLen := aNew[ a, 3 ]
    nDec := aNew[ a, 4 ]
    cStrDef := aNew[ a, 5 ]
    cAfter := ""
    cDef := ""
    cNull := "NOT NULL "

    IF Upper( cType ) <> "D"

    // descobrir qual a coluna a ser alterada
    nAt := AScan( aOld, { | x | AllTrim( Upper( x[ 1 ] ) ) == AllTrim( Upper( cName ) ) } )
    IF nAt > 0

    // Verificar se o tamanho e decimal dos campos foram alterados
    nLenOld := aOld[ nAt, 3 ]
    nDecOld := aOld[ nAt, 4 ]

    IF nLen <> nLenOld // tamanho diferente


    cStr += "ALTER TABLE " + cTable + " "

    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " MODIFY COLUMN " + cName + " "
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " ALTER COLUMN " + cName + " "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " MODIFY " + cName + " "
    ENDCASE

    DO CASE
    CASE Upper( cType ) == "D"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " date " ; cDef := "DEFAULT '00000000' "
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " smalldatetime " ; cDef := "DEFAULT (GetDate()) "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " date " ; cDef := "DEFAULT SYSDATE "
    ENDCASE

    CASE Upper( cType ) == "N"

    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " double(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := IF( cStrDef <> 0, "DEFAULT "+AllTrim(Str(cStrDef)),"DEFAULT 0 " )
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " decimal(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := "DEFAULT 0 "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " number(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := "DEFAULT 0 "
    ENDCASE

    CASE Lower( cType ) == "c"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " char(" + AllTrim( Str( nLen, 3 ) ) + ") " ; cDef := IF( Len(cStrDef) > 0, "DEFAULT '"+AllTrim(cStrDef)+"'","DEFAULT ' ' " )
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " char(" + AllTrim( Str( nLen, 3 ) ) + ") " ; cDef := " "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " char(" + AllTrim( Str( nLen, 3 ) ) + ") " ; cDef := "DEFAULT ' ' "
    ENDCASE

    CASE Lower( cType ) == "m"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " MEDIUMBLOB " ; cDef := "" //IF( Len(cStrDef) > 0, "DEFAULT '"+AllTrim(Str(cStrDef))+"'","DEFAULT ' ' " )
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " TEXT " ; cDef := ""
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " LONG " ; cDef := "DEFAULT ' ' "
    ENDCASE
    ENDCASE
    IF Upper( oSistema:cDbDriver_ ) == "ORACLE"
    cStr += cAfter
    cStr += cDef
    cStr += cNull
    cStr := Lower( cStr ) + ";"
    ELSE
    cStr += cNull
    cStr += cDef
    cStr += cAfter
    cStr := Lower( cStr ) + ";"
    ENDIF

    ELSE

    // somente verificar se o decimal é diferente
    IF Upper( cType ) <> "C" .AND. Upper( cType ) <> "D" // tipo char e data nao temn decimal
    IF nDec <> nDecOld

    cStr += "ALTER TABLE " + cTable + " "

    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " MODIFY COLUMN " + cName + " "
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " ALTER COLUMN " + cName + " "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " MODIFY " + cName + " "
    ENDCASE

    DO CASE
    CASE Lower( cType ) == "d"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " date " ; cDef := "DEFAULT '00000000' "
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " smalldatetime " ; cDef := "DEFAULT (GetDate()) "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " date " ; cDef := "DEFAULT sysdate "
    ENDCASE

    CASE Lower( cType ) == "n"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " double(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := IF( cStrDef <> 0, "DEFAULT "+AllTrim(Str(cStrDef)),"DEFAULT 0 " )
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " decimal(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := "DEFAULT 0 "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " NUMBER(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := "DEFAULT 0 "
    ENDCASE

    CASE Lower( cType ) == "c"
    cStr += " char(" + AllTrim( Str( nLen, 3 ) ) + ") " ; cDef := IF( Len(cStrDef) > 0, "DEFAULT '"+AllTrim(Str(cStrDef))+"'","DEFAULT ' ' " )

    CASE Lower( cType ) == "m"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " MEDIUMBLOB " ; cDef := "" //IF( Len(cStrDef) > 0, "DEFAULT '"+AllTrim(Str(cStrDef))+"'","DEFAULT ' ' " )
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " TEXT " ; cDef := ""
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " LONG " ; cDef := "DEFAULT ' ' "
    ENDCASE
    ENDCASE
    IF Upper( oSistema:cDbDriver_ ) == "ORACLE"
    cStr += cAfter
    cStr += cDef
    cStr += cNull
    cStr := Lower( cStr ) + ";"
    ELSE
    cStr += cNull
    cStr += cDef
    cStr += cAfter
    cStr := Lower( cStr ) + ";"
    ENDIF
    ENDIF
    ENDIF
    ENDIF

    ELSE // else do at > 0

    //nao achou o campo, criar o campo nao encontrado
    cStr += "ALTER TABLE " + cTable + " "
    cStr += " ADD " + cName + " "
    IF a > 1
    IF Upper( oSistema:cDbDriver_ ) == "MYSQL"
    cAfter := " AFTER " + aNew[ a - 1, 1 ] + " "
    ENDIF
    ENDIF

    DO CASE
    CASE Lower( cType ) == "d"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " date " ; cDef := "DEFAULT '00000000' "
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " smalldatetime " ; cDef := "DEFAULT (GetDate()) "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " DATE " ; cDef := "DEFAULT SYSDATE "
    ENDCASE

    CASE Lower( cType ) == "n"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " double(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := IF( cStrDef <> 0, "DEFAULT "+AllTrim(Str(cStrDef)),"DEFAULT 0 " )
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " decimal(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := "DEFAULT 0 "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " NUMBER(" + AllTrim( Str( nLen, 3 ) ) + "," + AllTrim( Str( nDec ) ) + ") " ; cDef := "DEFAULT 0 "
    ENDCASE

    CASE Lower( cType ) == "c" ; cStr += " char(" + AllTrim( Str( nLen ) ) + ") " ; cDef := IF( Len(cStrDef) > 0 , "DEFAULT '"+AllTrim(cStrDef)+"'","DEFAULT ' ' " )

    CASE Lower( cType ) == "m"
    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " MEDIUMBLOB " ; cDef := "" /* IF( Len(cStrDef) > 0, "DEFAULT '"+AllTrim(Str(cStrDef))+"'","DEFAULT ' ' " )*/ ; cNull := ""
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " TEXT " ; cDef := ""
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " LONG " ; cDef := "DEFAULT ' ' "
    ENDCASE
    ENDCASE
    IF Upper( oSistema:cDbDriver_ ) == "ORACLE"
    cStr += cAfter
    cStr += cDef
    cStr += cNull
    cStr := Lower( cStr ) + ";"
    ELSE
    cStr += cNull
    cStr += cDef
    cStr += cAfter
    cStr := Lower( cStr ) + ";"
    ENDIF
    ENDIF

    ELSE // se for tipo DATA

    // descobrir qual a coluna a ser inserida
    nAt := AScan( aOld, { | x | AllTrim( Upper( x[ 1 ] ) ) == AllTrim( Upper( cName ) ) } )
    IF nAt = 0 //nao achou o campo, criar o campo nao encontrado
    cStr += "ALTER TABLE " + cTable + " "
    cStr += " ADD " + cName + " "
    IF a > 1
    IF Upper( oSistema:cDbDriver_ ) == "MYSQL"
    cAfter := " AFTER " + aNew[ a - 1, 1 ] + " "
    ENDIF
    ENDIF

    DO CASE
    CASE Upper( oSistema:cDbDriver_ ) == "MYSQL" ; cStr += " date " ; cDef := "DEFAULT '00000000' "
    CASE Upper( oSistema:cDbDriver_ ) == "MSSQLSERVER" ; cStr += " smalldatetime " ; cDef := "DEFAULT (GetDate()) "
    CASE Upper( oSistema:cDbDriver_ ) == "ORACLE" ; cStr += " DATE " ; cDef := "DEFAULT SYSDATE "
    ENDCASE

    IF Upper( oSistema:cDbDriver_ ) == "ORACLE"
    cStr += cAfter
    cStr += cDef
    cStr += cNull
    cStr := Lower( cStr ) + ";"
    ELSE
    cStr += cNull
    cStr += cDef
    cStr += cAfter
    cStr := Lower( cStr ) + ";"
    ENDIF
    ENDIF

    ENDIF

    NEXT a

    cStr := AllTrim( cStr )

    IF Len( cStr ) > 0
    aArray := ListAsArray( cStr , ";" )
    IF Len( aArray ) > 0
    FOR a := 1 TO Len( aArray )
    IF Len( aArray[ a ] ) > 0
    IF ! SWExecSql( Upper(aArray[ a ]),.F. )
    lRet := .F.
    EXIT
    ENDIF
    ENDIF
    NEXT a
    ENDIF
    ENDIF
    ENDIF

    RETURN( lRet )

×
×
  • Create New...