|
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@expressnet.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 |