Cur So Clipper

Embed Size (px)

Citation preview

Escrevendo o arquivo fonte do programa Inicialmente iremos criar um arquivo onde colocaremos os comandos do Clipper para que mais tarde seja compilado e linkeditado. Este arquivo que armazena esses comandos chamado de arquivo fonte. Para escrever o arquivo teremos que usar um editor de textos, ns usaremos o EDIT do DOS, por ser um editor simples e fcil de usar. Teremos que definir um nome para o arquivo fonte, este nome pode ter at 8 caracteres e obrigatoriamente a extenso .PRG. Para o nome do arquivo sero aceitos somente letras, nmeros e "_". Deve comear com letra e no pode conter espao em branco. O Clipper por ser uma linguagem feita para DOS, teremos que trabalhar no prompt do MS-DOS, para isto voc deve selecionar o boto Iniciar, Programas e depois Prompt do MS-DOS. Vamos criar uma pasta onde iremos gravar os arquivos que sero criados, para isto digite os seguintes comandos: CD\ MD AGENDA CD\AGENDA Agora vamos criar o arquivo fonte do nosso programa, digite: EDIT exerc1.prg CLEAR BORDA = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; CHR(217) + CHR(196) + CHR(192) + CHR(179) + CHR(176) @ 1,1,24,79 BOX BORDA @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE INKEY(0) CLEAR RETURN Agora temos que gravar (Salvar) o arquivo, pressione as teclas ALT+A, selecione a opo SALVAR e tecle Enter. Pronto j est salvo o arquivo, podemos sair do EDIT, pressione ALT+A novamente e selecione a opo SAIR. Comandos utilizados: Na sintaxe dos comandos descritos abaixo usaremos a seguinte notao sinttica: [ ] - Indica as partes opcionais de um comando < > - Indica as partes obrigatrias de um comando CLEAR Apaga a tela e coloca o cursor na posiao inicial (linha 0 e coluna 0) CLS o mesmo que CLEAR.

@ 1,1,24,79 BOX BORDA Desenha uma caixa na tela, da linha 1 coluna 1 at a linha 24 coluna 79. Sintaxe @ , , , BOX Argumentos , , , e definem as coordenadas da caixa. @...BOX desenha uma caixa usando valores de linha de 0 at 24, e coluna de 0 at 79. um string de oito caracteres de borda e um de preenchimento. @ 4,4 CLEAR TO 21,76 Limpa uma regiao retangular da tela, da linha 4 coluna 4 at a linha 21 coluna 76. Sintaxe @ , CLEAR [TO , ] Argumentos e define as coordenadas do canto superior esquerdo e e define as coordenadas do canto inferior direito a ser limpo. @ 4,4 TO 21,76 DOUBLE Desenha uma caixa em linha dupla, da linha 4 coluna 4 at a linha 21 coluna 76. Sintaxe @ , TO , [DOUBLE] Argumentos , , , e definem as coordenadas da caixa. DOUBLE desenha a caixa em linha dupla. Se no for especificado, a caixa desenhada em linha simples. INKEY(0) Espera uma tecla ser pressionada. Sintaxe INKEY([]) --> nCodInkey Argumentos

especifica a quantidade de segundos que INKEY() deve esperar por uma tecla. O valor pode ser especificado em incrementos do tamanho de at um dcimo de segundo. Se for especificado zero, o programa pra at que uma tecla seja pressionada. Retorno INKEY() retorna um valor numrico inteiro de -39 at 386, que identifica a tecla pressionada. Caso no seja pressionada tecla nenhuma, INKEY() retorna zero. RETURN Encerra o programa, funo ou procedure. Compilando e Linkeditando o programa Agora que j criamos o arquivo fonte temos que compilar o arquivo, este processo vai criar um outro arquivo com o mesmo nome do arquivo fonte, s que com a extenso .OBJ. Este ns chamamos de arquivo objeto. Quando compilamos um arquivo (.prg) o compilador verifica se no h erros no arquivo, se for encontrado algum erro, o compilador apresenta o nome do arquivo e entre parnteses a linha do arquivo onde est o erro, para que possamos corrigir a linha de comando. Comando para compilar o arquivo fonte: CLIPPER Exemplo: CLIPPER exerc1 Vamos agora criar o arquivo executvel, digite o comando abaixo: RTLINK FI Exemplo: RTLINK FI exerc1 O linkeditor vai criar um outro arquivo, agora com a extenso .EXE (exec Executando o programa Vamos agora executar o programa, para isto devemos digitar o nome do arquivo executvel, que acabamos de criar, na linha de comando do DOS. Exemplo: EXERC1 Observe que vai ser apresentado duas caixas com molduras no vdeo e se for pressionada alguma tecla o programa finalizado

Entrada de dados Para que possamos entrar com dados em um programa teremos que armazenar informaes em memria atravs de constantes que chamamos de variveis. Os conceitos de varivel no Clipper e na matemtica coincidem. No Clipper existem basicamente quatro tipos de variveis: a) variveis numricas; b) variveis alfanumrica (string); c) variveis lgicas; d) variveis data A varivel numrica corresponde a nmeros com at dezenove dgitos, contando pontos e vrgula. A varivel alfanumrica, ou string, corresponde s cadeias de caracteres, incluindo letras, nmeros, caracteres especiais e espaos (at 64 Kbytes). A varivel lgica representa um dos dois estados lgicos possveis: .T. (verdadeiro) ou .F. (falso). A varivel data usada para armazenar datas. O nome da varivel de memria pode ter at 10 caracteres. Somente letras, nmeros e "_" so permitidos. Deve comear com letra e no pode conter espaos em branco. Para criarmos nossas variveis iremos usar o operador de atribuio simples "=", da seguinte forma: = Exemplo: nValor = 0.00 cNome = SPACE(40) cEmp = "Turbo Clipper Solues de Informatica" lCond = .T. dNascto = CTOD(" ") Observe que o valor atribudo a uma varivel de memria defini o tipo de varivel que foi criada. Se for atribudo um nmero a varivel ser numrica, se for espaos em branco (SPACE(40)) ou uma cadeia de caracteres entre aspas a varivel ser alfanumrica, se for .T. ou .F. a varivel ser lgica e se for uma data em branco (CTOD(" ")) a varivel ser data. As variveis alfanumricas ou strings devem ser escritas entre aspas ou apstrofos e as variveis lgicas devem ser escritas entre pontos. Podemos tambm criar uma varivel a partir de uma outra varivel j existente, observe o exemplo abaixo:

nValor = 10 nTotal = nValor * 2 cNome = "JOS SILVEIRA" cNomei = cNome + " DA SILVA" No primeiro exemplo foi criada uma varivel numrica com o valor 10, depois foi criada uma outra varivel (tambm numrica) onde vai ter o seu valor 20, que o resultado de 10 multiplicado por 2. No segundo exemplo foi criada uma varivel alfanumrica com o contedo "JOS SILVEIRA", depois foi criada uma outra com o contedo "JOS SILVEIRA DA SILVA", que a concatenao da primeira varivel com a expresso " DA SILVA". A operao entre variveis s pode ser feita com variveis do mesmo tipo, se forem de tipos diferentes ocorrer um erro durante a execuo do programa. Agora que j sabemos criar variveis vamos montar uma tela para digitao de entrada de dados, entre no EDIT e crie um arquivo com o nome de Exerc2.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON nCodigo = 0 cNome = SPACE(40) cEnd = SPACE(40) dAniver = CTOD(" ") cFone = SPACE(10) cEmail = SPACE(30) BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) @ 1,1,24,79 BOX BORDA @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) @ 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (! EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!" @ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail READ CLEAR RETURN

Aps gravar o arquivo compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa e digite as informaes solicitadas. Comandos utilizados: Apenas os novos comandos sero descritos. SET DATE BRITISH Configura o formato de datas para entrada de dados e exibio em tela, o formato BRITISH o usado em nosso pas (DIA/MES/ANO). SET CENTURY ON Controla a exibio dos dgitos de sculo em datas, preparando seu programa para o prximo milnio. Argumentos ON permite a entrada e exibio dos dgitos de sculo para datas. OFF suprime a entrada e exibio dos dgitos de sculo para datas. SET CONFIRM ON Comuta a tecla de sada necessria para a terminao de GETs. Argumentos ON obrigar o usurio a pressionar uma das teclas de sada para abandonar um GET. OFF permite ao usurio abandonar um GET com a prpria digitao de caracteres, tendo o GET que ser todo preenchido, no havendo a necessidade de ser pressionada uma das teclas de sada. SET CONFIRM determina se uma das teclas de sada ser exigida para abandonar um GET. Se o CONFIRM est OFF, o usurio pode digitar quaisquer caracteres at o fim do GET que o cursor se mover automaticamente para o prximo GET se houver um. Caso no haja um outro GET, o READ terminado. Se, contudo, o CONFIRM estiver ON, uma das teclas de sada deve ser pressionada para abandonar o GET corrente. As teclas de sada mais usadas so: Enter, Seta para cima, Seta para baixo e ESC. CTOD(" ") Converte uma cadeia de caracteres em uma data correspondente Sintaxe CTOD() Argumentos

uma cadeia de caracteres que contm nmeros representando o ms, dia, e ano separados por qualquer outro caractere que no um nmero. Os dgitos do ms, dia, e ano devem ser especificados de acordo com o formato indicado pelo SET DATE. Para inicializar uma data vazia para uma entrada de dados, especifique a como sendo uma cadeia de caracteres nula (" "). SPACE(...) Retorna um string de espaos. Sintaxe SPACE() Argumentos a quantidade de espaos a serem retornados, sendo que o nmero mximo 65.535 (64K). @...SAY Exibe dados em uma linha e coluna especificadas. Sintaxe @ , SAY [PICTURE ] Argumentos e sao as coordenadas de linha e coluna da sada. Os valores de linha podem variar entre zero e 24, de coluna entre zero a 79 (coordenadas de vdeo). SAY exibe o resultado de uma expresso de qualquer tipo. PICTURE 0) @ 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (! EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!" @ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail @ 15,8 SAY "Deseja Continuar?...:" GET cFim PICTURE "@!" VALID (cFim $ "SN") READ IF cFim = "N" EXIT ELSE LOOP ENDIF ENDDO

CLEAR RETURN Aps gravar o arquivo compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa e observe como o programa vai trabalhar conforme as condies. Comandos utilizados: Apenas os novos comandos sero descritos. DO WHILE Executa um bloco enquanto uma condio verdadeira. Sintaxe DO WHILE ... [EXIT] ... [LOOP] ... END[DO] Argumentos a expresso lgica de controle do DO WHILE, se esta condio for verdadeira (.T.) os comandos dentro do DO WHILE so executados, caso contrrio falso (.F.), a instruo desviada para a linha imediatamente seguinte ao ENDDO. EXIT incondicionalmente desvia o controle de dentro de um DO WHILE para a instruo imediatamente seguinte ao ENDDO. EXIT usado geralmente para encerrar o DO WHILE. LOOP desvia o controle para o incio do DO WHILE mais recente. DO WHILE...ENDDO uma estrutura de controle que executa um bloco repetitivamente, enquanto for avaliada como verdadeira (.T.). Quando a condio avaliada como verdadeira (.T.), o controle passa para dentro da estrutura e assim continua at que um EXIT, LOOP, ou ENDDO seja encontrado. ENDDO retorna o controle para o incio do DO WHILE e o processo se repete. Se um EXIT for encontrado, o DO WHILE encerrado. Se um LOOP for encontrado, o controle desvia para o mais recente DO WHILE. Se a condio avaliada como falsa (.F.), a estrutura DO WHILE termina e o controle passa para a instruo imediatamente seguinte ao ENDDO. IF...ELSE...ENDIF Executa um dentre vrios blocos de instrues. Sintaxe IF

... [ELSEIF ] ... [ELSE] ... END[IF] Argumentos uma expresso lgica de controle. Se ela avaliada como verdadeira (.T.), o bloco seguinte executado at que um ELSEIF, ELSE ou ENDIF seja encontrado. ELSEIF identifica um bloco a ser executado caso seja avaliada como verdadeira (.T.) e todas as condies IF e ELSEIF anteriores foram avaliadas como falsas (.F.). Qualquer nmero de ELSEIFs pode ser especificado dentro de uma estrutura IF...ENDIF. ELSE identifica o bloco a ser executado se todos os IF e ELSEIF preliminares foram avaliados como falso (.F.). No exemplo se voc digitar "N" no campo "Deseja Continuar?" o EXIT executado saindo da estrutura DO WHILE e encerrando o programa, mas se digitar "S" o programa retornado ao comeo do DO WHILE. $ O operador $ um operador relacional binrio que executa uma busca sensvel a maiscula e minscula e retorna verdadeiro (.T.) se um caractere ou uma cadeia de caracteres for encontrado dentro de uma outra cadeia de caracteres. No exemplo o operador $ est sendo usado dentro do VALID de um GET, para verificar se vai ser pressionado somente as teclas "S" e "N", qualquer outra tecla ser validado como falso (.F.) e no sendo aceito pelo GET. Tente digitar outras letras para ver o que acontece. Criando um menu de opes Na maiorias dos programas as operaes so escolhidas atravs de um menu que tem vrias opes. O usurio vai selecionar dentre as opes a que ele quer executar. O Clipper dispe tambm deste recurso, que veremos a seguir. Entre no EDIT e crie um arquivo com o nome de Exerc4.prg e digite os comandos abaixo. CLEAR SET MESSAGE TO 21 CENTER SET WRAP ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) @ 1,1,24,79 BOX BORDA

@ 20,29 TO 22,50 @ 15,25 TO 17,54 @ 16,27 SAY "Voc Escolheu ->" nOp = 1 DO WHILE .T. @ 5,33 TO 11,45 @ 06,34 PROMPT " INCLUSO " MESSAGE "INCLUSO DE DADOS" @ 07,34 PROMPT " ALTERAO " MESSAGE "ALTERAO DE DADOS" @ 08,34 PROMPT " CONSULTA " MESSAGE "CONSULTA DE DADOS" @ 09,34 PROMPT " EXCLUSO " MESSAGE "EXCLUSO DE DADOS" @ 10,34 PROMPT " FINALIZA " MESSAGE "SAIR DO PROGRAMA" MENU TO nOp DO CASE CASE nOp = 1 @ 16,44 SAY "INCLUSO" CASE nOp = 2 @ 16,44 SAY "ALTERAO" CASE nOp = 3 @ 16,44 SAY "CONSULTA" CASE nOp = 4 @ 16,44 SAY "EXCLUSO" CASE nOp = 5 @ 16,44 SAY "FINALIZA" INKEY(0) EXIT ENDCASE ENDDO CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Atravs das setas cursoras (para cima e para baixo) voc navega entre as opes, observe que a mensagem correspondente a opo apresentada em um quadro logo abaixo do menu. Se voc selecionar com o Enter uma das opes o programa vai mostrar qual foi a opo escolhida. Comandos utilizados: Apenas os novos comandos sero descritos. SET MESSAGE TO 21 CENTER Configura a linha onde vai aparecer a mensagem de @...PROMPT Sintaxe SET MESSAGE TO [CENTER] Argumentos

especifica a linha de mensagem. CENTER centraliza a mensagem na linha especificada. SET WRAP ON Comuta rotao em Menus. Sintaxe SET WRAP ON | OFF Argumentos ON permite barra luminosa rotacionar quando estiver navegando em um menu de barra. OFF suprime a rotao num menu de barra. SET WRAP comuta a rotao da barra luminosa em um @...PROMPT do primeiro para o ltimo item e vice-versa. Quando WRAP est ON e o ltimo item est iluminado, Cursor para direita ou Cursor para baixo movem a barra luminosa para o primeiro item. Tambm quando o primeiro item de menu est iluminado, Cursor para esquerda ou Cursor para cima movem a barra para o ltimo item. Quando WRAP est OFF, pressionar Cursor para cima ou Cursor para esquerda no primeiro item ou Cursor para baixo ou Cursor para direita no ltimo item, no causam nenhuma ao. @...PROMPT Exibe um item de menu e define uma mensagem. Sintaxe @ , PROMPT [MESSAGE ] Argumentos e so as coordenadas de linha e coluna para exibir o item de menu. Valores de linha esto na faixa de zero at 24 e de coluna de zero at 79. o string com o item de menu a ser exibido. define a mensagem a ser exibida cada vez que o item corrente iluminado. @...PROMPT a poro exibidora de sistema de menu de barra luminosa do Clipper. Cada @...PROMPT exibe um item de menu e define uma mensagem associada a ser exibida na linha definida em SET MESSAGE. O menu de barra luminosa invocado com MENU TO. Os itens de menu podem ser exibidos na tela em qualquer ordem e

configurao de linha e coluna. MENU TO, entretanto, navega na lista de itens de menu corrente na ordem em que estes foram definidos. MENU TO Executa um menu de barra luminosa para PROMPTs definidos. Sintaxe MENU TO Argumentos o nome da varivel qual ser atribuda o resultado da seleo de menu. Esta varivel tem que ser criada previamente, o seu valor inicial vai determinar o primeiro PROMPT sobre o qual ficar a barra luminosa. O comando MENU TO o mecanismo de seleo para o sistema de menus de barra luminosa do Clipper. Antes de chamar o comando MENU TO, defina primeiro os PROMPTS do menu e mensagens associadas com uma srie de comandos @...PROMPT. Depois, ative o menu com MENU TO . DO CASE Executa um de vrios blocos de declaraes. Sintaxe DO CASE CASE ... [CASE ] ... [OTHERWISE] ... END[CASE] Argumentos CASE define um bloco de declaraes para executar caso avaliada como verdadeira (.T.). OTHERWISE define um bloco de declaraes para executar caso nenhum dos CASE seja verdadeiro (.T.). DO CASE...ENDCASE uma estrutura de controle que executa um de vrios blocos de declaraes dependendo de qual das condies associadas seja verdadeira (.T.). Ele trabalha desviando a execuo para as declaraes seguintes ao primeiro CASE que for verdadeiro (.T.). Execuo continua at que o prximo CASE,

OTHERWISE ou ENDCASE seja encontrado. O controle ento desviado para a primeira instruo seguinte ao ENDCASE. Se nenhuma das condies CASE for avaliada como verdadeira (.T.), as declaraes seguintes ao OTHERWISE so executadas at que seja encontrado o ENDCASE. Caso no seja especificado um OTHERWISE, o controle desvia para a instruo em seguida ao ENDCASE. Criando arquivo de dados Junto com o Clipper vem um programa chamado DBU que serve para criar a estrutura de um arquivo de dados. Para executar o DBU basta digitar DBU e pressionar a tecla enter. Surgir uma tela com um menu de barras na sua parte superior. As opes do menu podem ser acionadas atravs do pressionamento da tecla de funo correspondente. Nesse instante, surgir um submenu com vrias opes. Atravs das setas para cima e para baixo voc seleciona uma das subopes e teclando Enter para ativ-la. Teclas utilizadas no DBU: F1 - Help: Aciona uma tela de Help sensitiva ao contexto. F2 - Open: Permite a abertura de um arquivo de dados, ndice ou view. F3 - Create: Permite a criao de arquivos de dados e ndices. F4 - Save: Grava a estrutura atual. F5 - Browse: Permite a visualizao dos registros do arquivo de dados. F6 - Utility: Menu de comandos Utilitrios. F7 - Move: Permite a movimentao pelos registros do arquivo. F8 - Set: Permite o estabelecimento de filtros, relaes e campos. Para criar um arquivo de dados voc deve pressionar a tecla F3 e selecionar a opo DATABASE. Depois voc ter que informar a estrutura do arquivo que ser criado, voc deve informar: Field Name - Nome do campo. Somente letras, nmeros e "_" so permitidos. Deve comear com letra e no pode conter espao em branco. Type - Tipo de campo. (C)aractere, (D)ata, (L)gico, (M)emo ou (N)mero. Width - Tamanho do campo. Data (8), Caractere (at 64kb), Lgico (1), Memo (at 64kb) e Nmero (19) Dec - Casas decimais. Somente para tipo nmero. Aps informar todos os dados de um campo, a seta para baixo abre mais uma linha de digitao. O arquivo que iremos criar tem a seguinte estrutura: Field Name CODIGO NOME ENDERECO Type N C C Width 3 40 40 Dec 0

ANIVER FONE EMAIL

D C C

8 10 30

Aps digitar toda a estrutura, voc deve pressionar a tecla F4 e selecionar a opo STRUCT para grav-la. Depois informe o nome do arquivo: AGENDA. Pressione a tecla Enter duas vezes. Pronto, voc criou um arquivo de dados que futuramente ir armazenar os dados digitados em nosso programa. Gravando em arquivo de dados Todas as informaes armazenadas em variveis de memria so perdidas assim que voc sair do programa ou da rotina que as criou. Para no perder estas informaes voc pode grav-las em arquivos de dados. Com as informaes gravadas voc poder: Recuperar dados do arquivo a qualquer momento; Modificar a seqncia dos dados, intercalando-os ou classificando-os da forma desejada; Executar clculos com os dados; Mostrar os resultados do processamento atravs de relatrios em impressora ou atravs do monitor de vdeo; Modificar, excluir ou consultar os dados gravados. Entre no EDIT e crie um arquivo com o nome de Exerc5.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA nCodigo = 0 DO WHILE .T. cNome = SPACE(40) cEnd = SPACE(40) dAniver = CTOD(" ") cFone = SPACE(10)

cEmail = SPACE(30) cGrav = "S" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) @; 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (! EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!" @ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail @ 15,8 SAY "Deseja Gravar?...:" GET cGrav PICTURE "@!" VALID (cGrav $ "SN") READ IF LASTKEY( ) = 27 EXIT ENDIF IF cGrav = "S" APPEND BLANK REPLACE CODIGO WITH nCodigo, NOME WITH cNome, ENDERECO WITH cEnd REPLACE ANIVER WITH dAniver, FONE WITH cFone, EMAIL WITH cEmail nCodigo = nCodigo + 1 ENDIF ENDDO CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Digite as informaes, se no campo "Deseja Gravar?" voc informar "S", todos os dados digitados sero gravados no arquivo AGENDA.DBF. Faa vrias incluses para testar o programa, e anote as informaes que forem gravadas, principalmente os campo "Cdigo", para facilitar as pesquisas e alteraes que faremos nos prximos exerccios. Para sair do programa pressione a tecla ESC. Comandos utilizados: Apenas os novos comandos sero descritos. SELECT O comando SELECT usado para selecionar uma rea de trabalho onde ser aberto um arquivo de dados. Referncias a reas de trabalho com o comando SELECT podem ser feitas atravs de nmeros, de 0 a 250. Para cada arquivo de dados aberto voc

ter que selecionar uma rea de trabalho diferente. rea de trabalho zero refere-se primeira rea de trabalho vazia. USE USE abre um arquivo de dados (.dbf), seu arquivo memo associado (.dbt), e opcionalmente ndices associados(.ntx) na rea corrente ou na prxima rea disponvel. Sintaxe: USE [ [INDEX ] [ALIAS ] Argumentos o nome do arquivo a ser aberto, o qual pode ser especificado literalmente ou como expresso caractere entre parnteses. INDEX especifica o(s) nome(s) de at 15 ndices a serem abertos na rea corrente. Cada ndice pode ser especificado literalmente ou como expresso caractere entre parnteses, sendo que o primeiro ndice da lista torna-se o ndice de controle. ALIAS o nome a ser associado rea de trabalho quando o arquivo de dados aberto. Se esta clusula no especificada, o alias assumido o nome do arquivo. No exemplo acima est sendo aberto o arquivo AGENDA.DBF, onde iremos gravar os dados digitados. FILE( ) FILE() uma funo de tratamento de ambiente utilizada para determinar se encontrado algum arquivo que corresponda a um padro de especificao de arquivo. Sintaxe: FIELE( ) Argumentos a especificao dos arquivos a verificar se existem. FILE() procura no diretrio especificado e em um path explicitamente especificado. Caso no seja especificado path, FILE() pesquisa no diretrio padro Clipper corrente e depois no path Clipper . Em nenhuma circunstncia o path DOS pesquisado. Observe tambm que a funo FILE() no reconhece arquivos de sistemas ou escondidos em sua pesquisa. FILE() retorna verdadeiro (.T.) caso haja algum arquivo que corresponda ao padro ; caso contrrio, ela retorna falso (.F.).; No exemplo acima foi utilizado antes da funo FILE( ) o operador ! que retorna o inverso lgico, isto , se a

funo FILE( ) encontrar o arquivo INDC1.NTX retornar verdadeiro (.T.), que alterado para o inverso falso (.F.) e vice-versa. INDEX ON...TO... Cria um arquivo de ndices que serve para ordenar o arquivo de dados (.DBF). Sintaxe INDEX ON TO Argumentos uma expresso que retorna o valor chave a ser colocado no ndice para cada registro na rea de trabalho corrente. pode ser do tipo caractere, data, lgico, ou numrico. O tamanho mximo da expresso da chave de indexao de 250 caracteres. TO especifica o nome do arquivo de ndices a ser criado. O nome do arquivo pode ser especificado literalmente ou por expresso caractere entre parnteses. Normalmente, a extenso de arquivo padro (.ntx). O comando INDEX ON cria um arquivo que contm um ndice dos registros do arquivo de dados corrente baseado em . Quando o arquivo de ndices usado, os registros do arquivo de dados aparecem na ordem da expresso chave, embora o ndice no altere a ordem fsica dos registros dentro do arquivo de dados. O comando INDEX ordenas as chaves de caractere de acordo com o valor ASCII de cada caractere dentro da cadeia, valores numricos em ordem numrica, ordem cronolgica d os valores de datas, considerando datas em branco como valores baixos, e valores lgicos classificados com valor verdadeiro (.T.) considerados como valores altos. No exemplo acima estamos indexando o arquivo pelo Cdigo. STR( ) Converte um valor numrico para uma cadeia de caracteres. Sintaxe STR(,[],[]) Argumentos o nmero que ser convertido para caractere. o tamanho da cadeia de caracteres a ser retornada incluindo dgitos decimais, ponto decimal, e sinal. a quantidade de casas decimais a serem retornadas.

SET INDEX TO O comando SET INDEX utilizado para abrir arquivos de ndices para o arquivo de dados corrente, este comando vai ordenar os registros do arquivo de dados de acordo com chave feita no comando INDEX ON... TO... SET COLOR TO Define cores de tela. Sintaxe SET COLOR TO [ [, ][, ][, ][, ]] Argumentos a cor utilizada para escrever em toda a tela do vdeo, incluindo a utilizao de todos os comandos e funes quando exibidas na tela. Isto inclui comandos como @...PROMPT, @...SAY, e ?; e funes como ACHOICE(), DBEDIT(), e MEMOEDIT(). a cor utilizada para configurar a exibio das barras luminosas. Este argumento influi sobre a barra luminosa de seleo, sobre os GETs com INTENSITY ON, o comando MENU TO, a funo DBEDIT(), e ACHOICE(). a cor utilizada para configurar a cor que ser colocada na rea em torno da tela de vdeo, que inacessvel para a utilizao normal dos programas que escrevem algo na tela. Esta configurao somente funciona com adaptadores de vdeo do tipo CGA, mas nao com adaptadores EGA ou VGA. atualmente no suportada por mquinas nas quais a Nantucket no prov drivers apropriados. Esta configurao suportada somente para propsitos de compatibilidade. o par de cores utilizado para configurar uma determinada entrada de dados exibindo o GET corrente na cor de destaque definida, enquanto que os outros GETs so mostrados nesta cor. Observao: Ver Tabela de cores e atributos LASTKEY( ) Retorna o valor da ltima tecla pressionada no teclado. LASTKEY() retorna um nmero de -39 a 386 que identifica o valor INKEY() da ltima tecla extrada do buffer de teclado. No exemplo acima a funo LASTKEY( ) verifica se foi pressionada a tecla ESC que corresponde ao nmero 27.

APPEND BLANK Adiciona um registro vazio ao arquivo de dados corrente para que possamos gravar os dados digitados. APPEND BLANK adiciona um registro vazio no fim do arquivo corrente e o torna o registro corrente. Os novos valores de campos so inicializados em valores vazios para cada tipo de dado. A campos caractere so atribudos espaos, campos numricos so inicializados com zero, campos lgicos so inicializados com falso (.F.), e campos data so atribudos CTOD(""). REPLACE Grava nos campos do arquivo de dados os valores atribudos as variveis de memria. Sintaxe REPLACE WITH [, WITH ...] Argumentos o nome do campo do arquivo de dados qual ser atribudo novo valor. o valor a ser atribudo a . CLOSE DATABASE Fecha um conjunto especfico de arquivos. DATABASES Fecha todos os arquivos de dados abertos, memos e ndices em todas as reas, e libera filtros e relaes ativas. Pesquisando registros no arquivo de dados Para poder pesquisar os registros que foram gravados em um arquivo de dados necessrio que este arquivo esteja indexado, isto , tenha algum arquivo de ndice ativo junto com o arquivo de dados. Vamos montar um programa para pesquisar os registros do arquivo de dados AGENDA.DBF. Entre no EDIT e crie um arquivo com o nome de Exerc6.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;

CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigo = 0 cSai = "N" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @; 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigo,3,0) IF FOUND( ) @ 9,8 SAY "Nome..............: " + NOME @ 10,8 SAY "Endereo........: " + ENDERECO @ 11,8 SAY "Aniversrio.....: " + DTOC(ANIVER) @ 12,8 SAY "Telefone..........: " + FONE @ 13,8 SAY "E-mail..............: " + EMAIL ELSE TONE(400,3) @ 10,8 SAY "NO ENCONTRADO" ENDIF @ 15,8 SAY "Deseja Sair?...:" GET cSai PICTURE "@!" VALID (cSai $ "SN") READ IF cSai = "S" EXIT ENDIF ENDDO CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Digite o Cdigo dos registro que foram gravados

no exerccio anterior (espero que voc tenha anotado) para pesquisar estes registros. Depois digite um Cdigo que voc tem certeza que no existe no arquivo e observe a reao do programa. Comandos utilizados: Apenas os novos comandos sero descritos. GO Move o ponteiro de registro para um registro especfico no arquivo de dados. Sintaxe GO | BOTTOM | TOP Argumentos especifica o nmero do registro destino. BOTTOM especifica o ltimo registro na rea de trabalho corrente. TOP especifica o primeiro registro na rea de trabalho corrente. O comando GO posiciona o ponteiro num registro especificado na rea de trabalho corrente. O registro pode ser especificado atravs de seu nmero ou como registro incio ou fim do arquivo. Se a nova posio incio (TOP) e h um ndice ativo, o ponteiro de registros vai at o primeiro registro do ndice. Caso a nova posio seja fim (BOTTOM) e haja um ndice ativo, o ponteiro de registros vai para o ltimo registro do ndice. Antes de qualquer procura em um arquivo de dados indexado necessrio voltar para o primeiro registro do arquivo de dados. SEEK Pesquisa um ndice atravs de um valor chave especificado. Sintaxe SEEK Argumentos uma expresso qual a chave de indexao dever corresponder. O comando SEEK pesquisa o ndice de controle que comea com a primeira chave e continua at que seja encontrada correspondncia ou at que haja um valor chave maior do que o argumento de pesquisa. Caso haja correspondncia, o ponteiro de registro posicionado no nmero do registro encontrado no ndice. No exemplo acima, o comando SEEK procura nos registros gravados um que tenha o cdigo que voc digitou.

FOUND( ) Determina se a operao de pesquisa anterior foi bem sucedida. Sintaxe FOUND() --> lSucesso Retorno FOUND() retorna verdadeiro (.T.) se o ltimo comando de pesquisa foi bem sucedido; do contrrio, ela retorna falso (.F.). FOUND() uma funo de tratamento de banco de dados utilizada para determinar se uma operao de pesquisa (isto , FIND, LOCATE, CONTINUE, SEEK, SET RELATION) foi bem sucedida antes que o prximo passo no programa seja executado. TONE( ) Aciona o alto-falante por uma durao e freqncia especificadas. Sintaxe TONE(, ) Argumentos um valor numrico positivo que indica a freqncia do som a ser produzido. um valor numrico positivo que indica a durao do som. Alterando registros no arquivo de dados J fizemos vrias incluso de informaes no arquivo de dados nos exerccios anteriores, agora vamos alterar estes registros. Entre no EDIT e crie um arquivo com o nome de Exerc7.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA

IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigo = 0 cAlt = "N" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigo,3,0) IF !FOUND( ) TONE(400,3) @ 10,8 SAY "NO ENCONTRADO" LOOP ENDIF cNome = NOME cEnd = ENDERECO dAniver = ANIVER cFone = FONE cEmail = EMAIL @ 9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (! EMPTY(cNome)) @ 10,8 SAY "Endereo........:" GET cEnd PICTURE "@!" @ 11,8 SAY "Aniversrio.....:" GET dAniver PICTURE "@D" @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999" @ 13,8 SAY "E-mail..............:" GET cEmail @ 15,8 SAY "Alterar?...:" GET cAlt PICTURE "@!" VALID (cAlt $ "SN") READ IF cAlt = "S" REPLACE NOME WITH cNome, ENDERECO WITH cEnd REPLACE ANIVER WITH dAniver, FONE WITH cFone, EMAIL WITH cEmail ENDIF ENDDO CLOSE DATABASE

CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Digitando um cdigo j cadastrado o programa apresenta todos os campos para que voc possa fazer alguma alterao nos dados que foram gravados no arquivo. Para sair do programa pressione a tecla ESC na hora de digitar o "Cdigo". Comandos utilizados: Todos os comandos usados j foram vistos. Excluindo registros no arquivo de dados Vamos supor que voc brigou com um dos seus amigos e gostaria de excluir os seus dados da sua Agenda de Endereos. Para isto, temos que primeiro procurar qual o registro que queremos excluir e depois atravs de uma confirmao excluir o registro. Entre no EDIT e crie um arquivo com o nome de Exerc8.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T. nCodigo = 0 cExc = "N" cRec = "S" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "AGENDA DE ENDEREOS" @ 8,8 SAY "Cdigo...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0) READ IF LASTKEY( ) = 27

EXIT ENDIF GO TOP SEEK STR(nCodigo,3,0) IF !FOUND( ) TONE(400,3) @ 10,8 SAY "NO ENCONTRADO" LOOP ENDIF @ 9,8 SAY "Nome..............: " + NOME &mbsp; @ 10,8 SAY "Endereo........: " + ENDERECO @ 11,8 SAY "Aniversrio.....: " + DTOC(ANIVER) @ 12,8 SAY "Telefone..........: " + FONE @ 13,8 SAY "E-mail..............: " + EMAIL IF DELETED( ) TONE(400,3) @ 15,8 SAY "Registro j Excludo, Recuperar?...:" GET cRec PICT "!" VALID (cRec $ "SN") READ IF cRec = "S" RECALL ENDIF ELSE @ 15,8 SAY "Excluir Registro?...:" GET cExc PICTURE "@!" VALID (cExc $ "SN") READ IF cExc = "S" DELETE ENDIF ENDIF ENDDO PACK CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Agora digite o cdigo do registro que voc quer excluir e depois confirme a excluso. Observe que se voc informar o cdigo de algum registro j excludo o programa pergunta se voc quer recuperar este registro. Para sair do programa pressione a tecla ESC na hora de digitar o "Cdigo". Comandos utilizados: Apenas os novos comandos sero descritos.

DELETED( ) Esta funo retorna verdadeiro (.T.) se o registro corrente est marcado para para eliminao (se j foi excludo); caso contrrio, retornar falso (.F.). RECALL O comando RECALL recupera registros marcados para eliminao na rea de trabalho corrente. o inverso do comando DELETE. Um registro que foi recuperado pelo comando RECALL no ser mais excludo. DELETE Marca os registros para eliminao. Este comando vai marcar quais os registro que sero excludos futuramente pelo comando PACK. PACK Quando voc utiliza o comando PACK, todos os registros marcados para eliminao so removidos do arquivo de dados corrente, o espao fsico ocupado pelos registros eliminados recuperado, e todos os ndices ativos na rea de trabalho corrente so atualizados. Criando relatrios Para que voc obtenha informaes sobre os registros do arquivo de dados do programa AGENDA de uma forma mais abrangente, voc ter que criar um relatrio que fornea todas as informaes que voc necessita. importante antes de comear a criar o relatrio planejar o layout do relatrio, ou seja, quais informaes devem aparecer, qual ser a sua disposio no papel, qual ser o cabealho e rodap, que clculos sero realizados, nmero de linhas a serem impressas, etc. Entre no EDIT e crie um arquivo com o nome de Exerc9.prg e digite os comandos abaixo. CLEAR SET DATE BRITISH SET CENTURY ON SET CONFIRM ON SET DELETED ON BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176) SELECT 1 USE AGENDA IF !FILE("INDIC1.NTX") INDEX ON STR(CODIGO,3,0) TO INDIC1 ENDIF SET INDEX TO INDIC1 SET COLOR TO "R/W" @ 1,1,24,79 BOX BORDA DO WHILE .T.

nCodigoi = 0 nCodigof = 0 cImp = "N" SET COLOR TO "N/B" @ 4,4 CLEAR TO 21,76 @ 4,4 TO 21,76 DOUBLE @ 6,30 SAY "LISTA DE ENDEREOS" @ 8,8 SAY "Cdigo Inicial....:" GET nCodigoi PICTURE "999" VALID (nCodigoi>0) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigoi,3,0) IF !FOUND( ) TONE(400,3) @ 8,32 SAY "NO CADASTRADO" INKEY(0) LOOP ENDIF @ 8,32 SAY NOME @ 9,8 SAY "Cdigo Final......:" GET nCodigof PICTURE "999" VALID (nCodigof>=nCodigoi) READ IF LASTKEY( ) = 27 EXIT ENDIF GO TOP SEEK STR(nCodigof,3,0) IF !FOUND( ) TONE(400,3) @ 9,32 SAY "NO CADASTRADO" INKEY(0) LOOP ENDIF @ 9,32 SAY NOME @ 11,8 SAY "Confirma impresso?...:" GET cImp PICTURE "@!" VALID (cImp $ "SN") READ IF LASTKEY( ) = 27 EXIT ENDIF IF cImp = "S" DO WHILE .T. IF !ISPRINTER( ) TONE(400,3)

@ 13, 8 SAY "PREPARE A IMPRESSORA - Pressione qualquer tecla" tek=INKEY(0) IF tek=27 EXIT ENDIF LOOP ENDIF SET PRINTER TO LPT1 SET DEVICE TO PRINTER GO TOP SEEK STR(nCodigoi,3,0) vcab=.T. DO WHILE !EOF( ) IF CODIGO > nCodigof EXIT ENDIF IF vcab @ 00,00 SAY "NOME DA SUA EMPRESA" @ 01,00 SAY "AGENDA DE ENDERECO" @ 02,00 SAY REPLICATE("-",80) vcab = .F. ENDIF @ PROW( )+1,02 SAY "Codigo.......:" @ PROW( ) , 17 SAY CODIGO PICT "999" @ PROW( ) , 22 SAY "Nome..:" @ PROW( ) , 30 SAY NOME PICT "@!" @ PROW( )+1,02 SAY "Endereco......:" @ PROW( ) , 17 SAY ENDERECO PICT "@!" @ PROW( )+1,02 SAY "Aniversario..:" @ PROW( ) , 17 SAY ANIVER PICT "@D" @ PROW( ) , 29 SAY "Telefone..:" @ PROW( ) , 41 SAY FONE PICT "@R (999)999-9999" @ PROW( )+1,02 SAY "E-mail.......:" @ PROW( ) , 17 SAY EMAIL @ PROW( )+1,00 SAY REPLICATE("-",80) IF PROW( ) > 50 vcab = .T. ENDIF SKIP ENDDO EJECT SET DEVICE TO SCREEN SET PRINTER TO EXIT ENDDO ENDIF ENDDO

CLOSE DATABASE CLEAR RETURN Grave o arquivo, compile para ver se no h erros, linkedite para criar o arquivo executvel e depois execute o programa. Para filtrar apenas alguns registros do arquivo de dados solicitado o "Cdigo Inicial" e o "Cdigo Final", isto , sero impressos somente os registros que o cdigo esteja dentro deste intervalo. Comandos utilizados: Apenas os novos comandos sero descritos. SET DELETED Determina se os registros marcados sero considerados ou no no processamento. Sintaxe SET DELETED on | OFF Argumentos ON ignora registros marcados. ( como se eles no existissem.) OFF processa registros marcados. ISPRINTER( ) ISPRINTER() uma funo de tratamento de impressoras utilizada para determinar se a sada paralela (LPT1) est on-line e pronta para imprimir. Voc pode usar ISPRINTER() para certificar-se de que a impressora est pronta antes que voc inicie uma operao de impresso. SET PRINTER TO O comando SET PRINTER usado para redirecionar as sadas da impressora para outras sadas que no seja a padro. A sada padro a porta paralela LPT1, onde normalmente se conecta uma impressora paralela. SET DEVICE TO Envia os comandos @...SAY para tela ou impressora. Sintaxe SET DEVICE TO SCREEN | printer Argumentos SCREEN envia todos os comandos @...SAY tela e independe de como os comandos SET PRINTER e CONSOLE estejam ajustados.

PRINTER envia todos os comandos @...SAY ao dispositivo ajustado em SET PRINTER TO. Isto pode incluir um porta de impressora local, um spooler de rede, ou um arquivo. EOF( ) Determina se o final do arquivo foi atingido. Sintaxe EOF() Retorno EOF() retorna verdadeiro (.T.) quando feita uma tentativa de mover o ponteiro de registros para alm do ltimo registro lgico em um arquivo de banco de dados; do contrrio, ela retorna falso (.F.). Caso no haja nenhum arquivo de banco de dados aberto na rea de trabalho corrente, EOF() retorna falso (.F.). Se o arquivo de banco de dados corrente no possui registros, EOF() retorna verdadeiro (.T.). REPLICATE( ) Retorna uma cadeia de caracteres repetida uma quantidade de vezes especificada. Sintaxe REPLICATE(, ) Argumentos a cadeia de caracteres a ser repetida. a quantidade de vezes que ser repetido. PROW( ) Retorna a linha em que se encontra a cabea de impresso. Sintaxe PROW() Retorno PROW() retorna o nmero de linha corrente enviado impressora na forma de um valor numrico inteiro. A posio inicial de linha zero. SKIP Move o ponteiro de registro para uma nova posio no arquivo de dados.

Sintaxe SKIP [] Argumentos uma expresso numrica que especifica o nmero de registros para mover o ponteiro a partir da posio corrente. Um valor positivo especifica deslocamento do ponteiro para frente e valores negativos significam deslocamento do ponteiro para trs. SKIP especificado sem argumentos move o ponteiro 1 registro para frente. EJECT Avana a cabea da impressora para o comeo da prxima pgina. No exemplo est sendo usado o comando EJECT para avanar para uma nova pgina quando todos os registro do intervalo forem impressos. Principal | Dclip CliPHP xHarbour Serasa Bina Clipper/xHarbour VGID CD-rom PRWIN 2.3 Projetos | Clipper & xHarbour Download | CD Clipper Cursos xHarbour CD Clipper | Assessoria Portabilidade Assessoria no local Converso | Programas Free Programas | Ficha Tcnica CD Delphi

Poesias Fotos Contato Links Frum Outros Micro tutorial ensinando os macetes de colocar um programa funcionando em rede Por Wagner Nunes da Silva Passo 1 Usar a clausula Shared no comando use exemplo USE CLIENTE SHARED NEW ALIAS CLIENTE Shared quer dizer compartilhado, ou seja USAR CLIENTE COMPARTILHADO NOVO ALIAS CLIENTE

Passo 2 Muitas pessoas trabalham com registro deletados usando a clausula SET DELETED ON/OFF, outras usam o PACK sempre depois de uma excluso, isto demasiadamente lento e deve ser removido O comando SET DELETED ON/OFF especifica se os registro deletados faro ou no parte do processamento do sistema, assim que no fazem parte eles ficam como inexistentes no banco de dados, mesmo estado l. SET DELETED ON // Ignora registro deletados SET DELETED OFF // Processa registros deletados

Passo 3 Os registros devem ser trancados antes de qualquer alterao ou quando formos usar o comando delete, o comando PACK no mais ser usado uma vez que ele um comando que s funciona em modo mono-usurio, este comando em linux pode ser usado mesmo em banco compartilhados. A funo para trancar um registro RLOCK() e retorna verdadeiro caso o registro seja trancado e rotina para destravar um registro se chama DBUNLOCK(). Todo o registro travado deve ser destravado aps ter sido alterado/incluindo pois se outros usurios na rede tentarem acess-lo na rede no conseguiro. Duas rotinas para facilitar o trabalho function r_lock

do while (!rlock()) // espera o registro ser liberado na rede enddo return .t. function u_lock skip 0 dbunlock() commit