Yury
Membros-
Posts
873 -
Joined
-
Last visited
-
Days Won
1
Everything posted by Yury
-
//-------------------------------------------------------------------- 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
-
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
-
Sérgio vc poderia utilizar a "bGotFocus" e "bLostFocus" do xBrowse, creio q daria certo, algo assim: obj:bGotFocus := {|| oBtn:Disable() } obj:bLostFocus := {|| oBtn:Enable() } abraço
-
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
-
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
-
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
-
Olá private lFocoLbx1:=.F., lFocoLbx2:=.F. oLbx1:bGotFocus := {|| lFocoLbx1:=.T., lFocoLbx2:=.F. } ... oLbx2:bGotFocus := {|| lFocoLbx1:=.F., lFocoLbx2:=.T. } Abraço
-
boa noite Vailtom excelente notícia, muito obrigado abraço
-
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
-
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
-
cNomeTabela := 'TAB_CLI' cNomeIndice := 'TAB_CLI1' cAliasTabela:= 'CLI' cExpress := 'cCidCliente' DBUSEAREA(.T.,'MySQL',cNomeTabela,cAliasTabela,.T.) DBSELECTAREA(cAliasTabela) DBCREATEINDEX(cNomeIndice,cExpress)
-
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
-
Olá Samir então de que forma o seu EXE é contaminado pelo vírus ? Abraço
-
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
-
Olá http://forums.fivetechsupport.com/viewtopic.php?f=6&t=24131&p=129987&hilit=JSON#p129987 http://forums.fivetechsupport.com/viewtopic.php?f=6&t=25879&p=141543&hilit=JSON#p141543 Abraço
-
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
-
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
-
Olá João, obrigado pela resposta vi que vc com a versão FW 13.06 qual o xHarbour e bcc vc está usando pra compilar ? abraço
-
Olá pessoal gostaria de saber até qual versão do FW é possível compilar com o xHarbour build 1.1.0 (SimpLex) & BCC 5.5.1 ? é xHarbour não comercial abraço e obrigado Yury
-
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
-
Olá oLbx:nClrText := {|| IF(PR->PRESTQ < PR->PRESTQMIN, CLR_HRED,CLR_BLACK) } // cor da linha oLbx:nClrPane := {|| IF(PR->PRESTQ < PR->PRESTQMIN, CLR_LRED,CLR_WHITE) } // cor do fundo Abraço
-
É exatamente em pontos em que carrega bastante informação em arrays, utilizando sqlarray da SQLLIB, por exemplo bom, por enquanto eu vou contornando com o hbgcall de qualquer forma obrigado pela atenção Abraço
-
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
-
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
-
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