Abaixo estão relacionadas algumas dicas que serão muito úteis para facilitar a programação em Clipper. Clique sobre uma das dicas abaixo para mais detalhes.

Se você tiver alguma dica para colocar nessa seção envie para o e-mail toledo@pctoledo.com.br.

Como configurar o MS-DOS para executar uma aplicação em Clipper.

Para executar uma aplicação em Clipper 5.x, você deve ter alguns cuidados ao configurar o ambiente de trabalho para que a aplicação funcione corretamente. No arquivo CONFIG.SYS dois parâmetros básicos devem ser reconfigurados:

FILES - parâmetros que especifica ao DOS o número máximo de arquivos que podem ser abertos simultaneamente. O número de arquivos abertos simultaneamente refere-se a arquivos de qualquer tipo (.dbf, .dbt, .ntx, .mem etc.) abertos em um dado momento pela aplicação. A configuração ideal é que este número seja um múltiplo de 15, obedecendo o limite máximo de 255.

BUFFERS - parâmetro que especifica o número de buffers (áreas da memória reservadas para a transição de dados) que devem ser utilizados durante as operações de leitura e gravação no disco. Neste comando deve ser utilizados valores múltiplos de 8.

No arquivo AUTOEXEC.BAT deve ser colocado a variável ambiental SET CLIPPER, a sintaxe a ser utilizada é a seguinte:

SET CLIPPER=F:<nn>;DYNF:8;SWAPK:65535;SWAPPATH:<"dir">

Parâmetros:

F:<nn> é usado junto com o valor especificado no comando FILES do arquivo CONFIG.SYS para informar ao Clipper o número máximo de arquivo a serem usados. Isto só é válido para programas que usem mais de 20 arquivos e executem debaixo de DOS 3.3 ou superior. Quando especificado, Clipper determina o número de arquivos que podem ser abertos usando o menor entre o parâmetro F ou o comando FILES do CONFIG.SYS. Por exemplo, se o comando FILES é estabelecido em 135 e o parâmetro F em 50, o máximo de arquivos a serem abertos será 50. O ideal para <nn> é um número par e 5 menor que o especificado no comando FILES.

DYNF:8 especifica o número de arquivo para o sistema de overlays dinâmicas. Valores válidos vão de 1 a 8 inclusive. Se não especificado, assume 2.

SWAPK:65535 especifica o maior tamanho permitido para o arquivo de swap em disco usado pelo sistema de memória virtual (VM). Especifica-se em incrementos de Kbyte. Valores válidos vão de 256 a 65535 inclusive. Caso não seja especificado, o assumido será 16384 (16 MB).

SWAPPATH:<"dir"> especifica a localização do arquivo de swap de memória virtual. Se não especificado, o arquivo será criado no drive/diretório corrente.

Exemplo:

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

Voltar


Utilizando o RMAKE

O RMAKE automatiza a manutenção de sistemas de programas multi-arquivos, mantendo os arquivos atualizados. RMAKE mantém os arquivos atualizados comparando a data e hora dos arquivos relacionados (.prg e .obj) um ao outro e executa uma série de ações se a
data e hora não corresponderem. Se a data e hora de um arquivo .prg for mais recente que a do arquivo .obj correspondente o RMAKE realiza as ações especificadas, caso contrário, não é realizada as ações. Com isto a compilação e a linkedição se torna mais rápida, pois só os arquivos modificados recentemente serão compilados e linkeditados. Para que possamos usar o RMAKE temos que criar dois arquivos, um com as ações que serão realizadas (.RMK) e outro que vai especificar os arquivos a serem linkeditados (.LNK).

Veja abaixo um exemplo de um arquivo .RMK (nome do arquivo - ESTOQUE.RMK):

.PRG.OBJ:
CLIPPER $** /M /L
ESTOQUE.OBJ : ESTOQUE.PRG
PRODUTO.OBJ : PRODUTO.PRG
FORNEC.OBJ : FORNEC.PRG
VENDAS.OBJ : VENDAS.PRG
ESTOQUE.EXE:
RTLINK @ESTOQUE.LNK


Na maioria dos casos vamos começar o aqruivo RMK com o comando .PRG.OBJ:, que são os arquivos que sofrerão as ações a serem realizadas. O primeiro é o dependente (.PRG) e o segundo é o destino (.OBJ).
Depois vem o comando do Clipper que vamos utilizar para compilar os arquivos do programa. No exemplo está sendo usado as opções /M (compila somente o arquivo fonte) e /L (suprime a numeração das linhas).
Depois vem a lista dos arquivos a serem compilados. Observe que devemos especificar primeiro o nome dos arquivos objetos (.OBJ), colocar um separador (: dois pontos) e em seguida o nome do programa fonte (.PRG).
Depois temos que especificar qual será o nome do arquivo executável (.EXE) a ser gerado.
Depois vem o comando para linkedição do programa, acompanhado com o nome do arquivo LNK precedido por uma arroba. 

Agora vamos ver como ficará o arquivo LNK (nome do arquivo - ESTOQUE.LNK):

No arquivo .LNK vamos especificar os arquivos objetos (.OBJ) que serão linkeditado e também as bibliotecas externas que serão usadas. Veja o exemplo:

FILE ESTOQUE
FILE PRODUTO
FILE FORNEC
FILE VENDAS

LIB MINHALIB, OUTRALIB

A opção LIB só é usada se você estiver utilizando alguma biblioteca externa que não seja do Clipper. Se você estiver usando somente as bibliotecas do Clipper este comando não será preciso.

Depois que você criou os dois arquivos que serão usados junto com o RMAKE, basta digitar o seguinte comando:

RMAKE ESTOQUE

Pronto, o seu programa vai ser compilado e linkeditado tudo automaticamente.

Voltar


Como criar arquivos DBF através do seu programa

Quantas vezes você já foi instalar um programa em um cliente e acabou esquecendo de levar os arquivos de dados (.DBF)?
Criando os arquivos de dados através do seu programa, você nunca mais vai passar por esta situação. Abaixo vamos dar um exemplo de como criar um arquivo .DBF dentro de um programa.

FUNCTION CRIAARQ( )
PRIVATE aStru
aStru := {;
             {"CODIGO","C",03,00},;
             {"NOME","C",40,00},;
             {"ENDERECO","C",40,00},;
             {"NUMERO","N",04,00},;
             {"BAIRRO","C",25,00},;
             {"CIDADE","C",25,00},;
             {"SALDO","N",12,02},;
             {"DATA","D",08,00}}
DBCREATE("CLIENTE.DBF",aStru)
RETURN NIL

aStru é um vetor contendo a estrutura do arquivo de dados, contendo uma série de sub-vetores, um por campo. Cada sub-vetor contém a definição dos atributos de cada campo possuindo a seguinte estrutura:

{"NomedoCampo","TipodoCampo","Tamanho","Decimais"}

O tipo do campo pode ser: Caractere (C), Numérico (N), Lógico (L), Data (D) e Memo (M).
O campo Decimais é obrigatório em todos os tipos de campos, se o campo não for numérico terá de ser preenchido com zero (00).

Agora é só chamar a função DBCREATE( ) passando como parâmetro o nome do arquivo a ser criado e a matriz contendo a estrutura do arquivo.

Voltar


Como criar sua própria biblioteca (.LIB)

Um grande recurso do Clipper é poder criar suas próprias funções, facilitando ainda mais a programação nesta linguagem. Muitos programadores guardam suas funções sempre dentro de um mesmo arquivo que é usado em vários programas, mesmo que este programa não vai usar todas as funções que estão neste arquivo. Isto aumenta o tamanho do executável, exigindo mais memória para executar o programa. O programa LIB que vem junto com os produtos da Microsoft serve para criar sua própria biblioteca (.LIB). A vantagem de se ter uma .LIB é que quando você linkar esse arquivo junto com o seu programa, apenas as funções que estão sendo usadas serão incorporadas.
O programa LIB basicamente permite que você agrupe vários arquivos objetos (.OBJ) em um arquivo com a extensão .LIB.

Sintaxe:

LIB <arqlib> <comandos>, <arqlist>, <arqsaida>

<arqlib> é o nome do arquivo lib.
<comandos> pode ser os seguintes comandos:

+ Adiciona um arquivo .OBJ na lib.
- Remove um arquivo .OBJ da lib.
* Extrai um .OBJ sem removê-lo da lib.
-+ Substitui um .OBJ da lib
-* Extrai um .OBJ e o remove da lib.

<arqlist> é o nome de um arquivo texto a ser gerado e que possui o nome e utilização da memória de cada .OBJ.

<arqsaida> este parâmetro especifica o nome que a lib terá.

Para criar uma lib com o nome de MINHALIB e que contenha as funções CRIAARQ, MENU, ENCRYP, EXPAND e PROTELA, você deve usar o seguinte comando:

LIB MINHALIB +CRIAARQ +MENU +ENCRYP +EXPAND +PROTELA ;

Agora para retirar uma função da lib você deve usar o seguinte comando:

LIB MINHALIB -ENCRYP

Se você alterou alguma função e gostaria de atualizar a sua lib você deve usar o seguinte comando:

LIB MINHALIB -+MENU

A sua lib está pronta, agora é só você usar ela normalmente pelo seu linkador. Exemplo:

RTLINK FI ESTOQUE LIB MINHALIB

Voltar


Como enviar E-mail através de um programa em Clipper

Parece brincadeira, mas é possível enviar e-mail através de um programa desenvolvido em Clipper, graças a um programa chamado SMTPSend. Este programa pode ser chamado na linha de comando do DOS e através de alguns parâmetros são passadas as informações básicas para o envio do e-mail. No programa em Clipper você pode chamar o SMTPSend usando o comando RUN que serve para executar um programa externo.

O SMTPSend usa os seguintes parâmetros:

-f <Endereço>
Neste parâmetro você vai informar o endereço eletrônico de quem está enviando o e-mail, exemplo: -ftoledo@expressnet.com.br

-t <Endereço>
Neste parâmetro você vai informar o endereço eletrônico para quem você vai enviar o e-mail, exemplo: -tjose@bol.com.br

-s <Assunto>
Neste parâmetro você vai informar o assunto do e-mail, exemplo: -sTeste de envio

-h <Servidor>
Neste parâmetro você vai informar o endereço do seu servidor de e-mail, exemplo -hsmtp.expressnet.com.br.

-i <Arquivo>
Neste parâmetro você vai informar o nome do arquivo que vai servir como corpo da mensagem, exemplo: -ic:\autoexec.bat

-a <Anexo>
Neste parâmetro você vai informar o arquivo que será enviado em anexo com o e-mail, exemplo: -aANEXO.ZIP

-@ <Arquivo>
Neste parâmetro você vai informar o nome do arquivo que terá os parâmetros descritos acima para ser executado ao invés de ficar informando os parâmetros separados.
Exemplo:

-ftoledo@expressnet.com.br
-tjose@bol.com.br
-sTeste de envio
-hsmtp.expressnet.com.br
-ic:\autoexec.bat
-aANEXO.ZIP

Abaixo segue exemplos de como utilizar o SMTPSend:

SMTPSend -ftoledo@expressnet.com.br -tjose@bol.com.br -sTeste de envio -hsmtp.expressnet.com.br -ic:\autoexec.bat -aANEXO.ZIP

ou

SMTPSend -@comandos.txt

Na seção Download você vai encontrar um programa demo usando o SMTPSend com o comando RUN.

Voltar


O RDD DBFCDX

Esse RDD permite a criação e manutenção de arquivos de dados e índices do FoxPro2.

Principais características:

Os índices .CDX do FoxPro são bem menores do que os .NTX criados pelo Clipper.

Cria índices condicionais através das cláusulas FOR, WHILE, REST e NEXT.

Cria arquivos de índices compostos que contém até 99 subíndices ou TAGS em um único arquivo reduzindo, assim, o número de arquivos abertos em nível do DOS.

Como o Clipper permite apenas 15 arquivos associados e abertos com a área atual, o uso dos arquivos CDX permite a abertura de mais arquivos de índices sem sobrecarregar o número de arquivos que o DOS manipula.

Para que o RDD DBFCDX funcione corretamente, devem ser seguidos os seguintes passos:

1 - Acrescente as linhas abaixo no início do seu programa principal:

REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")

2 - Para criar os arquivos de índices, você deve usar o seguinte comando:

SELECT 1
USE CLIENTES
INDEX ON codigo TAG indice1 TO cliente1
INDEX ON nome TAG indice2 TO cliente1

Observe que cada campo chave tem um TAG diferente (indice1 e indice2), mas todos estão sendo direcionados para um mesmo arquivo (cliente1), com isto será criado um arquivo de índice chamado CLIENTE1.CDX, com dois subíndices, um indexado pelo código do cliente e outro pelo nome do cliente.

3 - Para mudar a ordem em um arquivo de índice CDX, você deve proceder da seguinte forma:

ORDSETFOCUS("INDICE2")

Com este comando você vai selecionar o subíndice "INDICE2", que está indexado pelo campo nome do cliente.

ORDSETFOCUS("INDICE1") 

Retorna ao subíndice principal, que está indexado pelo campo código do cliente.

Se o comando ORDSETFOCUS( ) não for especificado, a ordem será sempre a do primeiro subíndice criado, neste caso será o indice1, pelo código.

4 - Para linkar um programa com o RDD DBFCDX, deve ser acrescentada a LIB DBFCDX durante o processo de linkagem:

RTLINK FI teste LIB DBFCDX

5 - Os comandos abaixos continuam sendo usados da mesma forma:

SET INDEX TO - Abre um arquivo de índice.
CLOSE ALL - Fecha todos os arquivos de dados e índices associados.

Voltar


Códigos de erro do Clipper (Internal Errors)

Aqui estão alguns códigos de erro do Clipper não documentado.

0 - Error System Integrity Error
O erro de sistema foi encontrado como erro desconhecido. A provável causa é memória danificada.

1 - Evaluation Stack Underflow
Um erro na pilha ocorreu após um Return.

2 - Memory Error
Ocorreu um erro de memória antes do RUN. A causa mais provável é corrupção do sistema de alocação do DOS.

3 - Memory Error
Ocorreu um erro de memória após o RUN, quando está descarregando o sistema de buffers. Isto ocorre quando o sistema tenta reinicializar o R space e existe menos de 16Kb de memória para DOS.

4 - Memory Error
Ocorreu um erro de memória, corrompendo o sistema de buffer interno. Isto acontece quando são colocados buffers internos livres quando estes já existem.

5 - Memory Error
Ocorreu um erro de memória corrompendo o buffer e o sistema EMM. Isto ocorre quando tenta-se mapear o bloco de memória EMM no endereço de espaçamento convencional e o driver EMM reporta um erro.

6 - Buffer Error
Isto ocorre quando tenta-se conectar um buffer com uma base de dados e a base de dados já está conectada a um buffer. A causa provável é corrupção de memória.

7 - Buffer Error
Isto ocorre quando tenta-se enviar um buffer de base de dados para uma base de dados e não existem buffers para isso. A causa provável é corrupção de memória.

8 - Buffer Error
O sistema executou fora da base de dados.

9 - Buffer Error
O sistema executou fora da memória quando tentava alocar a base de dados.

10 - Too Many Nested BEGIN SEQUENCE/END Blocks
Existem muitos ninhos de comandos BEGIN SEQUENCE/END definidos. O máximo é 16.

11 - BEGIN SEQUENCE/END Integrity Error
Houve uma quebra de pilha com BEGIN SEQUENCE. Isto acontece somente se existe em END pendente sem um BEGIN SEQUENCE.

14 - SORT Error
O sistema ficou sem memória durante a operação do SORT enquanto tentava alocar um buffer na base de dados.

15 - SORT Error
Ocorreu corrupção de memória durante a operação do SORT.

16 - Database Not Open
Isto ocorre ao final de um grande bloco de operações da base de dados e um dos arquivos usados pela base de dados não está mais aberto.

17 - NTX File Corrupted
Isto ocorre quando um buffer do índice foi encontrado corrompido no ato da atualização do índice.

18 - NTX File Corrupted
Isto ocorre quando um buffer do índice foi encontrado corrompido no ato da atualização do índice com a clausula UNIQUE.

19 - NTX File Corrupted
Isto ocorre quando um buffer do índice foi encontrado corrompido no ato da atualização do índice e não está com a clausula UNIQUE.

20 - NDX File Key Type Error
O processo da chave no arquivo NDX não resulta em um caractere ou em um número. Isto pode ocorrer somente se a chave tem valor lógico.

21 - NDX File Type Error
O comando SEEK processa uma procura diferente da chave de indexação.

22 - NTX File Type Error
Um comando SEEK processa a busca em um arquivo NTX com um valor lógico ou o sistema está sem memória quando processa a chave de expressão.

24 - Write Error
Este erro ocorre quando a aplicação Clipper não consegue gravar um arquivo ou um índice no disco. 

92 - SORT/INDEX ON Error
O sistema não consegue criar um arquivo temporário durante a operação SORT ou INDEX. 

332 - String/Array memory overflow
A máxima capacidade do Segment Virtual Object Store (SVOS) excedeu. Por causa da natureza dinânmica do SVOS, é praticamente impossível determinar o estado exato quando este erro poderá ocorrer. Em caso pior, este erro ocorre quando existe por exemplo, um megabyte de strings e/ou matrizes em uso, o melhor caso está no excesso de 16 megabytes.


Voltar

 
 
Site desenvolvido por PC Toledo - Telefone (18) 3301-2943
todos os direitos reservados
contato: sites@pctoledo.com.br