Jump to content
Fivewin Brasil

ecob

Membros
  • Posts

    32
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by ecob

  1. Oi @gibaf, obrigado por responder. Eu desconheço como é trabalhar com .hrb, teria algo pra me indicar a ler e aprender? Em todo caso, vou pesquisar aqui, obrigado pela dica. edit @gibaf, roda em xharbour e com sqllib? se tiver algum exemplo bem simples, agradeço.
  2. @oribeiro, aqui criamos tudo na unha, ou seja, com "@SAY", então ao criar uma tela, com grid, group, button, etc etc, criamos um único código q se adapta a resolução que for. Para isso, criamos 2 variáveis apenas para pegar a resolução com a função ScrResolution, depois criamos a dialog.
  3. Cria um campo mediumblob, que armazena até 16mb se não me engano, e salve conforme o @rochinha já orientou. Quanto ao preview, faria como o rochinha falou, gerava um jpg da primeira página do pdf, dependendo o tamanho faria um resize pra ficar menorzinho, e salvaria no banco da mesma forma que o PDF, então seria 2 campos no BD.
  4. Caros, bom dia. Percebemos que na compilação com xharbour, usando FUNCTIONS simplesmente, é feita alguma espécie de carregamento na memória que deixa a inicialização super lenta como relatado. Para isso não acontecer, é necessário criar STATIC FUNCTIONS do que não é usado por outros módulos. Thanks
  5. Entendi @rochinha. É que compilando com o harbour, a sqllib não funcionaria, acredito. Vou voltar a tentar achar uma solução semana que vem. Agradeço por hora.
  6. Boa tarde. Precisei criar uma lib esses dias, e fui fazendo um apanhado de informações para aprender como fazer. Então venho postar aqui o script final que fiz, apenas a título de informação para alguém que venha a buscar pelo google essa informação, rs. fivewin 8.01 xharbour 1.10 bcc 5.5.1 set var_file_lib=\users\eco\minhalib.lib DEL %var_file_lib% set var_harbour=\xharbour-1.10.00\bin\harbour.exe set var_bcc32=\BCC55\Bin\bcc32.exe set var_tlib=\BCC55\Bin\tlib.exe set var_include=C:\BCC55\include;C:\FWH\include;C:\xharbour-1.10.00\include set var_dir_lib=\BCC55\Lib;\xharbour-1.10.00\lib set var_FON=\USERS\PASTA_DE_PROGRAMAS set var_OBJ=\USERS\PASTA_DE_PROGRAMAS\PRJ\OBJ set var_programa=meuprograma SET var_ext=PRG @%var_harbour% %var_FON%\%var_programa%.%var_ext% /N /M /I%var_include% /O%var_OBJ%\ SET var_ext=C @%var_bcc32% -W -DHB_STATISTICS_OFF -DHB_OS_WIN_32 -O2 -OS -d -L%eco_dir_lib% -c -I%var_include% -n%var_OBJ% %var_OBJ%\%var_programa%.%var_ext% SET var_ext=OBJ @%var_tlib% "%var_file_lib%" /0 /P32768 +"%var_OBJ%\%var_programa%.%var_ext%"
  7. Rochinha, vc tem o script de compilação fácil aí?
  8. Vlw pela dica rochinha... vou ver se consigo uma versão do harbour e testar, ao invés do xHarbour Mto interessante o EXE com só 1.3mb Vlw Kapiaba, vou testar essa dica sua aí tb
  9. Então Kapiaba, falei errado. Estou compilando com xHarbour versão 1.10.00 Fivewin 8.01
  10. É isso certo? harbour.exe ".\Main.PRG" /n /q /o".\Main.c" /M /N Fiz e continuou a mesma coisa =/ Bom dia João. Aqui também cheguei a separar, deixei 10 mil funções em cada PRG, e deu essa demora mesmo, 32 segundos. Será esse um problema do fivewin/harbour? Pois é tempo demais para carregar uma aplicação. Como falei, isso não acontece em C# por exemplo. Então kapiaba, estou compilando com harbour, veja: harbour.exe ".\Main.PRG" /n /q /o".\Main.c" /M /N harbour.exe ".\Func20.PRG" /n /q /o".\Func20.c" /M /N harbour.exe ".\Func30.PRG" /n /q /o".\Func30.c" /M /N harbour.exe ".\Func40.PRG" /n /q /o".\Func40.c" /M /N
  11. É isso que você não está entendendo Kapiaba. O número de funções importa sim. Pegue um editor de texto e crie 60 mil funções, exatamente como estou falando, e faça o teste. Eu deixei 10 mil funções em cada PRG, e a demora continua a mesma. A demora vai ser a mesma se eu tiver 500 PRG's com 120 funções cada. O seu projeto é muito pequeno, por isso sobe na hora. Nosso projeto é modularizado como vc fala, isso que mandei é só um teste, por isso joguei tudo no mesmo fonte. Compila exatamente o fonte em anexo e me diga quanto tempo demora...... qualquer coisa, pegue de 5 em 5 mil funções e joga em novos PRG's e me diga se melhorará a velocidade. Link do fonte: https://drive.google.com/open?id=1zYEplqHHPSWvVOgSoG_mkO3-1PsLfWLZ
  12. Mas Kapiaba, olhando ali atrás não parece q tem 60 mil funções no seu PRG, apenas 7 além da MAIN. Por que o hora incial aí está zerado?
  13. Não Kapiaba. Nós trabalhamos juntos. Ele criou o tópico pq eu tinha perdido minha conta, mas acabei encontrando meu dados de login, rsrs
  14. Oi Giovany, obrigado por responder. Estou compilando via xdev V0.70. Olha o projeto que criei, com um único PRG. Só existe UMA variável local no projeto e um parâmetro, o mais simples possível. Deixando somente a função MAIN no PRG, a execução é instantânea. Deixando 10 mil funções no PRG, a execução é praticamente instantânea ainda. Mas deixando 60 mil funções no PRG, a execução demora 32 segundos. Segue o projeto completo: Segue abaixo o fonte completo do programa #include 'fivewin.ch' * * * * FUNCTION Main(cTime01) LOCAL cTime02:=TIME() DEFAULT cTime01:='' cTime01:=SUBSTR(cTime01,1,AT(',',cTime01)-1) cTime01:=STRZERO(VAL(SUBSTR(cTime01,1,AT(':',cTime01)-1)),2) + SUBSTR(cTime01,AT(':',cTime01)) IF EMPTY(cTime01) RETURN ENDIF ?'Hora inicial: '+cTime01,'Hora que EXE realmente carregou: '+cTime02,'Demora para abrir EXE: '+ELAPTIME(cTime01,cTime02) RETURN FUNCTION TESTFUNC_00001() ; MSGINFO('','') ; RETURN FUNCTION TESTFUNC_00002() ; MSGINFO('','') ; RETURN FUNCTION TESTFUNC_00003() ; MSGINFO('','') ; RETURN FUNCTION TESTFUNC_00004() ; MSGINFO('','') ; RETURN FUNCTION TESTFUNC_00005() ; MSGINFO('','') ; RETURN . . . FUNCTION TESTFUNC_60000() ; MSGINFO('','') ; RETURN Segue como estou fazendo a chamada do programa Segue o retorno do programa Caso alguém possa replicar esse teste e postar os resultados, agradeço. Fiz o mesmo em C#, e não tive o problema descrito, somente em Fivewin.
  15. Olá Beto. Bacana, não conhecia. Pesquisando rapidamente, vi esse exemplo abaixo para exibir só as colunas desejadas direto no grid: // Application built with Spanish codepage cSql := "SELECT First, Age, DATE_FORMAT( HIREDATE, '%d %M %Y %W' ) AS HireDate FROM customer" oRs := oCn:RowSet( cSql, .t. ) XBROWSER oRs AUTOFIT oCn:SetLocale( "zh_TW" ) // Chinese cSql := "SELECT First, Age, DATE_FORMAT( HIREDATE, '%d %M %Y %W' ) AS HireDate FROM customer" oRs := oCn:RowSet( cSql, .t. ) XBROWSER oRs AUTOFIT Para retornar um array, ao invés do método RowSet, o pessoal usa o método: QueryResult( cSQL ) Este exemplo peguei deste link http://forums.fivetechsupport.com/viewtopic.php?f=3&t=32657 Hoje eu uso sqllib, mas só com sqlArray e sqlExecute, que me permitem usar sql 99% puro, sem interferências da lib/funções, etc, retornando sempre arrays. Acredito que com essa classe dá pra trabalhar da mesma forma.
  16. O que é conexão nativa do fivewin? Posta um exemplo da sua conexão e como busca uma informação no banco que talvez possa te ajudar. Qual browse vc utiliza? wbrowse, xbrowse, tcbrowse?
  17. Pessoal, o problema é o tamanho do executável/quantidade de funções, independente do Windows ser o 10, 8, 7, ser 32 ou 64bits, tudo isso já foi testado em dezenas de máquinas diferentes, em empresas, cidades e estados diferentes. Não é anti vírus, não é vírus, não é falta de RAM, não é processador, etc. Hoje o executável final está ficando com 33mb, mais de 900 programas fontes (PRG's), o número de funções então, é altíssimo, e esse número elevado de funções, gera lentidão para que o executável execute sua primeira instrução. Um teste que deixa isso claro, que acabei de fazer, é criar um projeto novo, só com um PRG com um Hello World. Criei nele, 60 mil funções, que não são usadas para nada, e isso já faz esse simples projeto demorar cerca de 16 segundos para exibir a mensagem de "Hello World". Caso alguém puder fazer um teste como o relatado acima, agradeço. Olha o exemplo do fonte que estou citando: #include "Fivewin.ch" FUNCTION Inicio() ?'Hello World' RETURN FUNCTION ECOTESTE000100001() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000200002() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000300003() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000400004() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000500005() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000600006() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000700007() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000800008() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE000900009() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001000010() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001100011() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001200012() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001300013() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001400014() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001500015() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001600016() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001700017() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001800018() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE001900019() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002000020() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002100021() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002200022() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002300023() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002400024() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002500025() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002600026() ; MSGINFO('','') ; RETURN FUNCTION ECOTESTE002700027() ; MSGINFO('','') ; RETURN . . . . . continua até ter 60 mil funções
  18. Creio que só assim, dê certo também, veja: SELECT CODIGO,SALDO,SQL_ROWID FROM KARDEX INNER JOIN (SELECT MAX(SQL_ROWID) AS RECNO FROM KARDEX WHERE SETOR = @SETOR AND CODIGO IN ('000125','000126','000128') GROUP BY CODIGO ) AS S1 ON RECNO = SQL_ROWID;
  19. Luiz, tem certeza? Nesse exemplo do Evandro é pra funcionar sim, pois ele está agrupando por código e fazendo MAX no SQL_ROWID, ou seja, vai pegar o maior row_id daquele código, consequentemente, o último registro, já que o sql_rowid é uma PK auto incremento. Evandro, você pode criar o índice direto no seu CREATE TEMPORARY TABLE: CREATE TEMPORARY table temp01 (INDEX IDX_01(CODIGO)) SELECT codigo AS COD, MAX(sql_rowid) AS RECNO FROM kardex WHERE setor ='02' AND codigo IN ('029163','000493','011813') GROUP BY codigo; SELECT codigo,saldo,sql_rowid FROM kardex INNER JOIN temp01 ON sql_rowid = RECNO; Att Erciley Coimbra
  20. Eu acho que da forma que o emotta postou funciona. Em todo caso, talvez dê pra vc aproveitar algo disso: * * * Erciley 25/05/2018 * FUNCTION TESTE() LOCAL cTime:=TIME() LOCAL cElapTime LOCAL nMinutosParaComparar:=10 LOCAL nSegundos *------------------------------------------------------------------------ /* processamento */ WaitSeconds(10) *------------------------------------------------------------------------ cElapTime:=ELAPTIME(cTime,TIME()) IF PassouDoTempo(cElapTime,nMinutosParaComparar) ?'Processamento passou dos '+STR(nMinutosParaComparar,,,.T.)+' minutos' ELSE nSegundos:=PassouDoTempo(cElapTime,nMinutosParaComparar,2) ?'Processamento NÃO passou dos '+STR(nMinutosParaComparar,,,.T.)+' minutos, passou somente '+STR(nSegundos,,,.T.)+' segundos' ENDIF RETURN * * * Erciley 25/05/2018 * FUNCTION PassouDoTempo(cTime,nParametroEmMinutos,nRetorno) LOCAL cSQL LOCAL aSQL LOCAL nSegundos LOCAL nParametroEmSegundos:=nParametroEmMinutos * 60 DEFAULT nRetorno:=1 cSQL:='SELECT TIME_TO_SEC('+TOSQL(cTime)+')' aSQL:=sqlArray(cSQL) nSegundos:=VAL(aSQL[01,01]) IF nRetorno == 1 RETURN nSegundos > nParametroEmSegundos ELSEIF nRetorno == 2 RETURN nSegundos ENDIF RETURN Att Erciley Coimbra
  21. Quem quiser mais detalhes, veja o survey do próprio stackoverflow. Aqui mostra a região de cada um que respondeu, o sexo, idade, etc etc etc, com gráficos e muito mais https://insights.stackoverflow.com/survey/2018/
  22. Ops, entendi errado. Nesse caso, vc já deu a dica então. Abraços Att Erciley Coimbra
  23. @Marsan, utilize o TXmlDocument Um exemplo básico para começar: FUNCTION ...... nHandle:=Fopen(arquivo_xml) oXml:=TXmlDocument():new(nHandle,1) cTag:='nNF' cParent:='ide' cData:='' oNode:=oXml:FindFirst(cTag) FOR AA:=1 TO 2 IF oNode:oParent:cName == cParent cData:=oNode:cData ELSE oNode:=oXml:FindNext(cTag) ENDIF NEXT IF EMPTY(cData) ?'Tag informada não encontrada' ELSE ?'Valor encontrado para a tag '+cTag,cData ENDIF RETURN Faça uns testes, veja os retornos, etc, aí é só declarar um vetor com as tags e parents e obter todo o conteúdo necessário e tratar. edit: após o trecho cData:=oNode:cData, deveria ter um EXIT. Att Erciley Coimbra
  24. Só fazer um select no db.table information_schema.tables where db = database() .... faz um select com limit 10 que vc saberá exatamente os campos que deve usar no select e no where
×
×
  • Create New...