Eroni
-
Posts
561 -
Joined
-
Last visited
-
Days Won
6
Posts posted by Eroni
-
-
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?
-
Bom dia, esta versão acessa mysql nativo sem precisar de outro rdd? Estou usando atualmente o SqlRdd mas to querendo mudar, mas só uso para conectar e rodar comandos, uma classe nativa seria melhor, não precisaria de tantas libs, além do mais tem o problema de a conexão cair e não conseguir gerenciar pelo sistema.
-
Bom dia, essa TDolphin, é uma lib de terceiros? É para uso exclusivo com Mysql?
-
Bom dia o meu tem mais de 12MB.
-
-
Olá, também tenho interesse, caso haja alguma viabilidade.
-
Bom dia Daniel, estou interessado no curso, porém um ítem importante que preciso saber antecipadamente para me programar seria o local do curso.
Abraço.
-
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.
-
Consegui resolver o problema de duas assinaturas para NFSe. Se mais alguem passar por este problema e precisar, fico ao dispor.
-
Bom dia, alguém já implementou NFSe usando xHarbour mais especificamente assinando o xml duas vezes, o rps e o lote?
Abraço.
-
Bom dia, da maneira como o seu projeto está, acredito ser dificil gerenciar base de dados grande. Eu uso uma tabela de movimento e uma tabela de saldos, esta ultima tem o codigo do produto, a data e o saldo. Os campos data e codigo do produto são chave primaria e possuem indices. Desta forma, qualquer pesquisa é instantânea independente da quantidade de registros.
-
Boa tarde, alguem já usa? Estou começando a usar e já notei que o timer não funciona mais, além daquela lentidão que já experimentava no 8 devido aquele problema no banco do brasil. Será que vamos ter que atualizar as ferramentas?
-
Bom dia, estou com mesmo problema, mas aparentemente, ainda sem solução, já tentei finalizar estes programas da memoria, mas sem resultados praticos de curto prazo.
-
Bom dia, os indices desta tabela estão projetados corretamente?
-
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.
-
Bom dia. Eu. Do que precisa?
-
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.
-
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?
-
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.
-
Bom dia, se não resolveu ainda, recomendo nao usar o max,, mas sim combinar um SUM com um order by data DESC e com clausula LIMIT 1, desta forma a perfomance será boa.
-
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.
-
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.
-
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 ) -
No caso de usar banco de dados relacional, existem inumeras soluções, como eu uso somente array em browsers, eu faço tudo no select, no seu caso poderia criar uma tabela temporária com o select ou então usar o array no browse.
Arquivo.HRB
in Programação
Posted
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