Jump to content
Fivewin Brasil

Yury

Membros
  • Posts

    873
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Yury

  1. //--------------------------------------------------------------------
    
    PROCEDURE ErrorSys()
    
    ErrorBlock( { |erro| F_ERRO(erro) } )
    
    RETURN
    
    //--------------------------------------------------------------------
    
    FUNCTION F_ERRO(erro)
    
    // erros 'Server has gone away' e 'Lost connection to MySQL server during query'
    // retorna .F. para o gerenciados de erros para que o servidor faça o auto-reconnect
    
    IF erro:genCode == 1000
       RETURN .F.
    EndIf
    
    ...
    ...
    ...
    
    RETURN
    
    //--------------------------------------------------------------------
    

    Olá

    Uma forma prática de vc tratar isso é na sua rotina de gerenciamento de erros colocar um RETURN quando ocorrer os erros de perda de conexão para que não gere erro para o usuário e nem aborte o sistema ; em vez disso ao ser feita uma nova query a conexão é restabelecida ; a menos que o serviço tenha caído ou o servidor não esteja mais disponível, mas daí não teria muito oq fazer mesmo

    As causas do lost conection ou server has gone away são muito variadas

    Depois que eu passei a tratar dessa forma melhorou 100%

    Uso SQLLIB, mas para SQLRDD não deve fugir muito deste conceito, basta vc verificar que código de erro que a SQLRDD retorna quando ocorre os erros no MYSQL (no caso da SQLLIB é gencode = 1000)

    Abraço

  2. Olá

    Utilize o parâmetro da TPrinter para MODAL

    PRINTER oPrn FROM USER PREVIEW NAME "Impressao" MODAL

    ou utilize a PrintBegin, acho bem mais fácil

    oPrinter:=PrintBegin("Impressão", .T., .T., NIL, .T.)

    Abraço

    PS: o post q vc fez ficou muito ruim de ler pois alguns caracteres especiais não ficaram corretos, antes de postar outra coisa veja se consegue corrigir isso

  3. Olá

    dbBAS1 = é o banco/tabela de origem, onde os registros de clientes são cadastrados
    
    dbBAS2 = é o banco/tabela cópia, onde os registros de clientes serão copiados do banco de origem quando executar o acima
    
    cDelete:="DELETE FROM dbBAS2.tbClientes" 
    sqlExecute(cDelete)
    // deleta todos os clientes da base cópia
    
    cInsert:='INSERT INTO dbBAS2.tbClientes SELECT * FROM dbBAS1.tbClientes'
    sqlExecute(cInsert)
    // copia todos os clientes da base de origem para a base cópia
    
    // é necessário que as estruturas estejam idênticas
    
    

    dbBAS1 = é o banco/tabela de origem, onde os registros de clientes são cadastrados

    dbBAS2
    = é o banco/tabela cópia, onde os registros de clientes serão copiados do banco de origem quando executar o acima

    cDelete
    :="DELETE FROM dbBAS2.tbClientes"
    sqlExecute(cDelete)
    // deleta todos os clientes da base cópia

    cInsert:='INSERT INTO dbBAS2.tbClientes SELECT * FROM dbBAS1.tbClientes'
    sqlExecute(cInsert)
    // copia todos os clientes da base de origem para a base cópia

    // é necessário que as estruturas estejam idênticas

    Abraço

  4. Olá

    Vc pode criar um clipboard (área de transferência)

    ...

    DEFINE CLIPBOARD oClip OF oTela
    oClip:clear()
    oClip:setText( cValor )

    ...

    o conteúdo da variável cValor estará disponível na área de transferência para colar onde desejar

    se o objeto onde vc quiser colar for manipulável vc pode usar oClip:GetText() para retornar o valor que está no clipboard e pode atribuir direto à propriedade/método

    Abraço

  5. Olá

    vc pode usar o having como disse o Evandro ou fazer sub select como disse o Eric

    para sub select veja o exemplo abaixo:

    SELECT * FROM (
    SELECT CLNOME AS NOME_CLIENTE,CLCDCL AS COD_CLIENTE
    FROM ERCL01MS
    ORDER BY CLNOME) AS T1
    WHERE T1.NOME_CLIENTE LIKE '%IND%'

    Abraço

  6. boa tarde Valdir

    aqui nós utilizamos SQLLIB, funciona bem, mas como vc bem lembrou foi descontinuada, então não recomendo, pois vai impossibilitar vc de atualizar a versão do xHarbour e consequentemente do FW (estou utilizando atualmente FW 8.01 e xHb 1.1.0 )

    a SQLRDD utiliza o mesmo conceito de simular um RDD da SQLLIB (além de possibilitar o uso de MSSQL e Oracle, a SQLLIB somente pode utilizar MySql e Postsgree)

    esse conceito de simular o RDD ajuda muito quem não pode converter tudo para SQL , pois vc pode continuar com os programas rodando com DBSEEK, DBUSEAREA, DBSKIP, etc...

    TDolphin e ADO (até onde eu conheço) não permitem que vc faça isso, tem que ser tudo por meio de querys , então para utilizar vc teria que converter todos os programas ; a vantagem é que é free, mas também não há suporte

    portanto, se eu fosse iniciar nesse momento um projeto para utilizar BD com FW e xHB eu escolheria a SQLRDD

    abraço

  7. Olá

    Imagino que esteja se referindo a CORRUPÇÃO DOS ÍNDICES NTX DA TABELA, correto ?

    se sim, poste aqui o erro que é apresentado, por exemplo:

    Descricao do Erro: Corruption detected

    Codigo de Geracao de Erro: 32

    Arquivo com Erro: S:\cep\cli\msc901ms.dbf

    Codigo de Erro do Subsistema: 1012

    Erro do Subsistema: DBFCDX

    abraço

  8. Olá

    no caso de usar comandos/FUNÇÕES Clipper/xHB para criar o índice vc deve montar o índice sem utilizar funções como strzero, dtos, etc... ou seja deve ser somente campo + campo +campo, exemplo: nCodCliente + cNomeCliente

    outra coisa: lembre-se que vc somente consegue criar índices para TABELAS existentes, nesse caso do USE SQL vc não está criando uma tabela, somente uma instrução ; vc poderia facilmente colocar um ORDER BY na sua instrução para resolver a questão, exemplo:

    USE SQL "SELECT nCodCliente,cNomeCliente,cCidCliente,cUFCliente FROM TAB_CLI ORDER BY nCodCliente,cNomeCliente" ALIAS "CLI" NEW VIA "MySQL"

    Abraço

  9. Pode verificar a integridade a partir do MD5, mas os problemas que já tive nunca foram por causa do vírus se juntando ao executável...

    Olá Samir

    então de que forma o seu EXE é contaminado pelo vírus ?

    Abraço

  10. Olá

    a forma mais básica de contágio de vírus ou código malicioso nos EXEs é o vírus adicionar o código dele junto ao código do EXE e regravar o arquivo, alterando o tamanho, data, hora, etc... do EXE

    sendo assim você pode alterar as permissões de gravação do arquivo EXE, desta forma o vírus não conseguirá regravar o arquivo e ele não ficará contaminado

    Abraço

  11. Olá, bom dia

    você tem que diminuir 1 do contador do FOR quando redimensiona o array para um tamanho menor

    e pode utilizar o Adel conforme a Ana falou, não precisa fazer aSize

    for i=1 to len(aPlano7)
    if aPlano7[i,9]<>0
    if aPlano7[i,7]<>aPlano7[i,9]
    if aPlano7[i,1]='010000014'
    endif
    DelMatriz(aPlano7,i)
    i:=i-1 // aqui diminui um do contador
    endif
    endif
    next

    Abraço

  12. Ok, valeu João

    estou "encalacrado" com a questão da SQLLIB, não sei até que ponto posso atualizar o FW, pois a partir de uma determinada versão para frente (por causa do xHarbour) a SQLLIB não compila mais

    tem um outro post do Marcelo Ferro sobre isso, onde o Vailtom até respondeu, mas nem ele soube dizer ao certo até qual versão é compatível

    para os que utilizam SQLLIB: se puderem postar qual é a configuração FW e xHB que estão utilizando seria de grande ajuda para esclarecer isso

    Abraço e obrigado

  13. Olá

    esse erro as vezes ocorre em razão de ter um refresh de tela (um msginfo, por exemplo) entre o momento que vc zera a tabela relacionada ao browse e o momento em que vc carrega um novo conteúdo, populando novamente a tabela

    uma dica para que não ocorra é nunca deixar a tabela vazia, veja este exemplo:

    aCols:= {"","< sem registros >",0,0,0} // "zere" a tabela assim

    ADDD( aCols , {"001" , "AAAAAAAAAAA" , 10 , 1 , 10 } ) // recarregue os dados

    ADDD( aCols , {"002" , "BBBBBBBBBBB" , 10 , 2 , 20 } )

    ADDD( aCols , {"003" , "CCCCCCCCCCC" , 10 , 3 , 30 } )

    for N:=1 TO LEN(aCols) // remova o item em branco

    IF EMPTY(aCols[N,1])

    ADEL(aCols,N,.T.)

    N--

    ENDIF

    NEXT

    oBrw:SetArray( aCols ) // atualizar a tabela do obejto

    oBrw:GoTop()
    oBrw:lHitBottom:=.F.
    oBrw:Refresh()

    Abraço

  14. Olá Eduardo, boa tarde

    primeiramente obrigado por compartilhar a informação

    utilizo xHabour NÃO COMERCIAL, mas também tenho problemas eventuais com o xrealloc , que resolvo com o hbgcall

    sobre a solução que vc apresentou, verifiquei a lib que vc citou (optg) não está sendo compilada no meu projeto (utilizo xDev para compilar)

    vc apurou mais alguma informação sobre isso ?

    Abraço e obrigado

  15. Olá

     

    use RUN

     

    // The example executes the DIR command, directs its output into
    // a file and displays the result with Notepad.exe
    
       PROCEDURE Main
          LOCAL cCommand := "Notepad.exe files.lst"
    
          CLS
    
          ? "DIR command"
          RUN dir > files.lst
    
          ? "Executing Notepad.exe"
          RUN (cCommand)
    
          ? "Done"
       RETURN
    
    

    Abraço


     

  16. Olá

     

    me parece que os erros acima listados ocorrem pq está utilizando uma área diferente, por causa de "Select(xDbMov)" , pois vc está usando sem o ponteiro (  -> )

     

    coloque na sua rotina que documenta os erros para salvar/exibir qual o ALIAS atual que está em uso e a estrutura do arquivo associado a este ALIAS (dbstruct)

     

    isso vai auxiliar vc a identificar oq está ocorrendo

     

    Abraço

×
×
  • Create New...