Dicas de Programação Clipper

DicasEste é o nosso livro de dicas para os programadores.

A diferença aqui neste novo site é que o usuário registrado poderá adicionar suas dicas também ou fazer comentários e ver tudo publicado automaticamente, pois para o usuário registrado aparecerá o link "Nova subpágina" e "Comentar" no rodapé desta página onde o mesmo poderá começar a interagir.

Participe!

 

Assistência Remota

Assistência Remota

Assistência Remota

 

Você já ouviu falar em PC Anywhere? Assistência Remota do MSN? Estar em dois lugares ao mesmo tempo? É disso que estamos falando.

A assistência remota simula o teclado e monitor do computador do seu cliente no seu computador, ou seja, é como você estivesse na mesa do computador do seu cliente.

 

Este processo não é perigoso porque um computador precisa convidar o outro e este precisa aceitar. Além disso, a qualquer momento pode ser interrompido a conexão pelo anfitrião (aquele que convida) e normalmente é feito entre pessoas que se conhecem porque alguns dados particulares são necessários.

Tempo é dinheiro. Muitas vezes você não precisa ir até o seu cliente, basta uma assistência remota para resolver tudo.

 

Utilizando a assistência remota do Windows Live Messenger (MSN)

 

É muito simples! Basta orientar o seu cliente para clicar no botão "mostrar menu" (canto direito da barra de menu) Ações Solicitar assistência remota.

Veja a ilustração a seguir:

 

Utilizando o VNC4 

O VNC4 é um programa Freeware (ou melhor, tem uma versão Freeware), por isso estamos tratando dele aqui. Veja o site: http://www.realvnc.com/

A instalação do VNC4 tem menos de 700Kb!!!

Se você é o responsável técnico de uma empresa com vários computadores e todos ficam te chamando o tempo todo, o VNC4 vai ajudar você a não ter que ir para lá e para cá, subindo e descendo escadas...

Se você tem clientes em outra cidade, não precisa mais viajar para fazer seu diagnóstico.

O VNC4 (Assim como qualquer programa de Acesso Remoto, tipo PC Anywhere, LogMeIn, "Acesso Remoto" do Windows XP etc) emula o teclado e o monitor de um outro computador, é como se você estivesse operando no outro computador.

Vamos lá!

Quando você instala o VNC4, ele cria um grupo de programas no "Menu Iniciar" de seu computador chamado "RealVNC" e dentro dele, há 3 outros grupos VNC Server 4 (Service-Mode), VNC Server 4 (User-Mode) e VNC Viewer 4.

Configurar o Anfitrião(Host) ou Servidor:

1. Dê dois cliques no ícone do VNC na bandeja do Windows (Tray -aqueles íconezinhos que ficam no canto direito da Barra de Tarefas, no canto inferior direito da tela), selecione a aba "Authentication", clique no botão SET PASSWORD. Ponha uma senha! Deixe marcado o "Prompt local user to accept incoming connections".

2. Execute o "Run VNC Server", vá em:

Menu Iniciar > RealVNC > VNC Server 4 (User-Mode) > Run VNC Server

3. Passe o mouse em cima do ícone do VNC na Barra de Tarefas e anote o endereço IP da sua máquina. Você também pode executar o comando "ipconfig" na janela do MS-DOS que vai te dar o nº do IP do seu computador.

Resumo: Rodar o servidor em User-Mode, definir senha e anotar o IP.

Configurar o Convidado (Guest):

1. Execute o "Run VNC Viewer"

Menu Iniciar > RealVNC > VNC Viewer 4 > Run VNC Viewer

2. Abrirá uma janela. Coloque o IP do computador remoto (Anfitrião).

3. Abrirá uma janela pedindo a senha. Coloque a senha do computador remoto (Anfitrião). Definida no item 1 da configuração do Anfitrião.

Anfitrião, Host, Servidor, em nosso caso, é tudo a mesma coisa.

Convidado e Guest é a mesma coisa. É o computador que vai acessar o computador da outra pessoa, enquanto que, anfitrião é o computador que vai receber a "visita" (acesso remoto) do convidado.

É lógico que o Anfitrião precisa passar as informações sobre a senha e o IP dele para o Convidado! Sem estas informações não é possível o acesso remoto. Também não é possível acessar o computador remoto sem que o Anfitrião permita que o Convidado entre! O Anfitrião recebe uma mensagem quando alguém tenta o acessar e ele permite ou não.

Boa sorte!!!

Blinker

Blinker

Salve tempo, memória e espaço em disco.

 

 __   __
(«») (__) BLINKER DOS Extender and Windows Linker
    ⌂
   ___         Blink and you'll miss it !!

Site do fabricante: http://www.blinkinc.com/blinker.htm

Blinker substitui o papel do RTLINK do Clipper podendo transformar o programa em um executável que pode rodar acima da memória base (primeiros 640Kb RAM) com a opção dual mode (recomendada) ou extended mode. É uma solução para problemas de memória baixa do computador quando seu programa está muito grande.

Programas linkados com o Blinker requerem que no mínimo o HIMEM.SYS esteja instalado no computador para que rodem em modo protegido. Se não há nenhum gerenciador de memória (HIMEM; QEMM; 386MAX; NetRoom etc.) então dual mode reverte para real mode e extended mode terminam com erro.

 

  • Crie executáveis que rodem em modo protegido, acesso direto a 16Mb de memória física e 64Mb de memória virtual;

  • Livre de Royalties;

  • Comprime os arquivos em até 70% (o arquivo continua sendo executável, não precisa descompactá-lo para rodá-lo!!!);

  • Inclui número de série e versões de demonstração completamente funcionais, se você quiser;

  • Use as funções "SWAP" para chamar programas externos extensos como um sistema de relatório grafico em CLBC ou um processador de textos como o EDIT do DOS (Seu sistema fica em stand-by ocupando menos de 10Kb);

  • Linkedição em menos de 1 segundo (encontrei problemas com esta opção na versão 4.x).

Na minha opinião, este é o mais completo e profissional linkeditor do mercado.

 

Sugestão de uso:

 

BLINKER FILE <menu> <@settings>

 

Onde menu é um arquivo LNK que você usaria com o RTLINK, no caso menu.lnk.

E settings é um arquivo LNK que contém parâmetros de configuração do Blinker, no caso settings.lnk.

 

Você pode criar vários arquivos com parâmetros de configuração do Blinker para cada necessidade, tipo:

 

Compilação final para o cliente (final.lnk):

# BLINKER SCRIPT FILE
# Por ANDERSON
#######################
BLINKER EXECUTABLE DUAL
BLINKER EXECUTABLE COMPRESS 1
BLINKER EXECUTABLE NODELETE
BLINKER EXECUTABLE CLIPPER //F:250 //DYNF:8 //SWAPK:65535 //SWAPPATH:"C:\TEMP
BLINKER MESSAGE WINK
BLINKER INCREMENTAL OFF
NOBELL
STACK 7168
SEARCH BLXCLP52
LIB CLIPPER
/NOE;
MAP A,S

 

Chamaria como: BLINKER FILE menu.lnk @final.lnk

 

Compilação em fase de produção com DEBUG (teste.lnk):

# BLINKER SCRIPT FILE
# Por ANDERSON
#######################
BLINKER EXECUTABLE DUAL
BLINKER INCREMENTAL OFF
BLINKER EXECUTABLE NODELETE
BLINKER EXECUTABLE CLIPPER //F:250 //DYNF:8 //SWAPK:65535 //SWAPPATH:"C:\TEMP"
NOBELL
STACK 7168
SEARCH BLXCLP52
FILE CLD.LIB
LIB CLIPPER
/NOE;
MAP A,S

 

Chamaria como: BLINKER FILE menu.lnk @teste.lnk

 

Veja que os exemplos acima são enxutos. Cuidado para não se empolgar com os diversos comandos de configuração que o Blinker tem, pois você acaba tendo problemas indesejáveis de GPF (Global Protection Fault) no executável que fica abortando a execução com este erro.

Use arquivos pequenos e objetivos como os exemplos listados cima.

 

Para criar uma versão final de demonstração para um potencial cliente (AAAA/MM/DD):

BLINKER FILE menu.lnk @final.lnk BLINKER DEMONSTRATION DATE 2010/05/01

 

Compila o sistema e o libera para execução até 01/05/2010.

Anexo: 

https://linguagemclipper.com.br/files/blinker_ng.zip
https://linguagemclipper.com.br/files/bli.zip

Chamando aplicativos do Windows

Como executar aplicativos Windows pelo Clipper

Como executar aplicativos Windows pelo Clipper

 

Abrir um arquivo de texto no NotePad do Windows...

cAPLICATIVO := "NotePad.exe"
cARQUIVO     := "arquivo.txt"
RUN ( "Start "+cAPLICATIVO  +" "+ cARQUIVO )

 

Abrir um arquivo de texto no NotePad do Windows, imprimí-lo e sair...

cAPLICATIVO := "NotePad.exe"
cARQUIVO     := "meu_arquivo.txt"
RUN ( "Start "+cAPLICATIVO  +" " + cARQUIVO + " /p")

 

 

Alguns aplicativos do Windows recebem o parâmetro "/p" que serve para abrir e imprimir, mas nem todos.

Você pode imaginar o que isto significa quanto às impressoras USB ou "Windows Only" ??? 

A impressão de arquivos com fonte, tamanho e estilo personalizados podem ser criados através da confecção de um arquivo no formato da extensão .RTF (Rich Text Format) e impressos no WordPad do Windows, ao invés do NotePad.

 

Clip

CLIP

CLIP - Compilador Clipper open-source russo

Neste documento iremos conhecer o CLIP, um compilador clipper para Linux. Além da total compatibilidade com o compilador CA-Clipper, este compilador oferece acesso a banco de dados cliente-servidor (Interbase, Oracle, MySQL e outros) e proporciona a elaboração de programa com interface gráfica usando a biblioteca GTK.

CLIP trata-se de um compilador CLIPPER para Linux desenvolvido pelos Russos. São tantas vantagens que este compilador nos proporciona, que irei mencionar apenas as principais:

  • Possui total compatibilidade com o compilador CA-Clipper (incluso a versão 5.3).
  • Desenvolvimento de sistemas com interface gráfica baseado na biblioteca GTK.
  • Bibliotecas para acesso a banco de dados cliente-servidor SQL (Firebird-Interbase, MySQL, Oracle e outros).
  • Funções Sockets para comunicação TCP/IP.
  • Suporte a manuseio de imagens e gráficos primitivos.


Planejamento do projeto:

  • Suporte para plataforma Windows.
  • Compatibilidade com FiveWin.
  • Compatibilidade com FoxPro.
Páginas do artigo

Obrigado Alessandro, pela dica.


Fonte: FARIA, Alessandro de Oliveira. Compilador Clipper open-source, compile sem problemas os sistemas .PRG no Linux! In: <http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2584>. Acessado em: 25/04/2010.

Como Agilizar o Tráfego da Rede no Clipper

Como Agilizar o Tráfego da Rede no Clipper

redeComo Agilizar o Tráfego da Rede no Clipper

1. Criar arquivos temporários na unidade de disco local (Dica: Coloque o aplicativo na estação cliente (Windows: local do objeto) executando no servidor (Windows: Iniciar em:), lembre da função GETENV() para obter o diretório temporário da estação -mais elegante.)

2. Crie arquivo de índice temporário para filtrar o banco de dados, não use SET FILTER.

cRANDOM  := ALLTRIM(STR(RAN(9999))) // gera número aleatório de 0 a 9999
fINDEX3  := xTEMP+"TEMP" + cRANDOM  // gera nome do arquivo temporário. xTEMP é uma pasta local.
INDEX ON RIGHT(CTR,2)+LEFT(CTR,3)+DESCEND(DTOS(PRAZO)) TAG PRAZO TO (fINDEX3) ;
	 FOR !EMPTY(PRAZO) .AND. PRAZO>=DATE(); /* AQUI VAI O "FILTRO" */
	 ADDITIVE TEMPORARY /* ADDITIVE: Cria índice sem fechar o demais abertos. TEMPORARY: apaga esse índice se fechar o respectivo DBF.

2. Não fique abrindo e fechando os bancos de dados. Simplesmente deixe-os abertos.

3. Programe de forma mais objetiva possível. Não reinvente a roda.

4. Não use LOCATEs, REPLACE ALL ou qualquer comando que pesquise o DBF inteiro.

5. Acrescente memória ao servidor para um grande cache de disco.

6. Encontre um servidor que gerencie o cache de gravação/leitura (e/s) eficientemente (hardware ou software).

7. USE... EXCLUSIVE sempre quando possível.

8. Certifique-se de que nenhum anti-vírus entra no caminho (use servidor Unix/Linux).

9. Use índices mais rápidos como os do formato da extensão .CDX ou .NSX (Comix ou SixDrive)

10. Verifique se o tipo de cabeamento e as placas de rede podem ser melhorados (trocados por mais rápido). Consulte um especialista em redes.

11. Verifique se a velocidade do disco rígido é boa

Prefira NVMe! NVMe > SSD > HD: O SSD é 10x mais rápido do que um HD. Já o NVMe é 10x mais rápido do que um SSD.

O HD SCSI era o recomendado para servidores de rede antigamente.

HD SATA III só funciona com o cabo Flat adequado/próprio. Não use um HD SATA III com cabo de SATA II. 

Instale 2 (dois) HDs em RAID modo strip para dobrar a velocidade. Precisa ser da mesma marca, modelo e tamanho.

 

12. Impressora lenta no Windows 98: incluir essas linhas no arquivo SYSTEM.INI logo após o final da lista [386enh]

[NetWork]
PrintBufTime=1
[IfsMgr]
PrintBufTime=1

13. Impressora lenta no 2000/XP/VISTA: Execute o REGEDIT e mude a chave a seguir conforme indicado:

HKLM\SYSTEM\CurrentControlSet\LPT_timeout = 1

14. Use um servidor de banco de dados, como o LetoDBf (solução gratuita, funciona com [x]Harbour). Funciona com servidor Windows e Linux.

Configurar Clipper para Windows

WindowsClipper no Windows 95/98/ME/2000/NT/XP/10/11 32bits

Aqui você vai aprender a instalar o Clipper nas versões do Windows mais antigas. Primeiramente instale o VirtualBox, depois instale uma das versões do Windows acima nele. 

A configuração abaixo é para o programador (Para o usuário, você pode remover as variáveis de ambiente LIB, OBJ, BIN e INCLUDE).

Considere que o Clipper foi instalado na unidade C:, no diretório Clipper5 e dentro dele tenha os subdiretórios LIB, OBJ, BIN e INCLUDE.

Vamos partir da instalação do Clipper que tem 2 disquetes, mas se você copiá-los para uma mesma pasta do HD não vai funcionar.

Isso tudo porque simplesmente tem um arquivo de mesmo nome em ambos os disquetes chamado DISK.ID. Então faça o seguinte:

  • Crie 3 pastas: install; disk1; disk2.
  • Copie o disco 1 para disk1 e disco 2 para disk2.
  • Copie o disco 1 para o install
  • Execute o install.exe
  • Quando pedir o disco 2, volte para o windows (Alt+Enter) e copie a pasta disk2 para a pasta install (substitua tudo sem medo).
  • Volte para a tela de instalação e continue.

Você também pode jogar tudo numa pasta só, basta controlar a informação que tem dentro do arquivo DISK.ID corretamente que é o seguinte:

CA-Clipper 5.2
5.2
Installation Disk 1

No disco 2, só muda a última linha que vai ter "Installation Disk 2". Aí, quando pedir o disco 2, pode voltar ao Windows e editar o arquivo DISK.ID com o Notepad e gravar a informação correta. Depois, voltar a instalação normalmente.

Windows 95/98

Inclua estas linhas no AUTOEXEC.BAT:

SET CLIPPER=//F:225 //DYNF:8 //SWAPK:65535 //SWAPPATH:"C:\TEMP" //TEMPPATH:"C:\TEMP"
SET LIB=C:\CLIPPER5\LIB
SET OBJ=C:\CLIPPER5\OBJ
SET BIN=C:\CLIPPER5\BIN
SET INCLUDE=C:\CLIPPER5\INCLUDE
SET PATH=%PATH%;C:\CLIPPER5\BIN

Atenção: Não substitua a linha SET PATH existente do seu AUTOEXEC.BAT, inclua esta outra nova linha com este SET PATH abaixo da existente!

Inclua estas linhas no CONFIG.SYS:

FILES=225
BUFFERS=80
STACKS=9,256

Reinicie a máquina para que as configurações tenham efeito.

Windows ME

  • Clique no menu iniciar, executar e digite: msconfig;

  • Clique na aba, SYSTEM.INI, procure pelo bloco que inicia com a seguinte chave [386Enh];

  • Selecione a linha que contém a chave PerVMFiles, clique no botão "Editar" e defina o valor: PerVMFiles=225

  • Reinicie a máquina para que as configurações tenham efeito.

  • Para especificar ou editar valores no AUTOEXEC.BAT, o usuário deve editar a seguinte chave de registro do Windows:
HKEY_LOCAL_MACHINE\SYSTEM\currentcontrolset\control\session manager\environment

A chave de registro do Windows é editada por meio do aplicativo chamado REGEDIT, vá em Menu Iniciar, Executar e digite REGEDIT e tecle <Enter>.

Windows 2000/XP/NT

Essas versões do windows não tem os arquivos de configuração AUTOEXEC.BAT e CONFIG.SYS, necessários para determinar a quantidade de arquivos a serem abertos por um aplicativo MS-DOS.

Abra o arquivo AUTOEXEC.NT que está no diretório WINDOWS \ SYSTEM32 e inclua estas linhas :

SET CLIPPER=//F:225
SET LIB=C:\CLIPPER5\LIB
SET OBJ=C:\CLIPPER5\OBJ
SET BIN=C:\CLIPPER5\BIN
SET INCLUDE=C:\CLIPPER5\INCLUDE
SET PATH=%PATH%;C:\CLIPPER5\BIN

Outra forma de incluir variáveis de ambiente no Windows 2000/XP/NT (principalmente se o Windows não puxou estas variáveis de ambiente do AUTOEXEC.BAT), é seguir os seguintes passos:

INICIAR ➡️ PAINEL DE CONTROLE ➡️ SISTEMA ➡️ AVANÇADO ➡️ VARIÁVEIS DE AMBIENTE

Clique no menu "Iniciar", depois em "Painel de Controle". Escolha então "Sistema".

Na janela que abrir, clique na aba "Avançado" e depois no botão "Variáveis de Ambiente".

Na próxima tela, clique no botão "Nova" do quadro "Variáveis do sistema".

Coloque o nome da variável no primeiro campo e o valor no segundo.

Para testar se conseguiu configurar as variáveis de ambiente, use o comando SET no prompt do DOS.

Talvez você precise dar uma pausa para enxergar tudo, então use: SET |MORE ou então mande a saída do comando para um arquivo e abra com o Edit ou Notepad, use o parâmetro ">nome do arquivo" com o comando, assim: SET >AMBI.TXT, depois é só abrir o arquivo criado AMBI.TXT e ver todas as variáveis de ambiente criadas. Talvez você queira mandar esse arquivo para um amigo ou postá-la num fórum para mostrar como está seu ambiente e pedir ajuda.

Naquele mesmo diretório, abra o CONFIG.NT e inclua o seguinte comando:

FILES=225
BUFFERS=80
STACKS=9,256

Reinicie a máquina para que as configurações tenham efeito.

Ambiente para cada versão do Clipper

Dependendo da versão do Clipper que você esteja utilizando, os parâmetros da variável CLIPPER deverão ser precedidos de ponto e vírgula (;) ou barras duplas (//).

Exemplo para o Clipper v.5.2e:

SET CLIPPER=//F:225 //DYNF:8 //SWAPK:65535 //SWAPPATH:"C:\TEMP" //TEMPPATH:"C:\TEMP"

 

Exemplo para o Clipper v.5.0a:

SET CLIPPER=F225;DYNF:8;SWAPK:65535;SWAPPATH:"C:\TEMP"

 

➡️ Para maiores informações, consulte o Norton Guide (NG) em:

OPTIONS ➡️ DATABASE ➡️ CA-Clipper 5.2 ➡️ Utilities ➡️ VIEW ➡️ ENVIRONMENT ➡️ SET CLIPPER
  Ou
OPTIONS ➡️ DATABASE ➡️ Clipper 5.00a ➡️ Utilitários ➡️ CLIPPER ➡️ AMBIENTE ➡️ SET CLIPPER

 

TELA COM 25 LINHAS NO WINDOWS XP

"Janela x tela inteira: rode o seu programa, que vai aparecer em uma janela, certo? Clique nele com o botão direito do mouse (na barra de tarefas) e vá em "padrões". Altere para 80 x 25 tanto o tamanho do buffer da tela quanto o tamanho da janela. Pronto. da próxima vez, o seu prg vai abrir em tela inteira! Independente disso, você pode alternar entre janela e tela inteira teclando ALT ENTER...". Por Eolo Ventura.

O compilador Clipper é 16bits, portanto não vai rodar no Windows 64bits.

Use o VirtualBox para instalar um sistema de 32bits ou o vDOSplus para trabalhar com o Clipper.

DOSBOX é uma emulador MS-DOS mais voltado para jogos! O vDOSplus é mais indicado para Clipper.

Windows 11

No windows 11 quando a gente pressiona a tecla Windows+Pause/Break é tudo muito diferente, mas as propriedades do sistema se encontra abaixo das especificações do dispositivo em "Links relacionados" é só clicar em "Configurações avançadas do sistema" que daí já vai aparecer aquela janelinha conhecida.

Outra forma é executar "sysdm.cpl" que também vai chamar aquela janelinha já conhecida das propriedades do sistema (system properties). Se está perdido com isso, clique na lupa da barra de tarefas ou pressione as teclas Windows+R então digite "sysdm.cpl" e abrir.

Daí você já sabe, aba "Avançado" (advanced) e lá embaixo "Variáveis de ambiente" (Environment Variables).

Clipper rodando em ambiente 64 bits

Pode ser que você não queira instalar uma plataforma de 32bits só por causa do Clipper, então veja a dica em Clipper no Windows 64Bits.

Formatar variável ainda no GET

Formatar Variável ainda no GET


Coloque os zeros antes do número automaticamente, ainda dentro do GET.

 Para ficar bem claro, será mostrado duas rotinas equânimes a seguir.

Uma rotina normalmente usada seria assim:
 

WCOD := 0
@ 10,10 SAY "CODIGO:" GET WCOD PICT "999999"
//Outros GETs
READ
WCOD := STRZERO(WCOD,6)


A partir de agora você fará o seguinte*:

WCOD := 0
@ 10,10 SAY "CODIGO:" GET WCOD PICT "999999" VALID EVAL( { || WCOD := STRZERO(WCOD,6), .T.} )
//Outros GETs
READ


Gostou?!
*Testado no Clipper 5.01 e 5.2e; xHarbour 1.2.1 + Hbmake 1.20.

Indexação de Arrays com o Clipper

Saiba como ordenar qualquer vetor ou matriz com o Clipper!

Acredito que a forma mais comezinha para este tema seja através do primeiro preceito da lógica: a observação. Então observe:

Indexação de um array multidimensional (matriz)

Digamos que tivéssemos a seguinte matriz de 3 dimensões (matriz de 3 colunas):

aTST := { { "ANDERSON", "PROGRAMADOR",   23 },;
          { "LILIAN",   "UNIVERSITÁRIA", 22 },;
          { "ALADIAH",  "MILITAR",       59 } }

Se você quisesse indexar esta matriz por idade em ordem crescente:

aTST := aSORT( aTST,,,{|X,Y| X[3] < Y[3] } ) 

Por idade em ordem decrescente:

aTST := aSORT( aTST,,,{|X,Y| X[3] > Y[3] } ) 

Por profissão em ordem crescente:

aTST := aSORT( aTST,,,{|X,Y| X[2] < Y[2] } ) 

Por profissão em ordem decrescente:

aTST := aSORT( aTST,,,{|X,Y| X[2] > Y[2] } ) 

Por nome em ordem crescente:

aTST := aSORT( aTST,,,{|X,Y| X[1] < Y[1] } ) 

Por nome em ordem decrescente:

aTST := aSORT( aTST,,,{|X,Y| X[1] > Y[1] } ) 

Ok?! Vamos adiante!

Indexação de um array unidimensional (vetor)

Digamos que tivéssemos o seguinte vetor (matriz de 1 só coluna):

aTST2 := { "01002 11/10/99 REFIL P/ IMPRESS HP  35.00",;
           "01000 10/11/99 CX. DISQ. NASHUA      8.00",;
           "00101 01/07/99 PENTE 32MB SDRAM    188.00"}

Se você quisesse indexar por ordem de pedido crescente você já sabe! Normal:

aTST2 := aSORT( aTST2 ) 

Mas e por ordem decrescente do pedido?

aTST2 := aSORT( aTST2,,,{|X,Y| X > Y } ) 

E se você quisesse por data??? Em ordem crescente??? Nesse caso aí que é uma stringo só?

aTST2 := aSORT( aTST2,,,{|X,Y| CTOD(SUBSTR(X,7,8)) < CTOD(SUBSTR(Y,7,8)) } ) 

E por ordem decrescente???

aTST2 := aSORT( aTST2,,,{|X,Y| CTOD(SUBSTR(X,7,8)) > CTOD(SUBSTR(Y,7,8)) } ) 

Por nome do produto em ordem crescente?

aTST2 := aSORT( aTST2,,,{|X,Y| SUBSTR(X,17,20) < SUBSTR(Y,17,20) } ) 

Por nome do produto em ordem decrescente?

aTST2 := aSORT( aTST2,,,{|X,Y| SUBSTR(X,17,20) > SUBSTR(Y,17,20) } ) 

Por preço em ordem crescente?

aTST2 := aSORT( aTST2,,,{|X,Y| VAL(SUBSTR(X,36,7)) < VAL(SUBSTR(Y,36,7)) } ) 

Por preço em ordem decrescente?

aTST2 := aSORT( aTST2,,,{|X,Y| VAL(SUBSTR(X,36,7)) > VAL(SUBSTR(Y,36,7)) } ) 

Estes exemplos foram dados por mera ilustração. Desculpe se eu fui redundante demais para você, mas tem que ser assim mesmo... Por analogia você poderá indexar qualquer 'array' de qualquer forma que quiser!!!

Links úteis

linksDICAS DE LINKS

Usar nomes de arquivos extensos do Windows (em inglês)

http://www.engwall.com/clipper/lfnlib.htm

 

Link da Computer Associates para Patches and Updates do Clipper:

http://support.cai.com/Download/patches/ca-clipper/clip-patchmenu.html

 

 

Link da Coletânia de Clipper da  PC Magazine

http://shareware.pcmag.com/category.php[id]45[SiteID]pcmag

 

The Oasis Clipper source - A maior coletânea de Clipper que existe!

http://www.the-oasis.net/

 

>>> Clipper On Line <<< - Site Clipper On Line onde você encontra tudo sobre Clipper/Harbour.

http://www.pctoledo.com.br/

 

Grupo Vagucs

http://www.vagucs.com.br

 

 The SourceSite - Clipper (vários downloads)

http://www.karland.com/code/clipper/

 

 Código Livre 

http://dicasprog.codigolivre.org.br/index.php 

ORACLE e outros Database Servers

ORACLE e outros Database Servers

Já existe driver (RDD) para aplicativos em Clipper rodar, sem traumas, um banco de dados em Oracle e outros Database Servers.

Os Database Servers fazem que as informações sejam todas processadas no servidor sem enviar as informações aos computadores da rede. Desta forma, conseguem velocidade e consistência incomparáveis. Muito difícil ter problemas com arquivos de índice assim. É ideal para sistemas com 20 ou mais computadores em rede.

 

Oraclip

Mediator

Top Connect

Cliptrieve / Ultiroute RDD

ADS (Advantage Data Server)

SQLRDD para xHarbour

 

É gratuito: MySQL até 100 usuários com o Projeto Harbour / xHarbour. Em breve estaremos publicando os detalhes em Dicas > xHarbour.

Protegendo contra descompilação

Como proteger seu sistema contra descompilação

protecao

Na sua procedure ERRORSYS.PRG, escreva o seguinte:

Procedure ERRORSYS
Private ErrorSys
ErrorSys := 9876543210

Quando o descompilador encontra esse valor para ErrorSys, recusa a descompilação.

O problema é depois você perder os fontes e não conseguir mais recuperar...

O "Valkyrie" não consegue descompilar rotinas "alheias" (em linguagem C, por exemplo), mas o restante em Clipper rotineiro. O "Unclip" também a mesma coisa.

Se você usar o RTLINK para poder criar primeiramente arquivos prelinkados com extensão .PLT e .PLL ; depois a partir destes dois, cria-se um terceiro .EXE,  que não é um executável normal tipo Clipper, e sim um pequeno programa que carrega seu arquivo .PLL na memória para ser executado. Funciona para pequenos e grandes programas com qualquer tipo de overlays. O "Valkirie" não reconhece e não disassembla e o "Rescue" idem.

Tem uma biblioteca do GAS4 que não deixa o Valkyrie descompilar, a BRWFUNC.

Em anexo disponibilizamos algumas ferramentas que são gratuitas ou shareware.

Anexo: 

https://linguagemclipper.com.br/files/copyprot.zip
https://linguagemclipper.com.br/files/cryexe.zip
https://linguagemclipper.com.br/files/megaprot.zip
https://linguagemclipper.com.br/files/noclip.zip
https://linguagemclipper.com.br/files/proteg.zip
https://linguagemclipper.com.br/files/protege.zip
https://linguagemclipper.com.br/files/secrit.zip
https://linguagemclipper.com.br/files/seguro33.zip

Resolver Quebra de Índices

 


Confira estas dicas de como resolver os problemas de quebra de índice no Clipper ([x]Harbour, xBase).

Este problema é muito comum. No Clipper, as modificações do banco de dados são feitos no cliente e depois enviados ao servidor... se há um pique de luz, um travamento, ou outro bug qualquer no cliente, o índice se quebra.

Primeiro lugar você deve ter certeza de que em todo programa que você grava ou altera dados você abre todos os arquivos de índice que o DBF possui, mesmo os índices que você não utilizará no programa. Utilizar bolsa de índices (bag) disponíveis em alguns RDD como o DBFCDX é util porque todos os indices sempre são abertos automaticamente.

Uma forma de evitar um pouco esses problemas é usar sempre o DBCOMMIT() para que as modificações não fique localmente no cache dando bobeira e sim seja gravado logo no servidor... Chama-se flush (descarga) no disco.

Nunca crie uma chave do tipo alltrim(nome)+codigo, pois na estrutura no arquivo de indice há um registro que define o tamanho da sua chave, se você criar uma chave com tamanho variável o resultado será sempre um arquivo corrompido!

Você deve verificar as instalações dos computadores, veja se todos têm estabilizadores, aterramento adequado, etc. O servidor necessita ter um no-break! E caso o benefício do no-break possa se estender aos outros computadores provavelmente você não terá mais problemas com isso... (todos precisariam terminar rapidamente o trabalho antes que a energia acabasse, é claro).

A única forma de prevenir 100% contra quebra de índices é a instalação de um bom gerenciador de banco de dados, como o ADS (Advantage Data Server), o único embargo é o preço... +- R$ 10.000,00. Nem preciso dizer que só é viável p/ grandes empresas, não é?! No entanto, o resultado é espetacular! Aumento da velocidade da rede, da capacidade de armazenamento dos DBFs, segurança total dos arquivos de índice, etc. Isto porque um gerenciador de banco de dados faz com que a gravação/edição das informação seja realizada diretamente no servidor ao invés de trazê-las para o terminal que você está e depois devolver. Temos diversos gerenciadores de banco de dados no mercado.

Se após estas observações o problema ainda persiste, vá à seção de Know-How e procure o tema "Consistência dos Arquivos de Índice" que fala sobre como manter a integridade do banco de dados na programação de seu sistema.

Use um gerenciador de banco de dados. Temos o LetoDBF gratuito hoje em dia para o Harbour.

Confira estas dicas do Itamar M. Lins Jr.:

1º Evitar usar Win7/10 como servidor. Use LINUX! ou Windows Server!
2º Usar Nobreaks
3º Não usar mapeamento.
4º Verificar o cabeamento de todos os micros.
5º Não se instala Antivírus no servidor!
6º Se usar windows, desligar atualizações. Pq ele reinicia o sistema sem avisos(atualizações), danificando o DBF!
7º Usar as novas ferramentas para acessar DBF em REDE! No mínimo fazer uso do NetIO, e ou usar LetoDBf ou ADS.
8º Se não deseja atualizar o seu código, acessar via "Terminal Service" o sistema.
9º Deixar o servidor "DEDICADO".(Ninguém mexe)
Seguindo esses parâmetros diminuímos a quase zero o problema de índices corrompidos.

 

TECLADO BRASILEIRO ABNT2 (c/ cedilha) NO MS-DOS

TECLADO BRASILEIRO ABNT2 (c/ cedilha)

teclado brasileiro

Para configurar o seu teclado brasileiro padrão ABNT2 com cedilha e outros acentos, você precisa configurar alguns comandos externos do MS-DOS que são carregados no CONFIG.SYS e no AUTOEXEC.BAT. Veja a seguir:

 

1. No CONFIG.SYS:

DEVICEHIGH=C:\WINDOWS\COMMAND\DISPLAY.SYS CON=(EGA,,1)

2. No AUTOEXEC.BAT:

MODE CON CODEPAGE PREPARE=((850) C:\WINDOWS\COMMAND\EGA.CPI)
MODE CON CODEPAGE SELECT=850
LH KEYB BR,,C:\WINDOWS\COMMAND\KEYBRD2.SYS /ID:275

No Windows XP:

PAINEL DE CONTROLE > DATA, HORA, IDIOMA E OPÇÕES REGIONAIS > OPÇÕES REGIONAIS E DE IDIOMA > ABA IDIOMAS > BOTÃO "DETALHES" > CONFIGURAÇÕES: "Português (Brasil) - Português (Brasil - ABNT2)".