Jump to content
Fivewin Brasil

evertonlb

Membros
  • Posts

    733
  • Joined

  • Last visited

  • Days Won

    18

Posts posted by evertonlb

  1. Boa tarde.

    Fiz uma pequena funçãozinha para fazer um backup dos DBF. Logo que executa ela dá um Error DOS 5, Acesso não permitido.

    Tirei todos os parâmetros de "somente leitura" tanto na pasta de destino quanto no arquivo em questão, mas continua dando o erro.

    Será que alguém tem alguma sugestão para solucionar este problema?

    cFileBackupKI := directory( _xPathBanc + "\*.MEM")
    *
    DBCloseAll()
    *
    if !empty( _xPathBackup )
    	*
    	for x := 1 to len(cFileBackupKI)
    	   cFileName  := cFileBackupKI[x, 1]      //  _xPathBanc + "\" + 
          copy file ( alltrim( cFileName ) ) to ( alltrim( _xPathBackup ) )
    	next
    endif

     

  2.  

    Adiona na primeira Coluna do xBrowse, no meu caso do Lado Esquerdo do Nome do Cliente

        oBrw:aCols[1]:AddResource("Bloqueado" )                  // Adiciona Imagem Resource para Bloqueado
        oBrw:aCols[1]:AddResource("DesBloqueado" )           // Adiciona Imagem Resource para Não Bloqueado
        oBrw:aCols[1]:bBmpData          := { || If( D_COND1 = 1, 1, 2 ) }     // Verifica a Condição: se 1) Imagem 1 (Bloqueado),  se 2) Imagem 2 (Não Bloqueado)
        oBrw:aCols[1]:nDataBmpAlign  := 0


     

     

     

    Coloquei da seguinte maneira.. não deu erro, mas tambem não funcionou

            aCol_oXBrw111[4] := oXBrw111:aCols[4]
               oXBrw111:aCols[4]:AddResource("Imagens\16\accept.bmp" )                                               // Adiciona Imagem Resource para Bloqueado
               oXBrw111:aCols[4]:AddResource("Imagens\16\cancelamento.bmp" )                                         // Adiciona Imagem Resource para Não Bloqueado
               oXBrw111:aCols[4]:bBmpData       := { || If( !empty( PES_REGI ), 1, 2 ) }                             // Verifica a Condição: se 1) Imagem 1 (Bloqueado),  se 2) Imagem 2 (Não Bloqueado)
               oXBrw111:aCols[4]:nDataBmpAlign  := 0                                                                 //     .and. empty( PES_BAIX )
               aCol_oXBrw111[4]:nWidth          := 645
               aCol_oXBrw111[4]:cHeader         := "Nome do Cliente"
               aCol_oXBrw111[4]:lHIDE           := .F.
               aCol_oXBrw111[4]:oHeaderFont     := oFONT5PS
               aCol_oXBrw111[4]:oDataFont       := oFONT6PS
               aCol_oXBrw111[4]:oFooterFont     := oF_Form1_1
               aCol_oXBrw111[4]:bClrHeader      := {|| { 0, 16773863 } }
               aCol_oXBrw111[4]:bClrFooter      := {|| { 0, 15790320 } }
               aCol_oXBrw111[4]:bClrStd         := {|| { 0, 16777215 } }
               aCol_oXBrw111[4]:bClrSel         := {|| { 16777215, 5525059 } }                                                            
               aCol_oXBrw111[4]:bClrSelFocus    := {|| { 16777215, 16750899 } }                   
    

    Onde será que tá o erro?

     

    Att.

    Everton

  3. Amigos.. tenho um xBrowse que mostra os clientes cadastrados na loja. Como acontece em todas as lojas tem clientes que estão com registro no SPC. Claro que teno dentro do cadastro do cliente um campo para saber se ele esta ou não registrado. O que eu gostaria de fazer era colocar um BMP (uma bolinha) antes do nome para clientes que tem registro e um para quem não tem. Creio que seja possível. como poderia fazer?

     

    Att.

    Everton

  4. Ola Edutraini.

    Cara, eu tenho um código que imprime na argox... mas o lance de criar um "TXT" e mandar para a impressora é a mesma coisa ( eu acho! rsrsr )

    segue o código

    Local cLetra, nHand, cLote  
    Local cArqImp   := "Argox.TXT"
    Local cPrinter  := PrinterPortToName( "Argox214" )
    
    local _dDtaImpr := right( strzero( year( date() ), 4, 0 ), 2 ) + strzero( month( date() ), 2, 0 )
    *
    nHand:=fCreate(cArqImp)
    *
    *  Controle de cabeçalho da impressora
    *
    fWrite(nHand, "L"    + Chr(13)+Chr(10) )
    fWrite(nHand, "m"    + Chr(13)+Chr(10) )
    fWrite(nHand, "e"    + Chr(13)+Chr(10) )
    fWrite(nHand, "K1701"+ Chr(13)+Chr(10) )
    fWrite(nHand, "PC"    + Chr(13)+Chr(10) )
    fWrite(nHand, "D11"   + Chr(13)+Chr(10) )
    fWrite(nHand, "H14"   + Chr(13)+Chr(10) )
    fWrite(nHand, "z"     + Chr(13)+Chr(10) )
    *
    * Montagem da Etiqueta 01
    *
    if !empty( Cod1 )
       fWrite(nHand,"141100007000040" + left( ALLTRIM( cEmpresa ), 18 ) + CHR(13) + CHR(10) )
       fWrite(nHand,"131100006500015" + STM1  + "      " + _dDtaImpr  + CHR(13) + CHR(10) )
       fWrite(nHand,"1O2313504700060" + Cod1  + CHR(13) + CHR(10) )
       fWrite(nHand,"121100004200020" + Des1  + CHR(13) + CHR(10) )
       fWrite(nHand,"1X1200003700010L460004"     + CHR(13) + CHR(10)  )
       fWrite(nHand,"121100003400050 PARA TROCAS, POR FAVOR"  + CHR(13) + CHR(10)  )
       fWrite(nHand,"121100003000050NAO REMOVA ESTA ETIQUETA."    + CHR(13) + CHR(10)  )
       fWrite(nHand,"1X1200002700010L460004"     + CHR(13)  + CHR(10) )
       fWrite(nHand,"1O2306001000060" + Cod1  + CHR(13)  + CHR(10) )
       fWrite(nHand,"141100000500110R$ "         + Avi1 + CHR(13) + CHR(10) )
       fWrite(nHand,"121100000100020" + Des1  + CHR(13)  + CHR(10) )
    endif
    * ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    *
    *                  SEGUNDA ETIQUETA
    *
    * ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
    if !empty( Cod2 )
       fWrite(nHand,"141100007000530" + left( ALLTRIM( cEmpresa ), 18 ) + CHR(13) + CHR(10) )
       fWrite(nHand,"131100006500530" + STM2  + "      " + _dDtaImpr  + CHR(13) + CHR(10) )
       fWrite(nHand,"1O2313504700570" + Cod2  + CHR(13) + CHR(10) )
       fWrite(nHand,"121100004200520" + Des2  + CHR(13) + CHR(10) )
       fWrite(nHand,"1X1200003700510L460003"     + CHR(13) + CHR(10) )
       fWrite(nHand,"121100003400550 PARA TROCAS, POR FAVOR"  + CHR(13) + CHR(10) )
       fWrite(nHand,"121100003000550NAO REMOVA ESTA ETIQUETA."    + CHR(13) + CHR(10) )
       fWrite(nHand,"1X1200002700510L460003"     + CHR(13)  + CHR(10) )
       fWrite(nHand,"1O2306001000570" + Cod2  + CHR(13)  + CHR(10) )
       fWrite(nHand,"141100000500600R$ "         + Avi2 + CHR(13) + CHR(10) )
       fWrite(nHand,"121100000100520" + Des2  + CHR(13)  + CHR(10) )
    endif
    *
    cPrintEt := "Argox214" 
    cMsg     := ""
    nResult  := PrintFileRaw( cPrintEt, cArqImp, "Etiquetas - Estoque" )

    Veja, nesse código eu já manda para a "Argox214" mas poderia usar

        PrinterSetup()
       cPrintEt   := PrnGetName() 

    Guardar esta variável num cadastro de estações e quando o cara manda a etiqueta já vai para a impressora pré definida..

     

    Att.

    Everton

  5. Olá pessoal. Estou com um pequeno probleminha num xBrowse. 

    Tenho um browse que lista as contas a receber, tenho uma coluna onde clicando com o botão direito do mouse, marca as contas a receber e se clicando novamente desmarca a conta. Gostaria de fazer esta marcação com a barra de espaço, se conseguir fica mas prático para o usuário, pois navega com as setas e marca com a barra de espaço. Coloquei a seguinte linha

                oXBrw5:bKeyDown            := { | nKey | IF( nKey = 27, MarcaParc( (_cNomArq)->TMP_VEND, (_cNomArq)->TMP_PARC, @nSomaNumParcelas, @nSomaValOriginal, @nSomaValJuros, Recno(), @nKey ), .F. ) } 

    O que esta acontecendo é que pressionando UMA ÚNICA vez a barra de espaço ( nKey == 32 ) está entrando duas vezes na função. Na primeira vez marca a parcela e na segunda, já que a parcela está marcada, ele desmarca.... Só consegui fazer funcionar usando o ESC ( conforme esta no código acima ), mas colocando qualquer outra tecla o xBrowse manda duas vezes para a função MarcaParc. Como posso fazer para que entre uma única vez na função?

    Espero ter sido claro!

     

    Att.

    Everton

  6. Cara.. vamos fazer isso funcionar sim...

    Veja, eu uso o MyMake para compilar. acho que muito, muito prático. o MyMake é uma ferramenta free do Vailton.

    http://www.vailton.com.br/index.php/downloads/viewcategory/4-ferramentas-de-desenvolvimento

    Infelizmente minha experiencia com o Build.bat, não passou do segundo dia!

    De qualquer maneira vou dar uma olhada no meu script do MyMake e ver se encontro alguma coisa relevante.

    Att.

    Everton

  7. João,

    Pelo que o Everton falou, é uma dialog contendo dados de apenas 1 registro, não precisa carregar todos os registros em um array pra jogar na dialog.

    De fato Kleyber.. Com DBF eu uso assim

    if onde == 1   //  aqui eu vejo qual botão foi pressionado
       Go Top
    elseif onde == 2		
       DBSkip(-1)
       if BOF()
          go bottom
       endif	
    elseif onde == 3
       DBSkip(1)
       if EOF()
          go Top
       endif	
    elseif onde == 4
       Go Bottom
    endif
    
    

    Carrego as variáveis e dou um refresh. Isso é o ideal. No cadastro de clientes, por exemplo, navegar pelos registros não é usado, mesmo porque eu tenho um F2 que abre um browse com todos os clientes, ai o usuário acha quem ele quiser. Mas no cadastro de produtos a história é outra.. muitas vezes

    a pessoa que cadastra os itens, altera preços e faz outras correções nos produtos, precisa ver os últimos itens que foram cadastrados.. ai opta pelo menu de navegação que tenho

    no cadastro... Aqui sim preciso disponibilizar esta navegação

    Att.

    Everton

  8. Everton

    Boa tarde

    Na SQLLIB se você usar SQLArray vai ter um vetor com os dados da tabela. Neste caso irá navegar pelo vetor

    aVetor:=SqlArray("Select * from tabela")

    n:=1

    aVetor[n] //dbgotop()

    n++ //DbSkip(1)

    n-- ////DbSkip(-1)

    aVetor[Len(avetor)] //dbgobotom()

    Você também pode abrir como dbf:

    USE SQL ("Select * From Tabela") Alias Tabbela New

    Neste caso serão os mesmos comandos dbase

    Att

    João Bosco

    Bom dia João... Então o vetor vai conter todo o conteúdo da tabela, não importando quantos registros eu tenha???

    Att.

    Everton

  9. Olha.. vou contar uma coisa.

    Eu estava com problema na hora de compilar. Uso o MyMake para compilar e demorava em média uns 4 minutos, mas se eu acessasse a CEF começava a demorar uns 8 minutos, quando não travava a compilação e eu tinha que resetar o note. Voltava então ao normal, coisa de 4 ou 5 minutos para compilar.

    Há alguns dias atras resolvi por fim a esta coisa e comecei a desinstalar tudo que tinha da Gas do meu note.

    Resultado..

    Antes eu compilava em 4 ou 5 minutos e achava que estava bom.. hoje, depois de tudo desinstalado, o tempo de compilar caiu para 35 SEGUNDOS!!!!!!

    Um programinha que fiz para testar os comandos SQL leva uns 4 segundos para compilar!!!

    Att.

    Everton

  10. Boa tarde amigo..

    Continuando com minhas duvidas no SQL, gostaria de saber como faço para passar de um registro para outro.

    Explico melhor.

    Tenho nas minhas janelas de cadastro botões que levam o usuário ao primeiro registro da tabela, para o próximo, para o anterior e para o último registro.

    Como eu uso comandos DBF o Gotop, dbSkip(+1), DbSkip(-1), Gobottom resolvem meu problema.

    Usando o SqlArray(), da SqlLib, peguei os dados da tabela... sei que usando o "where codigocliente = '12345678'" eu seleciono só um registro,

    mas como faço pra navegar pelos registros da tabela??

    Att.

    Everton

  11. Everton

    Boa tarde

    Veja se você está executando commit

    TRY
    START TRANSACTION
    SQL EXECUTE cSql
    SQL EXECUTE "COMMIT"
    END TRANSACTION
    CATCH oErro
    MsgAlert( "Erro : " + oErr:Operation + " -> " + oErr:Description )
    lRetSql := .F.
    END
    Att
    João Bosco

    Faltava o commit e o refresh João..

    Obrigado!

  12. Everton, bom dia, vc não tem que dar um refresh na Table/Bd? Sei que na SQLRDD vc tem o SR_DBREFRESH limpa as informações e que atualiza as informações, mas no seu caso, vc está usando a TDOLPHIN/SQLLIB, então não sei se existe algo semelhante.

    []s,

    Ola brother.. na SqlLib é

    SQLRefresh()

    Acabei de decobrir!

    Faltava duas coisas o Commit e o Refresh.

    Obrigado

  13. Bom dia pessoal...

    Obrigado a todos pelas dicas. Ta funcionando.

    To com uma dificuldade na atualização da tabela que só aparece o registro ( no WorkBench ) após fechar o programa ( que só tem um cadastro simples, por hora )

    Mas vou ver o manual da SLQLIB.

    Att.

    Everton

  14. deu certo não amigo,

    Se não der certo posta a estrutura da sua tabela

    lembrando que as vezes pode ser conversão de dados

    Tipo codigocliente é INT(6) e esta recebendo da variavel cCodigoCliente como sendo char(06)

    codigocliente    varchar(10) PK
    nomecliente      varchar(45)
    cidade           varchar(45)
    loja             varchar(45)
    telefonefixo     varchar(45)
    telefonecelular  varchar(45)
    Anotacoes        longtext   
    
    

    Marcio. coloquei tudo como VarChar, mas a variável do codigo é numérica ai uso o Strzero().

    Deveria dar certo não e mesmo?

    Att.

    Everton

×
×
  • Create New...