Вы находитесь на странице: 1из 779

Dinarte Inácio Kreutz

R
Reeffeerrêênncciiaass :: EEssttee ttrraabbaallhhoo ffooii ddeesseennvvoollvviiddoo aa ppaarrttiirr ddoo H
HEELLPP ddoo V
VFFPP 66
A
Auuttoorr :: D Diinnaarrttee IInnáácciioo K Krreeuuttzz // AAnnaalliissttaa ddee SSiisstteem
maass
EE--m maaiill :: mmoonnaalliissaa@ @bbeew wnneett..ccoom m..bbrr

http://www.visualscreen.hpg.com.br

IIMMPPO OR RTTA AN NTTEE :: EEssttaa aappoossttiillaa ttrraazz ooss ccoommaannddooss ddoo VViissuuaall FFooxxPPrroo,,
pprriinncciippaallmmeennttee aaqquueelleess qquuee ppooddeem m sseerr iim
meeddiiaattaam
meennttee aapplliiccaaddooss ppoorr
PPrrooggrraam
maaddoorreess qquuee eessttããoo m miiggrraannddoo ddoo C
CLLIIPPPPEER R..
COMANDOS E FUNÇÕES

RUN | !, comando

Executa programas ou comandos operacionais externos.

Sintaxe

RUN [/N [K]] ComandoMS-DOS | NomePrograma


– Ou –
! [/N [K]] ComandoMS-DOS | NomePrograma

Argumentos

ComandoMS-DOS Especifica o comando do MS-DOS a ser executado. Consulte a documentação


do MS-DOS para obter maiores informações sobre os comandos disponíveis.

NomePrograma Especifica o programa ou o aplicativo a ser executado. Poderá ser especificado um


programa ou aplicativo baseado no Windows ou no MS-DOS.

/N [K] Especifica NOWAIT. Inclua a letra N (não substitua N por um valor numérico nem inclua
K) para executar outro aplicativo do Windows.

Comentários

É possível emitir RUN de dentro da janela Comando ou de outro programa.

Importante Para utilizar RUN, você precisa ter o arquivo de sistema operacional
COMMAND.COM no diretório atual ou esse arquivo deverá estar localizado onde o parâmetro MS-
DOS COMSPEC possa encontrá-lo. Para obter maiores informações sobre COMSPEC, consulte a
documentação do MS-DOS.

Cuidado Não utilize RUN para executar programas de reorganização de disco, como o CHKDSK,
a partir do Visual FoxPro. Esses programas modificam o conteúdo do seu disco de maneira a
impedir o bom funcionamento do Visual FoxPro.

RUN e Visual FoxPro Quando RUN é utilizado para executar programas fora do Visual FoxPro,
ele pesquisa os programas de forma um pouco diferente do FoxPro para MS-DOS.

Se o programa especificado em RUN não possuir uma extensão, o Visual FoxPro procurará
primeiro, no caminho do MS-DOS, um arquivo PIF (Program Information File) com o nome que
você indicou. Esse arquivo permite a execução de um programa não Windows no Windows. Você
poderá especificar parâmetros para o programa, ou seja, se ele é executado em uma janela ou na tela
inteira, o total de memória alocado para o programa etc.

Se o PIF for encontrado, o programa nele especificado será executado com os parâmetros PIF. Caso
contrário, será feita uma procura no caminho do MS-DOS para encontrar um arquivo executável
com o nome que você indicar.
Quando um PIF não é encontrado, o Visual FoxPro utiliza o FOXRUN.PIF, um PIF instalado no
diretório do Visual FoxPro. O FOXRUN.PIF é configurado para executar o programa em uma
janela. É possível modificar o FOXRUN.PIF para que execute programas com outra configuração.

FOXRUN.PIF O FOXRUN.PIF permite a execução de programas e comandos do MS-DOS e do


Windows a partir do Visual FoxPro. O FOXRUN.PIF deve estar no mesmo diretório que VFP.EXE
no Visual FoxPro.

/N significa NOWAIT. Inclua a letra N (não substitua N por um valor numérico nem inclua K) para
executar outro aplicativo do Windows. Por exemplo, a instrução a seguir abre o acessório Mapa de
caracteres do Windows:

! /N CHARMAP.EXE

No exemplo a seguir, o Selecionador de cores é aberto no Painel de controle do Windows:

! /N CONTROL COLOR

Um aplicativo do Windows executado com RUN /N ou ! /N apresenta o mesmo comportamento que


quando aberto através do Gerenciador de Programas ou do Gerenciador de Arquivos. Você pode
alternar entre o aplicativo e o Visual FoxPro ou o FoxPro para Windows utilizando as operações
padrão do Windows.

Para especificar como o aplicativo do Windows será aberto, inclua um valor numérico opcional
imediatamente após /N. Não inclua espaços entre /N e o valor numérico. A tabela a seguir lista os
valores numéricos que podem ser incluídos e descreve o estado do aplicativo do Windows quando
ele é aberto.

Valor Atributos do aplicativo

1 Ativo e tamanho normal


2 Ativo e minimizado
3 Ativo e maximizado
4 Inativo e tamanho normal
7 Inativo e minimizado

Executando programas do MS-DOS no Visual FoxPro Como padrão, o FOXRUN.PIF executa o


programa do MS-DOS externo especificado em uma janela. Enquanto o programa ou comando do
MS-DOS é executado, o título da janela é Executar Comando do FoxPro. No Visual FoxPro, a
janela Executar Comando do FoxPro é fechada após a execução do comando ou do programa
externo.
Você pode utilizar o editor PIF do Windows para personalizar o FOXRUN.PIF. O PIF pode ser
editado para especificar se a janela Executar Comando do Visual FoxPro Inativo deve ser mantida
aberta ou fechada (padrão no Visual FoxPro) usando a caixa de verificação Fechar janela ao sair.
Também é possível abrir programas externos em uma tela inteira selecionando Tela inteira, Alocar
memória para o programa, etc.

Considerações de memória Como padrão, o FOXRUN.PIF aloca um mínimo de 256K de memória


para a execução de um comando ou programa externo. Se você não tiver 256K de memória
convencional livre, o Visual FoxPro exibirá uma mensagem de erro. Para corrigir tal mensagem,
experimente um ou mais dos procedimentos a seguir:

· Feche os aplicativos e arquivos para liberar memória adicional.


· Edite o FOXRUN.PIF para reduzir o total exigido de memória na caixa de texto KB
Requerido.

Se o comando externo exigir mais de 256K, o MS-DOS exibirá uma mensagem de erro na janela
Executar Comando do Visual FoxPro. Para corrigir tal erro, edite o FOXRUN.PIF para aumentar o
total de memória necessário na caixa de texto KB Requerido.

$, operador

Retorna verdadeiro (.T.) se uma expressão de caracteres estiver contida em outra expressão de
caracteres; caso contrário, retorna falso (.F.).

Sintaxe

cProcurarPor $ cProcurarEm

Tipos de retorno

Lógico

Argumentos

cProcurarPor Especifica a expressão procurada em cProcurarEm.

cProcurarEm Especifica a expressão procurada para ver se ela contém cProcurarPor.

Se cProcurarPor for localizado em cProcurarEm, $ retornará verdadeiro (.T.); caso contrário,


retornará falso (.F.). cProcurarPor e cProcurarEm podem ser variáveis do tipo Caractere ou
elementos de matriz, campos do tipo Caractere, literais de seqüência de caracteres ou campos
Memo de qualquer tamanho.

Os campos Memo podem ser manipulados como expressões de caracteres, campos em tabelas,
variáveis ou elementos de matriz. Por exemplo, se MEMO_FLD for um campo Memo, a linha
abaixo será aceitável:

LIST FOR 'FOX' $ UPPER(memo_fld)

Comentários

Se a expressão de caracteres não for localizada, será retornado falso (.F.). O operador $ considera
maiúsculas/minúsculas e não é otimizado por Rushmore.
%, operador

Retorna o resto (módulo) obtido pela divisão de uma expressão numérica por outra.

Sintaxe

nDividendo % nDivisor

Argumentos

nDividendo Especifica o dividendo (a expressão numérica que está sendo dividida). O número de
casas decimais em nDividendo determina o número de casas decimais no resultado.

nDivisor Especifica o divisor (a expressão numérica que divide o dividendo nDividendo). Se


nDivisor for positivo, será retornado um número positivo; se nDivisor for negativo, será retornado
um número negativo. nDivisor não pode ser zero.

Comentários

O operador de módulo (%) e MOD( ) retornam resultados idênticos.


O operador de módulo (%) é um operador aritmético. Outros operadores aritméticos são: + (adição),
- (subtração), * (multiplicação), / (divisão) e ^ (exponenciação). Quando esses operadores forem
combinados em uma expressão numérica, % terá a mesma precedência que * e /.

&&, comando

Indica o início de um comentário não-executável em uma linha de um arquivo de programa.

Sintaxe

&& [Comentários]

Argumentos

Comentários Indica que o texto que se segue é um comentário em uma linha. Por exemplo:

STORE (20*12) TO gnPayments && 20 anos de pagamentos mensais

A inserção de comentários em uma linha para denotar o fim dos comandos de programação
estruturada IF ... ENDIF, DO e FOR ... ENDFOR melhora consideravelmente a legibilidade dos
programas.

Comentários

Coloque um ponto-e-vírgula (;) no final de cada linha de comentário que continue na linha seguinte.
Não é possível colocar && e um comentário depois do ponto-e-vírgula utilizado para continuar uma
linha de comando em uma linha adicional.

*, comando

Indica o início de uma linha de comentário não-executável em um arquivo de programa.

Sintaxe

* [Comentários]

Argumentos

Comentários Especifica o comentário na linha de comentário. Por exemplo:

* Isto é um comentário
Comentários

Coloque um ponto-e-vírgula (;) no final de cada linha de comentário que continue na próxima linha.

@ ... CLEAR, comando

Limpa uma parte da janela principal do Visual FoxPro ou de uma janela definida pelo usuário.

Sintaxe

@ nLinha1, nColuna1 [CLEAR | CLEAR TO nLinha2, nColuna2]

Argumentos

@ nLinha1, nColuna1 CLEAR Limpa uma área retangular cujo canto superior esquerdo começa
em nLinha1 e nColuna1 e continua até o canto inferior direito da janela principal do Visual FoxPro
ou de uma janela definida pelo usuário.

CLEAR TO nLinha2, nColuna2 Limpa uma área retangular cujo canto superior esquerdo está em
nLinha1 e nColuna1 e cujo canto inferior direito está em nLinha2 e nColuna2.

Comentários

Se CLEAR ou CLEAR TO forem omitidos, o Visual FoxPro limpará nLinha1 da nColuna1 até o
final da linha.

@ ... FILL, exemplo do comando

O exemplo a seguir limpa a janela principal do Visual FoxPro e preenche uma área com uma cor.

ACTIVATE SCREEN
CLEAR
@ 4,1 FILL TO 10, 8 COLOR GR+/B

@ ... SCROLL, comando

Move uma área da janela principal do Visual FoxPro ou uma janela definida pelo usuário para cima,
para baixo, para a esquerda ou para a direita.

Sintaxe

@ nLinha1, nColuna1 TO nLinha2, nColuna2 SCROLL


[UP | DOWN | LEFT | RIGHT]
[BY nQuantidadeMovida]

Argumentos

@ nLinha1, nColuna1 TO nLinha2, nColuna2 SCROLL Move uma área retangular cujo canto
superior esquerdo se encontra em nLinha1, nColuna1 e o canto inferior direito em nLinha2,
nColuna2.

UP | DOWN | LEFT | RIGHT Especifica a direção na qual a área retangular será movida. Se uma
cláusula de direção for omitida, a área será movida para cima.

BY nQuantidadeMovida Especifica o número de linhas ou colunas que a área retangular será


movida. Se BY nQuantidadeMovida for omitido, a região será movida uma linha ou coluna.

\ | \\, comando

Imprime ou exibe linhas de texto.

Sintaxe

\LinhaTexto
– Ou –
\\LinhaTexto

Argumentos

\LinhaTexto Quando você utiliza \, a linha de texto é precedida por um retorno de carro e uma
alimentação de linha.

\\LinhaTexto Quando você utiliza \\, a linha de texto não é precedida por um retorno de carro e
uma alimentação de linha.

Qualquer espaço antes de \ e \\ não é incluído na linha de saída, mas os espaços após \ e \\ são
incluídos.

Você pode incorporar uma expressão à linha de texto. Se a expressão estiver entre delimitadores de
mesclagem de textos (<< >>, como padrão) e SET TEXTMERGE estiver ativado (ON), a
expressão será avaliada e seu valor será fornecido como texto.

Comentários

Os comandos \ e \\ facilitam a mesclagem de textos no Visual FoxPro. A mesclagem de textos


permite que você oriente a saída do texto para um arquivo para criar cartas-formulário ou
programas.
Utilize \ e \\ para orientar a saída de uma linha de texto para o atual arquivo de saída da mesclagem
de textos e para a tela. SET TEXTMERGE é utilizado para especificar o arquivo de saída da
mesclagem de textos. Se a mesclagem de textos não for direcionada a um arquivo, a linha de texto
será fornecida apenas para a janela principal do Visual FoxPro ou para a janela de saída ativa
definida pelo usuário. SET TEXTMERGE NOSHOW suprime a saída para a janela principal do
Visual FoxPro ou para a janela ativa definida pelo usuário.

\ | \\, exemplo do comando

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre tabela customer
SET TEXTMERGE ON
SET TEXTMERGE TO letter.txt
\<<CDOW(DATE( ))>>, <<CMONTH(DATE( ))>>
\\ <<DAY(DATE( ))>>, <<YEAR(DATE( ))>>
\
\
\Caro <<contact>>
\Texto adicional
\
\Grato,
\
\Companhia XYZ
CLOSE ALL
MODIFY FILE letter.txt NOEDIT

=, comando

Avalia uma ou mais expressões.

Sintaxe

= Expressão1 [, Expressão2 ...]

Argumentos

Expressão1 [, Expressão2 ...] Especifica a expressão ou as expressões avaliadas pelo comando =.

Comentários

O comando = avalia uma ou mais expressões, Expressão1, Expressão2 ... e descarta os valores de
retorno. Essa opção é particularmente útil quando uma função do Visual FoxPro ou uma função
definida pelo usuário tem um efeito desejado, mas não há necessidade de atribuir o valor de retorno
da função a uma variável, elemento de matriz ou campo.
Por exemplo, para ativar o modo de inserção, você pode emitir o comando:

= INSMODE(.T.)

INSMODE normalmente retorna um valor verdadeiro (.T.) ou falso (.F.). No exemplo acima, a
função é executada, mas o valor de retorno é descartado.

Se apenas uma expressão (Expressão1) for incluída, o sinal de igualdade será opcional.

Observação O sinal de igualdade (=) pode ser utilizado de duas formas não-relacionadas. Pode-se
utilizá-lo como um operador em expressões lógicas para fazer uma comparação ou para atribuir
valores a variáveis e a elementos de matriz. Nesses dois casos, o sinal de igualdade (=) é um
operador e não um comando.

ABS( ), função

Retorna o valor absoluto da expressão numérica especificada.

Sintaxe

ABS(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica a expressão numérica cujo valor absoluto a função ABS( ) retorna.

ABS( ), exemplo da função

? ABS(-45) && Exibe 45


? ABS(10-30) && Exibe 20
? ABS(30-10) && Exibe 20
STORE 40 TO gnNumber1
STORE 2 TO gnNumber2
? ABS(gnNumber2-gnNumber1) && Exibe 38

ACOS( ), função

Retorna o arco co-seno de uma expressão numérica especificada.

Sintaxe
ACOS(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica uma expressão numérica cujo arco co-seno a função ACOS( ) retorna. O
valor de nExpressão pode variar de –1 a +1. O valor retornado por ACOS( ) varia de 0 a pi
(3,141592). O número de casas decimais retornado por ACOS( ) é determinado por SET
DECIMALS.

Utilize RTOD( ) para converter radianos para graus.

Comentários

O arco co-seno é retornado em radianos.

ACOS( ), exemplo da função

CLEAR
? RTOD(ACOS(0)) && Exibe 90.00
STORE -1 to gnArcAngle
? RTOD(ACOS(gnArcAngle)) && Exibe 180.00
? RTOD(ACOS(SQRT(2)/2)) && Exibe 45.00
ACTIVATE SCREEN, comando

Envia toda a saída subseqüente para a janela principal do Visual FoxPro, em vez de enviar para a
janela definida pelo usuário que está ativa.

Sintaxe

ACTIVATE SCREEN

Comentários

Utilize o comando ACTIVATE WINDOW para direcionar a saída para uma janela definida pelo
usuário.

ACTIVATE WINDOW, comando

Exibe e ativa uma ou mais janelas definidas pelo usuário ou janelas do sistema do Visual FoxPro.

Sintaxe
ACTIVATE WINDOW NomeJanela1 [, NomeJanela2 ...]
| ALL
[IN [WINDOW] NomeJanela3 | IN SCREEN]
[BOTTOM | TOP | SAME]
[NOSHOW]

Argumentos

NomeJanela1 [, NomeJanela2 ...] Especifica o nome de cada janela a ser ativada. Separe os nomes
das janelas com vírgulas. No Visual FoxPro, você pode especificar o nome de uma barra de
ferramentas para ativar a janela. Consulte ” SHOW WINDOW” para obter uma lista de nomes das
barras de ferramentas do Visual FoxPro.

ALL Especifica que todas as janelas sejam ativadas. A última janela ativada é a janela de saída
ativa.

IN [WINDOW] NomeJanela3 Especifica o nome da janela pai dentro da qual a janela é colocada e
ativada. A janela ativada torna-se uma janela filho. A janela pai pode ter várias janelas filho. Uma
janela filho ativada dentro de uma janela pai não pode ser movida para fora. Caso a janela pai seja
movida, a janela filho será movida junto com ela.

Observação A janela pai deve estar visível para que qualquer uma de suas janelas filho fique
visível.

IN SCREEN Coloca e ativa uma janela na janela principal do Visual FoxPro. Uma janela pode
colocada em uma janela pai, incluindo-se IN WINDOW em DEFINE WINDOW quando a janela
for criada. A inclusão da cláusula IN SCREEN em ACTIVATE WINDOW substitui a cláusula IN
WINDOW em DEFINE WINDOW.

BOTTOM | TOP | SAME Especifica onde as janelas são ativadas em relação a outras janelas
anteriormente ativadas. Como padrão, uma janela torna-se a janela frontal quando é ativada. A
inclusão de BOTTOM coloca uma janela atrás de todas as outras janelas. TOP irá colocá-la na
frente de todas as outras. SAME ativa uma janela sem afetar o seu posicionamento.

NOSHOW Ativa e direciona a saída para uma janela sem exibir a janela.

Comentários

Janelas definidas pelo usuário são criadas com DEFINE WINDOW.

Quando uma janela é ativada, ela passa a ser a janela frontal e toda a saída é direcionada para ela. A
saída pode ser direcionada apenas para uma janela de cada vez. A janela permanece como a janela
de saída ativa até ser desativada ou liberada ou até que outra janela ou a janela principal do Visual
FoxPro seja ativada.

Os nomes de janelas definidas pelo usuário são exibidos na parte inferior do menu Janela. O nome
da janela ativa, definida pelo usuário, está selecionada com uma marca de verificação.

É possível colocar mais de uma janela ao mesmo tempo na janela principal do Visual FoxPro, mas a
saída será direcionada somente para a janela ativada por último. Quando mais de uma janela estiver
aberta, se a janela de saída ativa for desativada, ela será removida da janela principal do Visual
FoxPro e a saída subseqüente será enviada para outra janela. Caso nenhuma janela de saída esteja
ativa, a saída será direcionada para a janela principal do Visual FoxPro.

Para garantir que a saída seja direcionada para uma janela específica quando a janela de saída ativa
for desativada, você deve ativar explicitamente a janela para a qual deseja enviar a saída com o
comando ACTIVATE WINDOW.

Todas as janelas ativadas são exibidas até que o comando DEACTIVATE WINDOW ou HIDE
WINDOW seja executado para removê-las da tela. A emissão de qualquer um destes comandos
remove as janelas da tela, mas não da memória. Para exibir novamente as janelas, execute o
comando ACTIVATE WINDOW ou SHOW WINDOW.

Para remover janelas da tela e da memória, utilize CLEAR WINDOWS, RELEASE WINDOWS ou
CLEAR ALL. É necessário redefinir as janelas removidas da memória para colocá-las novamente
na janela principal do
Visual FoxPro.

Você pode utilizar ACTIVATE WINDOW para colocar as janelas do sistema na janela principal do
Visual FoxPro ou em uma janela pai.

As janelas do sistema a seguir podem ser abertas com ACTIVATE WINDOW:

· Comando
· Chamar pilha
· Sessão de dados
· De depuração
· Depurar saída
· Locais
· Rastrear
· Observar

Para ativar uma janela do sistema e/ou uma barra de ferramentas, coloque o Nome todo da janela do
sistema ou da barra de ferramentas entre aspas. Por exemplo, para ativar a janela de depuração
Chamar Pilha no Visual FoxPro, execute o comando a seguir:

ACTIVATE WINDOW “Chamar Pilha”

Utilize HIDE WINDOW ou RELEASE WINDOW para remover uma janela do sistema da janela
principal do Visual FoxPro ou de uma janela pai.

ACTIVATE WINDOW, exemplo do comando

O exemplo a seguir define e ativa uma janela denominada output, colocando-a na janela principal
do Visual FoxPro. O comando WAIT pausa a execução, a janela é oculta e, em seguida, reexibida.

CLEAR
DEFINE WINDOW output FROM 2,1 TO 13,75 TITLE 'Saída' ;
CLOSE FLOAT GROW SHADOW ZOOM
ACTIVATE WINDOW output
WAIT WINDOW 'Pressione qualquer tecla para ocultar a janela Saída'
HIDE WINDOW output
WAIT WINDOW 'Pressione qualquer tecla para exibir a janela Saída'
SHOW WINDOW output
WAIT WINDOW 'Pressione qualquer tecla para liberar a janela Saída'
RELEASE WINDOW output

ADATABASES( ), função

Coloca os nomes de todos os bancos de dados abertos e seus caminhos em uma matriz de variável.

Sintaxe

ADATABASES(NomeMatriz)

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz. Caso a matriz especificada não exista, o Visual FoxPro
irá criá-la automaticamente. Caso a matriz exista e não seja grande o suficiente para conter todas as
informações de banco de dados, o Visual FoxPro aumentará automaticamente o tamanho da matriz
para que comporte as informações. Caso a matriz seja maior do que o necessário, o Visual FoxPro
irá truncá-la. Caso a matriz exista e ADATABASES( ) retorne 0, porque não há bancos de dados
abertos, a matriz permanecerá inalterada. Caso a matriz não exista e ADATABASES( ) retorne 0, a
matriz não será criada.

Comentários

Os nomes de todos os bancos de dados abertos na sessão de dados atual são colocados em uma
matriz de variável.

A função ADATABASES( ) cria uma matriz bidimensional. A primeira coluna da matriz contém os
nomes dos bancos de dados abertos e a segunda coluna contém os caminhos dos bancos de dados.

ADATABASES( ) retorna o número de nomes de bancos de dados (linhas) na matriz. Caso nenhum
banco de dados esteja aberto, ADATABASES( ) irá retornar 0 e a matriz não será criada.

ADATABASES( ), exemplo da função

O exemplo a seguir abre o banco de dados testdata e, em seguida, utiliza ADATABASES( ) para
criar uma matriz denominada gaDatabase contendo os nomes de todos os bancos de dados abertos.

SET PATH TO (HOME( ) + 'samples\data\') && Define o caminho para o banco de dados
OPEN DATABASE testdata && Abre o banco de dados
CLEAR
? ADATABASES(gaDatabase) && Cria uma matriz de bancos de dados abertos
DISPLAY MEMORY LIKE gadatabase && Exibe o conteúdo da matriz
CLOSE DATABASES

ADD TABLE, comando

Adiciona uma tabela livre ao banco de dados atual.

Sintaxe

ADD TABLE NomeTabela | ?


[NAME NomeTabelaExtenso]

Argumentos

NomeTabela Especifica o nome da tabela que está sendo adicionada ao banco de dados.

? Exibe a caixa de diálogo Abrir, na qual você pode selecionar uma tabela a ser adicionada ao
banco de dados.

NAME NomeTabelaExtenso Especifica um nome extenso para a tabela. Nomes extensos podem
conter até 128 caracteres, podendo ser utilizados no lugar de nomes de arquivos reduzidos com
extensão .DBF.

Comentários

Depois que for adicionada ao banco de dados, você poderá executar as mesmas operações na tabela
assim como em qualquer outra tabela.

Uma vez adicionada ao banco de dados, a tabela não estará mais livre. No entanto, será possível
liberar qualquer tabela do banco de dados ao se executar REMOVE TABLE.

A tabela que está sendo adicionada:

· Deve ser um arquivo .DBF válido.


· Não pode ter o mesmo nome de uma tabela existente no banco de dados aberto, a menos
que seja atribuído à tabela um nome extenso único.
· Não pode existir em outro banco de dados. Utilize REMOVE TABLE para remover a tabela
do outro banco de dados.

O banco de dados ao qual a tabela está sendo adicionada não pode estar envolvido em uma
transação.

ADD TABLE, exemplo do comando

O exemplo a seguir cria dois bancos de dados denominados mydbc1 e mydbc2 e uma tabela
denominada table1. Ao ser criada, a tabela é adicionada a mydbc1. A tabela é então fechada e
removida de mydbc1. Em seguida, ADD TABLE é utilizado para adicionar a tabela a mydbc2.
RENAME TABLE é utilizado para mudar o nome da tabela de table1 para table2.
CREATE DATABASE mydbc1
CREATE DATABASE mydbc2
SET DATABASE TO mydbc1
CREATE TABLE table1 (cField1 C(10), n N(10)) && Adiciona tabela a mydbc1
CLOSE TABLES && Uma tabela deve estar fechada para ser removida de um banco de
dados
REMOVE TABLE table1
SET DATABASE TO mydbc2
ADD TABLE table1
RENAME TABLE table1 TO table2

ADEL( ), função

Exclui um elemento de uma matriz unidimensional ou uma linha, ou coluna de uma matriz
bidimensional.

Sintaxe

ADEL(NomeMatriz, nNúmeroElemento [, 2])

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica a matriz da qual a linha, coluna ou o elemento é excluído.

nNúmeroElemento Especifica o número do elemento, linha ou coluna a ser excluído da matriz.


Para excluir uma coluna da matriz, inclua o argumento opcional 2.

Para obter maiores informações sobre como fazer referência a elementos em uma matriz, consulte ”
DIMENSION”.

2 Exclui uma coluna da matriz.

Comentários

A exclusão de um elemento, linha ou coluna de uma matriz não altera o seu tamanho; em vez disso,
as linhas, colunas ou os elementos à direita são movidos em direção ao início da matriz e o último
elemento, linha ou coluna da matriz é definido como falso (.F.).

Caso o elemento, a linha ou coluna sejam excluídos com sucesso, retorna o número 1.

ADEL( ), exemplo da função


O exemplo a seguir cria e preenche uma matriz e, em seguida, procura por um determinado nome
de empresa que, se encontrado, será removido da matriz.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre tabela customer
SELECT company FROM customer ;
WHERE country = 'UK' ;
INTO ARRAY gaCompanies
gnCount = _TALLY
gcName = 'Seven Seas Imports'
CLEAR
DISPLAY MEMORY LIKE gaCompanies
gnPos = ASCAN(gaCompanies, gcName) && Procura pela empresa
IF gnPos != 0
* Empresa encontrada, remova-a da matriz
= ADEL(gaCompanies, gnPos)
gnCount = gnCount - 1
ENDIF

DISPLAY MEMORY LIKE gaCompanies

ADIR( ), função

Coloca informações sobre arquivos em uma matriz e, em seguida, retorna o número de arquivos.

Sintaxe

ADIR(NomeMatriz [, cEstruturaArquivo [, cAtributo]])

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz. Se a matriz incluída não existir, o Visual FoxPro irá
criá-la automaticamente. Se existir e não for suficientemente grande para conter todas as
informações, o Visual FoxPro aumentará, automaticamente, o seu tamanho para que comporte as
informações. Se a matriz for maior do que o necessário, o Visual FoxPro irá truncá-la. Se a matriz
existir e ADIR( ) retornar a 0 por não ter localizado nenhum arquivo correspondente, a matriz
permanecerá inalterada. Se não existir e ADIR( ) retornar a 0, a matriz não será criada.

A tabela a seguir descreve os conteúdos e tipos de dados de cada coluna da matriz:

Coluna Conteúdo da matriz Tipo de dados

1 Nomes dos arquivos Caractere


2 Tamanho dos arquivos Numérico
3 Datas da última modificação Data
4 Horário da última modificação Caractere
5 Atributos dos arquivos Caractere
A última coluna da matriz contém os atributos dos arquivos correspondentes. Cada atributo de
arquivo é expresso por uma letra e um arquivo pode ter mais de um atributo. A tabela abaixo indica
o atributo de arquivo que cada letra representa:

Letra Atributo

A Arquivo - leitura/gravação
H Oculto
R Somente para leitura
S Sistema
D Diretório ou pasta
cEstruturaArquivo Especifica uma estrutura de arquivo para que você possa armazenar
informações sobre arquivos com nomes ou extensões correspondentes a um critério de pesquisa. Por
exemplo, o critério pode ser todas as tabelas, todos os arquivos de texto, todos os arquivos com
nomes que começam pela letra A e assim por diante. Estas pesquisas gerais são feitas incluindo-se
os caracteres curinga * e ? em cEstruturaArquivo
. O ponto de interrogação representa um único caractere e o asterisco representa qualquer
quantidade de caracteres. Pode-se utilizar qualquer quantidade de caracteres curinga em qualquer
posição dentro da estrutura de arquivo.

Você pode especificar uma unidade e/ou diretório para pesquisar nomes de arquivo
correspondentes. Se a unidade e o diretório não forem especificados, o Visual FoxPro colocará as
informações sobre os arquivos do diretório atual na matriz.

cAtributo Especifica a inclusão de subdiretórios e arquivos ocultos ou do sistema.

cAtributo pode conter qualquer combinação de D, H e S. A inclusão de D retorna nomes de


subdiretórios do diretório atual, além dos nomes de arquivos correspondentes à estrutura de arquivo
especificado em cEstruturaArquivo. A inclusão de H retorna informações sobre arquivos ocultos
que correspondem à estrutura de arquivo especificada em cEstruturaArquivo. A inclusão de S
retorna informações sobre arquivos do sistema correspondentes à estrutura de arquivo especificada
em cEstruturaArquivo.

Inclua uma seqüência vazia em cEstruturaArquivo para retornar somente nomes de subdiretórios,
arquivos ocultos ou arquivos do sistema.

Comentários

Para cada arquivo, ADIR( ) coloca na matriz o nome, o tamanho, a data e o horário da última
modificação e os atributos do arquivo.

ADIR( ), exemplo da função

O exemplo a seguir utiliza ADIR( ) para criar uma matriz contendo informações de banco de dados.
Em seguida, os nomes dos bancos de dados são exibidos.

CLOSE DATABASES
SET PATH TO (HOME( ) + 'samples\data')

gnDbcnumber = ADIR(gaDatabase, '*.DBC') && Cria matriz

CLEAR
FOR nCount = 1 TO gnDbcnumber && Loop para número de bancos de dados
? gaDatabase(nCount,1) && Exibe nomes de bancos de dados
ENDFOR
SET PATH TO HOME( ) && Define caminho para diretório do Visual FoxPro

AELEMENT( ), função

Retorna o número de um elemento de matriz a partir dos índices do elemento.

Sintaxe

AELEMENT(NomeMatriz, nÍndiceLinha [, nÍndiceColuna])

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz cujo número do elemento você deseja retornar.

nÍndiceLinha Especifica o índice de linha. Se a matriz for unidimensional, AELEMENT( ) irá


retornar ao mesmo valor de nÍndiceLinha.

Se você incluir apenas nÍndiceLinha e ele for maior do que o número de linhas na matriz, o Visual
FoxPro exibirá uma mensagem de erro.

nÍndiceColuna Especifica o índice de coluna. Se a matriz for bidimensional, inclua nÍndiceLinha e


nÍndiceColuna.

Comentários

Você pode referir-se a um elemento de uma matriz bidimensional de duas maneiras. O primeiro
método utiliza dois índices para especificar a posição da linha e da coluna do elemento na matriz e o
segundo método utiliza o número de um único elemento. AELEMENT( ) retorna o número do
elemento quando fornecido com índices de linha e coluna de um elemento.

As funções do Visual FoxPro ADEL( ), ADIR( ), AFIELDS( ), AINS( ), ALEN( ), ASCAN( ),


ASORT( ) e ASUBSCRIPT( ) podem manipular matrizes bidimensionais e exigem que a referência
aos elementos seja feita pelo número do elemento. AELEMENT( ) facilita a conversão de índices
para um número de elemento para uso por meio dessas funções. Os índices de linha e coluna
correspondentes podem ser retornados de um número de elemento com ASUBSCRIPT( ).
O exemplo a seguir ilustra a criação de uma matriz com duas linhas e três colunas. DISPLAY
MEMORY exibe o conteúdo dos elementos da matriz listados na ordem dos números de elementos.

DIMENSION gaMyArray(2,3)
DISPLAY MEMORY LIKE gaMyArray
gaMyArray Pub A
( 1, 1) L .F. (elemento número 1)
( 1, 2) L .F. (elemento número 2)
( 1, 3) L .F. (elemento número 3)
( 2, 1) L .F. (elemento número 4)
( 2, 2) L .F. (elemento número 5)
( 2, 3) L .F. (elemento número 6)

Pode-se fazer referência a um elemento pelos seus índices ou pelo seu número de elemento. Os
comandos STORE ‘INVOICE’ TO gaMyArray(2, 1) e STORE ‘INVOICE’ TO gaMyArray(4)
armazenam a seqüência de caracteres INVOICE no mesmo elemento de matriz.

Em matrizes unidimensionais, o número do elemento é idêntico ao seu índice de linha única. Não é
necessário utilizar AELEMENT( ) com matrizes unidimensionais.

AERROR( ), função

Cria uma matriz de variável que contém informações sobre o erro mais recente do ODBC, OLE ou
Visual FoxPro.

Sintaxe

AERROR(NomeMatriz)

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz criada por AERROR( ).

Comentários

A função AERROR( ) cria uma matriz com seis colunas e retorna o número de linhas da matriz. O
tipo de erro ocorrido determina o número de linhas da matriz.

A tabela a seguir descreve o conteúdo de cada elemento quando ocorre um erro do Visual FoxPro.
Na ocorrência de um erro, a matriz conterá uma linha.

Número do elemento Descrição

1 Numérico. Contém o número do erro. Idêntico ao valor retornado por ERROR( ).


2 Caractere. O texto da mensagem de erro. Idêntico ao valor retornado por MESSAGE( ).
3 O valor nulo. No entanto, se o erro possuir um parâmetro de erro adicional, irá conter o
texto do parâmetro de erro. Idêntico ao valor retornado por SYS(2018).
4 O valor nulo. No entanto, quando apropriado, contém o número da área de trabalho em que
o erro ocorreu.
5 O valor nulo. No entanto, se um disparador falhar (erro 1539), irá conter um dos valores
numéricos abaixo:
1 - Erro no Disparador de inserção.
2 - Erro no Disparador de atualização.
3 - Erro no Disparador de exclusão.
6 O valor nulo.
7 O valor nulo.
A tabela a seguir descreve o conteúdo de cada elemento quando ocorrem os erros de OLE número
1427 ou 1429. Nestes casos, a matriz contém uma linha.

Número do elemento Descrição

1 Numérico. Contém 1427 ou 1429.


2 Caractere. O texto da mensagem de erro do Visual FoxPro.
3 Caractere. O texto da mensagem de erro de OLE.
4 Caractere. O nome do aplicativo (Microsoft Excel, por exemplo).
5 O valor nulo ou Caractere. Contém o nome do arquivo de Ajuda do aplicativo em que
podem ser encontradas maiores informações sobre o erro, se as informações estiverem disponíveis
no aplicativo; caso contrário, contém o valor nulo.
6 O valor nulo ou Caractere. Contém o identificador de contexto da Ajuda para o tópico
apropriado, se as informações estiverem disponíveis no aplicativo; caso contrário, contém o valor
nulo.
7 Numérico. Um número de exceção OLE 2.0.
A tabela a seguir descreve o conteúdo de cada elemento quando ocorre um erro do ODBC de
número 1526. Neste caso, a matriz contém duas ou mais linhas; uma linha para cada erro do ODBC.

Número do elemento Descrição

1 Numérico. Contém 1526.


2 Caractere. O texto da mensagem de erro.
3 Caractere. O texto da mensagem de erro do ODBC.
4 Caractere. O estado atual do ODBC SQL.
5 Numérico. O número do erro da fonte de dados do ODBC.
6 Numérico. O identificador de conexão do ODBC.
7 O valor nulo.

AERROR( ), exemplo da função

O exemplo a seguir utiliza ON ERROR para especificar uma rotina de manipulação de erros
denominada errhand. Um erro é gerado emitindo-se um comando com erro de ortografia (BRWS).
A rotina de manipulação de erros errhand utiliza AERROR( ) para criar uma matriz contendo
informações de erro e essa informação é, então, exibida.

ON ERROR DO errhand && errhand é o procedimento para manipular erros

BRWS && Causa um erro de sintaxe


ON ERROR && Restaura o manipulador de erros do sistema
PROCEDURE errhand
= AERROR(aErrorArray) && Dadas do erro mais recente
CLEAR
? 'O erro apresentou as seguintes informações' && Exibe mensagem
FOR n = 1 TO 7 && Exibe todos os elementos da matriz
? aErrorArray(n)
ENDFOR

AFIELDS( ), função

Coloca as informações sobre a estrutura da tabela atual em uma matriz e retorna o número de
campos da tabela.

Sintaxe

AFIELDS(NomeMatriz [, nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica uma matriz na qual são colocadas informações sobre a estrutura da tabela.
Se a matriz incluída em AFIELDS( ) não existir, o Visual FoxPro a criará automaticamente. Se
existir, mas não for grande o bastante para conter as informações retornadas por AFIELDS( ), o
tamanho da matriz é aumentado automaticamente para acomodar as informações.

nÁreaTrabalho Especifica a área de trabalho da tabela cujas informações de estrutura são


colocadas em uma matriz.

cAliasTabela Especifica o alias da tabela cujas informações de estrutura são colocadas em uma
matriz.

Se você omitir nÁreaTrabalho e cAliasTabela, as informações de estrutura colocadas em uma


matriz dirão respeito à tabela na área de trabalho selecionada atualmente.

A tabela a seguir descreve o que cada coluna da matriz contém e o tipo de dados da informação
armazenada em cada coluna. Uma linha é criada para cada campo da tabela.

Número da coluna Informação do campo Tipo de dados

1 Nome do campo Caractere


2 Tipo do campo:
C = Caractere
D = Data
L = Lógico
M = Memo
N = Numérico
F = Flutuante
I = Inteiro
B = Duplo
Y = Moeda
T = DataHora
G = Geral Caractere
3 Largura do campo Numérico
4 Casas decimais Numérico
5 Valor nulo permitido Lógico
6 Conversão de página de código não permitida Lógico
7 Regra de validação de campo Caractere
8 Texto de validação de campo Caractere
9 Valor padrão do campo Caractere
10 Regra de validação da tabela Caractere
11 Texto de validação da tabela Caractere
12 Nome de tabela extenso Caractere
13 Expressão Disparador de inserção Caractere
14 Expressão Disparador de atualização Caractere
15 Expressão Disparador de exclusão Caractere
16 Comentário da tabela Caractere

Comentários

AFIELDS( ) retorna o número de campos da tabela. A matriz contém 11 colunas e um número de


linhas igual ao número de campos da tabela.
Você pode utilizar COPY STRUCTURE EXTENDED para colocar informações similares em uma
tabela em vez de matriz.

AFIELDS( ), exemplo da função

O exemplo a seguir cria uma matriz denominada gaMyArray contendo informações sobre os
campos na tabela customer. Os nomes dos campos são exibidos.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre tabela customer

gnFieldcount = AFIELDS(gaMyArray) && Cria matriz


CLEAR
FOR nCount = 1 TO gnFieldcount
? gaMyArray(nCount,1) && Exibe nomes de campo
ENDFOR

AFONT( ), função

Coloca as informações sobre as fontes disponíveis em uma matriz.

Sintaxe
AFONT(NomeMatriz [, cNomeFonte [, nTamanhoFonte]])

Tipos de retorno

Lógico

Argumentos

NomeMatriz Especifica a matriz de variável em que são colocados os nomes de fontes disponíveis.
Se a matriz não for suficientemente grande para conter todas as fontes, o Visual FoxPro aumenta,
automaticamente, o tamanho da matriz. Se você especificar uma matriz bidimensional já existente,
o Visual FoxPro mudará a matriz para uma matriz unidimensional.

Se a matriz for criada com sucesso, AFONT( ) retornará verdadeiro (.T.); caso contrário, retornará
falso (.F.).

cNomeFonte Especifica uma fonte para a qual a informação será colocada na matriz.

Se a fonte que você especificar suportar apenas tamanhos de fonte discretos (8 pontos, 10 pontos,
...), os tamanhos serão armazenados na matriz e AFONT( ) retornará verdadeiro (.T.). Se a fonte
especificada for dimensionável (suportar valores fracionários de tamanho), a matriz terá um único
elemento contendo -1 e AFONT( ) retornará verdadeiro (T.).

Se a fonte que você especificar não estiver disponível, a matriz não será criada e AFONT( )
retornará falso (.F.).

nTamanhoFonte Especifica um tamanho para a fonte determinada em cNomeFonte.

Se o tamanho da fonte nTamanhoFonte estiver disponível para a fonte especificada em


nTamanhoFonte, a matriz terá um único elemento contendo um valor verdadeiro (.T.) e AFONT( )
retornará verdadeiro (.T.). Se o tamanho não estiver disponível para a fonte especificada, a matriz
não será criada e AFONT( ) retornará falso (.F.).

Comentários

AFONT( ) coloca os nomes de fontes disponíveis em uma matriz e também pode ser utilizada para
determinar os tamanhos possíveis de fontes ou se uma fonte é dimensionável. Utilize GETFONT( )
para exibir uma caixa de diálogo contendo as fontes disponíveis, seus tamanhos e estilos.

AFONT( ), exemplo de função

O exemplo a seguir utiliza AFONT( ) para criar uma matriz contendo os nomes de todas as fontes
disponíveis. O nome de cada fonte é exibido, juntamente com um exemplo da fonte. Se houver mais
de 10 fontes instaladas, somente as 10 primeiras serão exibidas.

CLEAR
=AFONT(gaFontArray) && Matriz contendo nomes de fonte
gnNumFonts = ALEN(gaFontArray) && Número de fontes
IF gnNumFonts > 10
gnNumFonts = 10 && Exibe primeiras 10 fontes
ENDIF

FOR nCount = 1 TO gnNumFonts


? ALLTRIM(gaFontArray(nCount)) && Exibe nome da fonte
?? ' Este é um exemplo de ' ;
+ ALLTRIM(gaFontArray(nCount)) FONT gaFontArray(nCount), 8
ENDFOR

AINS( ), função

Insere um elemento em uma matriz unidimensional ou uma linha ou coluna em uma matriz
bidimensional.

Sintaxe

AINS(NomeMatriz, nNúmeroElemento [, 2])

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz na qual o elemento é inserido.

nNúmeroElemento Especifica onde o novo elemento, linha ou coluna é inserido na matriz.

Para inserir um elemento em uma matriz unidimensional, inclua NomeMatriz e o elemento


nNúmeroElemento onde ocorre a inserção. O novo elemento é inserido imediatamente antes do
elemento nNúmeroElemento. Para inserir uma linha em uma matriz bidimensional, inclua
NomeMatriz e o número da linha nNúmeroElemento onde ocorre a inserção. A nova linha é
inserida imediatamente antes da linha nNúmeroElemento.

Para obter maiores informações sobre como fazer referência a um elemento de matriz através de
seus índices, consulte DIMENSION.

2 Insere uma coluna em uma matriz bidimensional. A nova coluna é inserida imediatamente antes
da coluna especificada com nNúmeroElemento.
Comentários

Inserir um elemento, linha ou coluna em uma matriz não altera o tamanho da matriz. Os elementos,
linhas ou colunas à direita são deslocados para o fim da matriz e seu o último elemento, linha ou
coluna é descartado. O elemento, linha ou coluna recém-inserido é inicializado com um valor falso
(.F.).

AINS( ) retornará 1 se o elemento, linha ou coluna for inserido com sucesso.

AINS( ), exemplo da função


O exemplo a seguir cria e preenche uma matriz com nomes de empresas e procura um nome de
empresa específico na matriz. Se não for encontrado, o nome ausente será adicionado à matriz.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
SELECT company FROM customer ;
WHERE country = 'Germany' ;
INTO ARRAY gaCompanies

gnCount = _TALLY
gcName = 'Seven Seas Imports'
CLEAR
DISPLAY MEMORY LIKE gaCompanies

IF ASCAN(gaCompanies, gcName) = 0 && Procura pela empresa


*** Empresa não encontrada-adicione-a ***
DIMENSION gaCompanies[gnCount+1,1]
= AINS(gaCompanies, gnCount+1)

gaCompanies[gnCount+1] = gcName
ENDIF
DISPLAY MEMORY LIKE gaCompanies

ALEN( ), função

Retorna o número de elementos, linhas ou colunas de uma matriz.

Sintaxe

ALEN(NomeMatriz [, nAtributoMatriz])

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz. Se você incluir apenas o nome da matriz, ALEN( )
retornará o número de elementos da matriz.

nAtributoMatriz Determina se ALEN( ) retorna o número de elementos, linhas ou colunas da


matriz, de acordo com os valores para nAtributoMatriz fornecidos a seguir:

0 Retorna o número de elementos da matriz. Omitir nAtributoMatriz equivale a especificar 0.


1 Retorna o número de linhas da matriz.
2 Retorna o número de colunas da matriz. Se a matriz for unidimensional, ALEN( ) retornará
0 (sem colunas).

ALEN( ), exemplo da função

O exemplo a seguir utiliza AFONT( ) para criar uma matriz contendo os nomes de todas as fontes
disponíveis. ALEN( ) é utilizado para determinar o número de linhas na matriz. O nome de cada
fonte é exibido, juntamente com um exemplo da fonte. Se houver mais de 10 fontes instaladas,
somente as 10 primeiras serão exibidas.

CLEAR
=AFONT(gaFontArray) && Matriz contendo nomes de fonte
gnNumFonts= ALEN(gaFontArray) && Número de fontes
IF gnNumFonts > 10
gnNumFonts = 10 && Exibe as primeiras 10 fontes
ENDIF

FOR nCount = 1 TO gnNumFonts


? ALLTRIM(gaFontArray(nCount)) && Exibe nome da fonte
?? ' Este é um exemplo da fonte ' ;
+ ALLTRIM(gaFontArray(nCount)) FONT gaFontArray(nCount), 8
ENDFOR

ALLTRIM( ), função

Remove os espaços em branco do início e do final da expressão de caracteres especificada e retorna


a expressão com os espaços removidos como uma seqüência de caracteres.

Sintaxe

ALLTRIM(cExpressão)

Tipos de retorno

Caractere

Argumentos

cExpressão Especifica a expressão de caracteres da qual serão retirados os espaços em branco


iniciais e finais.

Comentários

ALLTRIM( ) pode ser utilizado para assegurar que os espaços em branco serão removidos dos
dados inseridos pelo usuário.

ALLTRIM( ), exemplo da função


O exemplo a seguir utiliza AFONT( ) para criar uma matriz contendo os nomes de todas as fontes
disponíveis. ALLTRIM( ) é utilizada para remover espaços iniciais e finais dos nomes de fonte. O
nome de cada fonte com espaços removidos será exibido, juntamente com um exemplo da fonte. Se
mais de 10 fontes estiverem instaladas, somente as 10 primeiras serão exibidas.

CLEAR
=AFONT(gaFontArray) && Matriz contendo nomes de fonte
gnNumFonts= ALEN(gaFontArray) && Número de fontes
IF gnNumFonts > 10
gnNumFonts = 10 && Exibe 10 primeiras fontes
ENDIF

FOR nCount = 1 TO gnNumFonts


? ALLTRIM(gaFontArray(nCount)) && Exibe nome da fonte
?? ' Isto é um exemplo de ' ;
+ ALLTRIM(gaFontArray(nCount)) FONT gaFontArray(nCount), 8
ENDFOR

APPEND FROM ARRAY, comando

Adiciona à tabela atualmente selecionada um registro para cada linha de uma matriz e preenche
cada registro com dados da linha da matriz correspondente.

Sintaxe

APPEND FROM ARRAY NomeMatriz


[FOR lExpressão]
[FIELDS ListaCampos]

Argumentos

NomeMatriz Especifica o nome da matriz que contém os dados que devem ser copiados para os
novos registros. Novos registros são adicionados à tabela até que todas as linhas da matriz tenham
sido incluídas.

FOR lExpressão Especifica uma condição para a inclusão de registros da matriz. lExpressão deve
conter o nome de um campo de destino em sua expressão condicional.

Antes da inclusão de uma linha da matriz em um registro da tabela, o elemento de matriz


correspondente ao campo de destino especificado em lExpressão é verificado para ver se
corresponde à condição em lExpressão. Caso o elemento de matriz satisfaça a condição, será
incluído um registro.

Caso o elemento de matriz não satisfaça a condição, a linha da matriz não será incluída e a linha
seguinte será verificada para ver se corresponde à condição.

FIELDS ListaCampos Especifica que apenas os campos em ListaCampos serão atualizados a partir
da matriz. O primeiro campo da lista será atualizado com o conteúdo do primeiro elemento da
matriz, o segundo campo será atualizado com o segundo elemento, e assim sucessivamente.
Comentários

Campos dos tipos Memo e Geral são ignorados em APPEND FROM ARRAY. Quando uma tabela
é aberta para uso compartilhado, APPEND FROM ARRAY bloqueia o cabeçalho da tabela
enquanto os registros são adicionados.

Caso a matriz seja unidimensional, APPEND FROM ARRAY adicionará um registro à tabela. O
conteúdo do primeiro elemento da matriz preenche o primeiro campo do registro recém-adicionado,
o conteúdo do segundo elemento da matriz preenche o segundo campo do registro, e assim por
diante.

Caso o número de elementos da matriz unidimensional seja maior do que o número de campos da
tabela, os elementos adicionais serão ignorados. Caso o número de campos da tabela seja maior do
que o número de elementos da matriz, os campos adicionais serão inicializados com o valor vazio
padrão. A seguir, são apresentados os valores vazios padrão para cada tipo de campo:

Tipo de campo Valor padrão

Caractere Espaços
Numérico 0
Moeda 0
Flutuante 0
Inteiro 0
Duplo 0
Data Data vazia (ex.: CTOD(''))
DataHora DataHora vazia (ex.: CTOT(''))
Lógico Falso (.F.)
Memo Vazio (sem conteúdo)

Caso a matriz seja bidimensional, APPEND FROM ARRAY adicionará um registro à tabela para
cada linha da matriz. Por exemplo, caso a matriz tenha quatro linhas, quatro novos registros serão
incluídos na tabela.

O conteúdo da primeira coluna da matriz preenche o primeiro campo dos registros recém-
adicionados, a segunda coluna da matriz preenche o segundo campo dos novos registros, e assim
sucessivamente. Por exemplo, se a matriz tiver quatro linhas e três colunas, os elementos da
primeira coluna da matriz preencherão o primeiro campo de cada um dos quatro novos registros
incluídos na tabela.

Caso o número de colunas da matriz bidimensional seja maior do que o número de campos da
tabela, as colunas adicionais serão ignoradas. Caso o número de campos da tabela seja maior do que
o número de colunas da matriz, os campos adicionais serão inicializados com valores vazios.

APPEND FROM ARRAY pode preencher um campo, mesmo que o tipo de dado do elemento da
matriz correspondente não corresponda ao tipo de dado do campo, desde que os dados do elemento
de matriz sejam compatíveis com o tipo de dado do campo correspondente. Caso os dados não
sejam compatíveis, o campo será inicializado com um valor vazio.
Exemplo de incompatibilidade nos tipos de dados
Este exemplo cria uma tabela e, em seguida, utiliza APPEND FROM ARRAY para incluir um
registro na nova tabela.

LOCAL ARRAY aNewRec(3)

* Criar uma tabela


CREATE TABLE Test FREE (Object C(10), Color C(16), SqFt n(6,2))
SCATTER TO aNewRec BLANK && Cria uma nova matriz a partir da tabela
aNewRec[1]="Box" && Preenche a matriz
aNewRec[2]="Red"
aNewRec[3]=12.5
APPEND FROM ARRAY aNewRec && Adiciona o registro contendo conteúdo da matriz
&& à tabela

APPEND FROM, comando

Adiciona registros de outro arquivo no fim da tabela atualmente selecionada.

Sintaxe

APPEND FROM NomeArquivo | ?


[FIELDS ListaCampos]
[FIELDS ListaCampos]
[[TYPE] [DELIMITED [WITH Delimitador | WITH BLANK | WITH TAB]
| WITH CHARACTER Delimitador]
| DIF | FW2 | MOD | PDOX | RPD | SDF | SYLK
| WK1 | WK3 | WKS | WR1 | WRK | XLS | XL5]]
[AS nPáginaCódigo]

Argumentos

NomeArquivo Especifica o nome do arquivo a partir do qual deve ser feita a inclusão. Se você não
incluir uma extensão de nome de arquivo, será considerada uma tabela do Visual FoxPro e a
extensão padrão .DBF. Se a tabela de origem da inclusão for do Visual FoxPro, os registros dessa
tabela marcados para exclusão serão incluídos, desconsiderando a definição de SET DELETED.

? Exibe a caixa de diálogo Abrir, onde você pode selecionar uma tabela de origem para a inclusão.

FIELDS ListaCampos Especifica para quais campos serão incluídos dados.

FOR lExpressão Inclui um novo registro para cada registro da tabela selecionada atualmente para
o qual lExpressão resulte em verdadeiro (.T.). Os registros são incluídos até chegar ao fim desta
tabela. Se você omitir FOR, o arquivo de origem inteiro será incluído na tabela.

TYPE Especifica o tipo do arquivo a partir do qual está sendo feita a inclusão. Embora seja
necessário especificar um tipo de arquivo se o arquivo a partir do qual a inclusão estiver sendo feita
não for uma tabela do Visual FoxPro, não será necessário incluir a palavra-chave TYPE. É possível
fazer inclusões a partir de uma ampla variedade de tipos de arquivos diferentes, inclusive arquivos
de texto ASCII delimitados, onde você pode especificar um delimitador de campo.

Se o arquivo a partir do qual você está fazendo a inclusão não tiver a extensão padrão usual para
esse tipo de arquivo, o nome do arquivo deverá incluir a respectiva extensão. Por exemplo, as
planilhas do Microsoft Excel normalmente têm a extensão .XLS. Se a planilha do Excel a partir da
qual você está fazendo inclusões tiver uma extensão diferente da extensão .XLS esperada,
certifique-se de especificar essa extensão.

Observação Ao fazer inclusões a partir de uma planilha, os dados desta devem ser armazenados na
ordem principal das linhas e não na ordem principal das colunas. Isso permite que os dados da
planilha incluída correspondam à estrutura da tabela.

DELIMITED Especifica que o arquivo de origem dos dados a serem incluídos na tabela atual do
Visual FoxPro é delimitado. Um arquivo delimitado é um arquivo de texto ASCII em que cada
registro termina com um retorno de carro e uma alimentação de linha. Considera-se, como padrão,
que os conteúdos do arquivo estão separados um do outro por vírgulas (não inclua espaços extras
antes ou depois das vírgulas) e que os valores dos campos de caractere estão delimitados também
por aspas. Por exemplo:

"Smith",9999999,"TELEFONE"

Considera-se que a extensão de arquivo é .TXT para todos os arquivos delimitados.

Você poderá importar datas de arquivos delimitados se as datas estiverem no formato apropriado. O
formato de data assume o padrão mm/dd/aa. A inclusão da parte da data relativa ao século é
opcional. O Visual FoxPro importará uma data, como 12/25/95, que não inclui o século e irá
considerar que a data está no século XX. Os delimitadores de data podem ser qualquer caractere
não-numérico, exceto o delimitador que separa os campos no arquivo delimitado.

As datas em outros formatos poderão ser importadas se o seu formato corresponder a um formato de
data disponível em SET DATE. Para importar datas que não estão no formato padrão, emita SET
DATE com o formato de data correto antes de utilizar APPEND FROM. Para testar se um formato
de data poderá ser importado com sucesso, utilize-o com CTOD( ). Se a data for aceitável para
CTOD( ), ela será importada corretamente.

DELIMITED WITH Delimitador Indica que os campos de caractere estão delimitados por um
caractere diferente de aspas.

DELIMITED WITH BLANK Especifica arquivos que contêm campos separados por espaços em
vez de vírgulas.

DELIMITED WITH TAB Especifica arquivos que contêm campos separados por tabulações em
vez de vírgulas.

DELIMITED WITH CHARACTER Delimitador Especifica os arquivos que contêm campos


delimitados pelo caractere especificado com Delimitador. Se Delimitador for um ponto-e-vírgula (o
caractere usado no Visual FoxPro para indicar a continuação da linha de comando), coloque o
ponto-e-vírgula entre aspas. Você também pode especificar as palavras-chaves BLANK e TAB para
Delimitador.

A cláusula WITH Delimitador pode ser combinada com a cláusula WITH CHARACTER. Por
exemplo, o seguinte comando adiciona registros de um arquivo de texto com campos de caracteres
delimitados com sublinhados e todos os campos delimitados com asteriscos:

APPEND FROM mytxt.txt DELIMITADO COM _ ;


WITH CHARACTER *

DIF Inclua DIF para importar dados de um arquivo .DIF (Data Interchange Format) do VisiCalc.
Vetores (colunas) tornam-se campos da tabela selecionada atualmente e tuplas (linhas) tornam-se
registros. Considera-se que os nomes de arquivos DIF tenham a extensão .DIF.

FW2 Inclua FW2 para importar dados de um arquivo criado pelo Framework II. Considera-se que
os nomes de arquivos FW2 tenham a extensão .FW2.

MOD Inclua MOD para importar dados de um arquivo do Microsoft Multiplan versão 4.01. Os
arquivos MOD são criados pelo Microsoft Multiplan versão 4.01, e considera-se que tenham a
extensão .MOD.

PDOX Inclua PDOX para importar dados de um arquivo de banco de dados do Paradox versões
3.5 ou 4.0. Considera-se que os nomes de arquivos do Paradox tenham a extensão .DB.

RPD Inclua RPD para importar dados de um arquivo criado pelo RapidFile versão 1.2. Considera-
se que os nomes de arquivos do RapidFile tenham a extensão .RPD.

SDF Inclua SDF para importar dados de um arquivo System Data Format. Um arquivo SDF é um
arquivo de texto ASCII em que os registros têm um comprimento fixo e terminam com um retorno
de carro e uma alimentação de linha. Os campos não são delimitados. Considera-se que a extensão
de arquivos SDF seja .TXT.

SYLK Inclua SYLK para importar dados de um arquivo de formato SYLK (Symbolic Link) de
intercâmbio. Os arquivos SYLK são utilizados no Microsoft MultiPlan. As colunas do arquivo
SYLK tornam-se campos da tabela do Visual FoxPro, e as linhas tornam-se registros. Os nomes de
arquivos SYLK não têm extensão.

WK1 Inclua WK1 para importar dados de uma planilha do Lotus 1-2-3 versão 2.x. Cada coluna da
planilha torna-se um campo da tabela; cada linha da planilha torna-se um registro da tabela. Uma
extensão de nome de arquivo .WK1 é atribuída a uma planilha criada pelo Lotus 1-2-3 revisão 2.x.

WK3 Inclua WK3 para importar dados de uma planilha do Lotus 1-2-3. Cada coluna da planilha
torna-se um campo da tabela; cada linha da planilha torna-se um registro da tabela. Uma extensão
de nome de arquivo .WK3 é atribuída a uma planilha criada pelo Lotus 1-2-3 revisão 3.x.

WKS Inclua WKS para importar dados de uma planilha do Lotus 1-2-3 revisão 1-A. Cada coluna
da planilha torna-se um campo da tabela; cada linha da planilha torna-se um registro da tabela. Uma
extensão de nome de arquivo .WKS é atribuída a uma planilha criada pelo Lotus 1-2-3 revisão 1-A.
WR1 Inclua WR1 para importar dados de uma planilha do Lotus Symphony versão 1.1 ou 1.2.
Cada coluna da planilha torna-se um campo da tabela, e cada linha torna-se um registro. Uma
extensão de nome de arquivo .WR1 é atribuída a uma planilha criada pelo Symphony versões 1.1 ou
1.2.

WRK Inclua WRK para importar dados de uma planilha do Lotus Symphony versão 1.0. Cada
coluna da planilha torna-se um campo da tabela, e cada linha torna-se um registro. Uma extensão de
nome de arquivo .WRK é atribuída a uma planilha criada pelo Symphony versão 1.0.

XLS Inclua XLS para importar dados de uma planilha do Microsoft Excel. Cada coluna da
planilha torna-se um campo da tabela, e cada linha torna-se um registro. A extensão .XLS é
atribuída a nomes de arquivos de planilha criados pelo Microsoft Excel.

XL5 Inclua XL5 para importar dados do Microsoft Excel versão 5.0. As colunas da planilha se
tornam campos da tabela, e as linhas tornam-se registros. Os arquivos de planilha criados no
Microsoft Excel têm a extensão .XLS.

AS nPáginaCódigo Especifica a página de código da tabela ou arquivo de origem. O Visual


FoxPro copia o conteúdo da tabela ou arquivo de origem e, à medida que copia os dados, converte-
os automaticamente na página de código da tabela atual.

Se você especificar um valor para nPáginaCódigo que não seja suportado, o Visual FoxPro irá gerar
uma mensagem de erro. Pode-se utilizar GETCP( ) como nPáginaCódigo para exibir a caixa de
diálogo Página de código, que permite especificar uma página de código para a tabela ou arquivo
incluído.

Se AS nPáginaCódigo for omitido e o Visual FoxPro não conseguir determinar a página de código
da tabela ou arquivo de origem, ele copiará o conteúdo dessa tabela ou arquivo e, à medida que
copia os dados, irá convertê-los automaticamente na página de código atual do Visual FoxPro. Se
SET CPDIALOG estiver ativado (ON), a tabela na área de trabalho atualmente selecionada será
marcada com uma página de código. Caso você esteja fazendo a inclusão a partir de uma tabela que
não esteja marcada com uma página de código, a caixa de diálogo Página de código será exibida,
permitindo que você selecione a página de código da tabela a partir da qual está fazendo a inclusão.
A página de código atual do Visual FoxPro pode ser determinada com CPCURRENT( ).

Se AS nPáginaCódigo for omitido e o Visual FoxPro conseguir determinar a página de código da


tabela ou do arquivo que está sendo incluído, ele copiará o conteúdo da tabela ou do arquivo
incluído e, à medida que copia os dados, irá convertê-los automaticamente na página de código da
tabela atualmente selecionada.

Se nPáginaCódigo for 0, o Visual FoxPro irá considerar que a página de código da tabela ou do
arquivo que está sendo incluído é igual ao da tabela atualmente selecionada e não será feita
nenhuma conversão para a página de código atual do Visual FoxPro.

Comentários

Se o arquivo do qual se faz a inclusão for uma tabela criada pelo Visual FoxPro ou por uma versão
anterior do FoxPro, será considerada uma extensão .DBF. Se a tabela criada pelo Visual FoxPro ou
por uma versão anterior do FoxPro não tiver a extensão .DBF, você deverá especificar a extensão.
Caso o arquivo não seja uma tabela criada pelo Visual FoxPro ou por uma versão anterior do
FoxPro, você deverá especificar o tipo de arquivo a partir do qual está fazendo a inclusão.
Antes de fazer uma inclusão a partir de uma tabela criada no dBASE IV ou no dBASE V que
contenha um campo Memo, você deve abrir a tabela no Visual FoxPro com USE. Quando aparecer
a opção para converter o arquivo, selecione Sim.

Se você fizer a inclusão a partir de uma tabela criada pelo Visual FoxPro ou por uma versão anterior
do FoxPro, essa tabela poderá ser aberta em uma outra área de trabalho. Os registros marcados para
exclusão nessa tabela serão desmarcados após a sua inclusão.

APPEND FROM, exemplo do comando

No exemplo a seguir, a tabela customer é aberta, sua estrutura é copiada para uma tabela
denominada backup, e backup é aberta. Em seguida, o Visual FoxPro inclui todos os registros da
Finlândia da tabela customer. Estes registros são copiados para um novo arquivo delimitado
denominado TEMP.TXT.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
COPY STRUCTURE TO backup
USE backup
APPEND FROM customer FOR country = 'Finlândia'
COPY TO temp TYPE DELIMITED
MODIFY FILE temp.txt
USE
DELETE FILE backup.dbf
DELETE FILE temp.txt

APPEND MEMO, comando

Copia o conteúdo de um arquivo texto para um campo Memo.

Sintaxe

APPEND MEMO NomeCampoMemo FROM NomeArquivo


[OVERWRITE] [AS nPáginaCódigo]

Argumentos

NomeCampoMemo Especifica o nome do campo Memo no qual o arquivo é incluído.

FROM NomeArquivo Especifica o arquivo texto cujo conteúdo é copiado para o campo Memo.
Você deve incluir o nome do arquivo texto inteiro, inclusive a extensão.

OVERWRITE Substitui o conteúdo atual do campo Memo pelo conteúdo do arquivo.

AS nPáginaCódigo Especifica a página de código do arquivo texto copiado para o campo Memo.
O Visual FoxPro copia o conteúdo do arquivo texto e, à medida que copia os dados para o campo
Memo, converte-os automaticamente da página de código especificada para a página de código da
tabela que contém o campo Memo. Se a tabela que contém o campo Memo não estiver marcada
com uma página de código, o Visual FoxPro converterá automaticamente os dados da página de
código especificada para a página de código atual do Visual FoxPro.

Se você especificar um valor para nPáginaCódigo que não seja suportado, o Visual FoxPro irá gerar
uma mensagem de erro. Você pode utilizar GETCP( ) em nPáginaCódigo para exibir a caixa de
diálogo Página de código, que permite especificar uma página de código para a tabela ou o arquivo
incluído.

Se você omitir a cláusula AS nPáginaCódigo ou especificar 0 para nPáginaCódigo, não haverá


nenhuma conversão de página de código no arquivo texto.

Comentários

Todo o conteúdo do arquivo texto será incluído no conteúdo do campo Memo especificado no
registro atual se a opção Overwrite for omitida.

APPEND MEMO, exemplo do comando

No exemplo a seguir, os conteúdos do campo Memo notes são copiados para um arquivo
denominado TEST.TXT. TEST.TXT e incluídos no conteúdo do campo Memo. Finalmente, os
conteúdos de TEST.TXT substituem o conteúdo atual do campo Memo.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE employee && Abre a tabela Employee
WAIT WINDOW 'Observações de funcionários no campo Memo - pressione ESC' NOWAIT
MODIFY MEMO notes NOEDIT && Abre o campo Memo notes
COPY MEMO notes TO test.txt && Cria o arquivo de teste a partir do campo Memo
WAIT WINDOW 'Arquivos texto TEST.TXT - pressione ESC' NOWAIT
MODIFY FILE test.txt NOEDIT && Abre o arquivo texto
WAIT WINDOW 'Observações de funcionários agora acrescentadas- pressione ESC' NOWAIT

APPEND MEMO notes FROM test.txt && Adiciona conteúdo do arquivo texto
MODIFY MEMO notes NOEDIT && Exibe campo Memo novamente
WAIT WINDOW 'Sobrescreve observações de funcionário- pressione ESC' NOWAIT
APPEND MEMO notes FROM test.txt OVERWRITE && Substitui notes
MODIFY MEMO notes NOEDIT NOWAIT
DELETE FILE test.txt

APPEND PROCEDURES, comando

Inclui procedimentos armazenados em um arquivo texto nos procedimentos armazenados no banco


de dados atual.

Sintaxe

APPEND PROCEDURES FROM NomeArquivo


[AS nPáginaCódigo] [OVERWRITE]
Argumentos

NomeArquivo Especifica o nome de um arquivo texto a partir do qual os procedimentos


armazenados são incluídos.

AS nPáginaCódigo Especifica a página de código do arquivo texto a partir do qual os


procedimentos armazenados são incluídos. O Visual FoxPro copia o conteúdo do arquivo texto e, ao
fazer isso, converte-o automaticamente na página de código especificada.

Se você especificar um valor para nPáginaCódigo que não seja suportado, o Visual FoxPro irá gerar
uma mensagem de erro. Pode-se utilizar GETCP( ) em nPáginaCódigo
para exibir a caixa de diálogo Página de código, que permite especificar uma página de código para
o arquivo texto a partir do qual os procedimentos armazenados são incluídos.

Se você omitir AS nPáginaCódigo, o Visual FoxPro copiará o conteúdo do arquivo texto a partir do
qual os procedimentos armazenados são incluídos e, ao fazer isso, irá convertê-lo automaticamente
na página de código atual do Visual FoxPro. Para determinar a página de código atual do Visual
FoxPro, utilize CPCURRENT( ).

Se nPáginaCódigo for 0, o Visual FoxPro irá considerar que a página de código do arquivo texto, a
partir do qual os procedimentos armazenados são incluídos, é a mesma página de código do banco
de dados atual, não ocorrendo nenhuma conversão para a página de código atual do Visual FoxPro.

OVERWRITE Especifica que os procedimentos atuais armazenados no banco de dados são


sobrescritos pelos do arquivo texto. Se você omitir OVERWRITE, os procedimentos atuais
armazenados no banco de dados não serão sobrescritos e os procedimentos armazenados no arquivo
texto serão incluídos nos procedimentos já armazenados.

Comentários

Utilize o comando APPEND PROCEDURES para modificar procedimentos armazenados em um


banco de dados utilizando a linguagem de programação. Um banco de dados deverá estar aberto e
ativo quando APPEND PROCEDURES for emitido; caso contrário, o Visual FoxPro irá gerar uma
mensagem de erro.

APPEND PROCEDURES, exemplo do comando

O exemplo a seguir abre o banco de dados testdata. Uma tabela temporária, denominada
mytablecom um único campo Memo, é criada; e REPLACE é utilizado para colocar um
procedimento armazenado denominado MyProcedure no campo Memo. COPY MEMO é utilizado
para criar um arquivo texto temporário denominado MYTEMP.TXT, que contém o conteúdo do
campo Memo.
APPEND PROCEDURES é utilizado para incluir o procedimento armazenado do arquivo texto
temporário no banco de dados. DISPLAY PROCEDURES exibe os procedimentos armazenados no
banco de dados e, em seguida, a tabela e o arquivo texto temporários são apagados.

Observação: Para exibir ou editar procedimentos armazenados por meio da interface do usuário,
utilize o Criador de bancos de dados.

CLOSE DATABASES
* Abre o banco de dados testdata
OPEN DATABASE SYS(2004)+"\samples\data\testdata"

* Cria uma tabela livre, temporária com um campo Memo denominado mProcedure
CREATE TABLE mytable FREE (mProcedure M)
APPEND BLANK && Adiciona um registro em branco a mytable

* Adiciona o comando PROCEDURE, nome e retorno de carro /alimentação de linha ao


* campo Memo
REPLACE mProcedure WITH "PROCEDURE MyProcedure" + CHR(13) + CHR(10)

* Copia o conteúdo do campo Memo para um arquivo temporário

COPY MEMO mProcedure TO mytemp.txt


USE && Fecha a tabela temporária

APPEND PROCEDURES FROM mytemp.txt && Copia o procedimento para o banco de dados
CLEAR

* Exibe os procedimentos associados com o banco de dados atual


DISPLAY PROCEDURES
DELETE FILE mytable.dbf && Apaga a tabela temporária
DELETE FILE mytable.fpt && Apaga o arquivo memo da tabela temporária
DELETE FILE mytemp.txt && Apaga o arquivo texto temporário

APPEND, comando

Adiciona um ou mais registros novos ao fim de uma tabela.

Sintaxe

APPEND [BLANK]
[IN nÁreaTrabalho | cAliasTabela]
[NOMENU]

Argumentos

BLANK Adiciona um registro em branco ao fim da tabela atual. O Visual FoxPro não abre uma
janela de edição quando você emite APPEND BLANK.

Você pode editar o novo registro com BROWSE, CHANGE ou EDIT.

IN nÁreaTrabalho Especifica a área de trabalho da tabela na qual um novo registro será incluído.

IN cAliasTabela Especifica o alias da tabela na qual um novo registro será incluído.


Se você omitir nÁreaTrabalho e cAliasTabela, um novo registro será incluído na tabela na área de
trabalho selecionada no momento. Se você emitir APPEND, um registro em branco será adicionado
à tabela especificada com nÁreaTrabalho ou cAliasTabela e a tabela será automaticamente
selecionada. Se você emitir APPEND BLANK, um registro em branco será adicionado à tabela
especificada com nÁreaTrabalho ou cAliasTabela e a tabela não será selecionada.

NOMENU Especifica que o título do menu Tabela será removido da barra de menus do sistema,
evitando alterações no formato da janela de edição.

Comentários

Quando você emite APPEND ou APPEND BLANK e uma tabela não está aberta na área de
trabalho selecionada no momento, a caixa de diálogo Abrir é exibida, de forma que você possa
escolher uma tabela na qual inclua registros.

APPEND abre uma janela de edição para que você possa fornecer dados a um ou mais novos
registros. Quando você adiciona um novo registro, o Visual FoxPro atualiza todos os índices
abertos.

APPEND, exemplo do comando

O exemplo a seguir utiliza APPEND BLANK para criar uma tabela com 10 registros contendo
valores aleatórios e, em seguida, exibe os valores máximo e mínimo na tabela.

CLOSE DATABASES
CREATE TABLE Random (cValue N(3))
FOR nItem = 1 TO 10 && Inclui 10 registros
APPEND BLANK
REPLACE cValue WITH 1 + 100 * RAND( ) && Insere valores aleatórios
ENDFOR

CLEAR
LIST && Exibe os valores
gnMaximum = 1 && Inicializa valor mínimo
gnMinimum = 100 && Inicializa valor máximo
SCAN
gnMinimum = MIN(gnMinimum, cValue)
gnMaximum = MAX(gnMaximum, cValue)
ENDSCAN
? 'O valor mínimo é: ', gnMinimum && Exibe valor mínimo
? 'O valor máximo é: ', gnMaximum && Exibe valor máximo

APRINTERS( ), função

Coloca os nomes das impressoras atualmente instaladas no Gerenciador de Impressão do Windows


em uma matriz de memória.
Sintaxe

APRINTERS(NomeMatriz)

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz que contém os nomes das impressoras instaladas e suas
portas. Se a matriz incluída não existir, o Visual FoxPro irá criá-la automaticamente. Se a matriz
existir e não for grande o suficiente para conter todas as informações sobre as impressoras, o Visual
FoxPro aumentará automaticamente o tamanho da matriz para que comporte as informações. Caso a
matriz seja maior do que o necessário, o Visual FoxPro irá truncá-la. Caso a matriz exista e
APRINTERS( ) retorne 0, porque nenhuma impressora está instalada, a matriz permanecerá
inalterada. Se a matriz não existir e APRINTERS( ) retornar 0, a matriz não será criada.

Comentários

A função APRINTERS( ) cria uma matriz bidimensional. A primeira coluna da matriz contém os
nomes das impressoras atualmente instaladas e a segunda coluna contém as portas às quais as
impressoras estão conectadas.

APRINTERS( ) retorna o número de impressoras instaladas. Caso nenhuma impressora esteja


instalada, ela retornará 0.

O Visual FoxPro obtém os nomes das impressoras instaladas e suas portas no Windows. No
entanto, o Visual FoxPro não verifica se as impressoras estão de fato conectadas à máquina.

APRINTERS( ), exemplo da função

O exemplo a seguir utiliza APRINTERS( ) para criar uma matriz denominada gaPrinters que
contém os nomes e as portas das impressoras instaladas. Em seguida, as impressoras e suas portas
são exibidas. Se nenhuma impressora estiver instalada, será exibida uma mensagem.

IF APRINTERS(gaPrinters) > 0 && Se houver drivers de impressoras instalados


CLEAR && Limpa a janela principal do Visual FoxPro
DISPLAY MEMORY LIKE gaPrinters && Exibe as impressoras e portas
ELSE && Caso contrário, Nenhuma impressora instalada
WAIT WINDOW ' Nenhuma impressora instalada.'
ENDIF

ASC( ), função

Retorna o valor ANSI para o caractere mais à esquerda em uma expressão de caracteres.
Sintaxe

ASC(cExpressão)

Tipos de retorno

Numérico

Argumentos

cExpressão Especifica a expressão de caracteres que contém o caractere cujo valor ANSI é
retornado por ASC( ). Qualquer caractere após o primeiro caractere em cExpressão será ignorado
por ASC( ).

Comentários

ASC( ) retorna a posição do caractere na tabela de caracteres da página de código atual. Cada
caractere tem um valor ANSI exclusivo no intervalo de 0 a 255.

ASC( ), exemplo da função

O exemplo a seguir exibe os caracteres A a J e utiliza ASC( ) para exibir seus valores ANSI
correspondentes.

STORE 'ABCDEFGHIJ' TO gcANSI && 10 caracteres


CLEAR
FOR nCOUNT = 1 TO 10
? SUBSTR(gcANSI, nCount,1) && Exibe um caractere
?? ASC(SUBSTR(gcANSI, nCount)) && Exibe o valor ANSI
ENDFOR

ASCAN( ), função

Procura em uma matriz um elemento que contenha os mesmos dados e o mesmo tipo de dado de
uma expressão.

Sintaxe

ASCAN(NomeMatriz, eExpressão [, nElementoInicial [, nElementosProcurados]])

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz na qual será feita a procura.


eExpressão Especifica a expressão geral a ser procurada.

nElementoInicial Especifica o número do elemento em que a procura irá começar. O número do


elemento especificado será incluído na procura. Se você omitir nElementoInicial, a procura será
feita, como padrão, na matriz inteira.

nElementosProcurados Especifica o número de elementos em que será feita a procura. Se você


omitir nElementoInicial e nElementosProcurados, a procura terá início no primeiro elemento da
matriz e continuará até o último elemento.

Observação Você pode referir-se a um elemento de uma matriz de variável bidimensional de duas
maneiras. O primeiro método utiliza dois índices para especificar a posição do elemento na matriz
em termos de linha e coluna; o outro método utiliza um número de elemento. Esta função e outras
que manipulam matrizes bidimensionais exigem números de elementos (nElementoInicial e
nElementosProcurados). Utilize AELEMENT( ) para retornar o número do elemento a partir de
índices de linha e coluna em uma matriz bidimensional.

Comentários

Caso seja localizada uma correspondência, ASCAN( ) retornará o número do elemento que contém
a expressão. Caso contrário, ASCAN( ) retornará 0.

Os critérios para uma correspondência bem-sucedida de dados de caractere são determinados pela
definição de SET EXACT. Se SET EXACT estiver ativado (ON), um elemento deverá
corresponder ao caractere da expressão de procura e ter o mesmo comprimento. Caso SET EXACT
esteja desativado (OFF) e haja uma correspondência entre um elemento e a expressão de procura até
o final da expressão, a correspondência será bem-sucedida. Para obter maiores informações sobre
critérios de correspondência para seqüências de caracteres, consulte a tabela de comparação de
seqüências no tópico ” SET EXACT”.

ASCAN( ), exemplo da função

O exemplo a seguir cria e preenche uma matriz com nomes de empresa e depois utiliza ASCAN( )
para procurar determinado nome de empresa. Se o nome da empresa for localizado, será removido
da matriz.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
SELECT company FROM customer ;
WHERE country = 'UK' ;
INTO ARRAY gaCompanies
gnCount = _TALLY
gcName = 'Seven Seas Imports'
CLEAR
DISPLAY MEMORY LIKE gaCompanies*
gnPos = ASCAN(gaCompanies, gcName) && Procura pela empresa
IF gnPos != 0
*** Empresa encontrada, remova-a da matriz ***
= ADEL(gaCompanies, gnPos)
gnCount = gnCount - 1

ENDIF
DISPLAY MEMORY LIKE gaCompanies

ASIN( ), função

Retorna em radianos o arco seno de uma expressão numérica.

Sintaxe

ASIN(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica a expressão numérica cujo arco seno é retornado por ASIN( ). O valor de
nExpressão pode variar de +1 até –1 e o valor retornado por ASIN( ) pode variar de –pi/2 a +pi/2 ( –
1,57079 a 1,57079). O número de casas decimais na exibição do resultado pode ser especificado
com SET DECIMALS.

Comentários

Utilize RTOD( ) para converter radianos em graus.

ASIN( ), exemplo da função

CLEAR
? RTOD(ASIN(0)) && Retorna 0.00
STORE 1 to gnArcAngle
? RTOD(ASIN(gnArcAngle)) && Retorna 90.00
? RTOD(ASIN(SQRT(2)/2)) && Retorna 45.00

ASORT( ), função

Classifica os elementos de uma matriz em ordem ascendente ou descendente.

Sintaxe

ASORT(NomeMatriz [, nElementoInicial [, nNúmeroClassificados [, nOrdemClassificação]]])

Tipos de retorno
Numérico

Argumentos

NomeMatriz Especifica o nome da matriz a ser classificada.

nElementoInicial Especifica o elemento inicial da classificação. Se você omitir nElementoInicial,


a matriz será classificada, como padrão, a partir do primeiro elemento. Se a matriz for
unidimensional, a classificação incluirá nElementoInicial. Se ela for bidimensional, o elemento
inicial nElementoInicial determinará a linha em que a classificação irá começar e a coluna que
determina a ordem de classificação das linhas.

Observação Você pode referir-se a um elemento de uma matriz bidimensional de duas maneiras. O
primeiro método utiliza dois índices para especificar a posição do elemento na matriz em termos de
linha e coluna; o outro método utiliza um número de elemento. Esta função e outras que manipulam
matrizes bidimensionais exigem números de elementos (em ASORT( ), as expressões numéricas
nElementoInicial e nNúmeroClassificados). Você pode utilizar AELEMENT( ) para retornar o
número do elemento a partir de índices de linha e coluna em uma matriz bidimensional.

O exemplo a seguir ilustra o fato de que o elemento inicial nElementoInicial determina o modo
como as linhas em uma matriz bidimensional são classificadas. Uma matriz pequena denominada
gaArray é criada e classificada duas vezes. A primeira classificação começa no primeiro elemento
de gaArray e as linhas são classificadas com base nos valores contidos na primeira coluna da
matriz. A segunda classificação começa no quarto elemento de gaArray e as linhas são classificadas
com base nos valores contidos na segunda coluna.

A primeira classificação começa na primeira linha. A segunda começa na segunda linha. Você pode
utilizar DISPLAY MEMORY para exibir o conteúdo da matriz; nestes exemplos, são utilizadas
tabelas para exibir graficamente os resultados das classificações.

Os comandos abaixo criam a matriz denominada gaArray:

DIMENSION gaArray(3,2)
gaArray(1) = 'G'
gaArray(2) = 'A'
gaArray(3) = 'C'
gaArray(4) = 'Z'
gaArray(5) = 'B'
gaArray(6) = 'N'

gaArray tem a aparência a seguir:

Coluna 1 Coluna 2

Linha 1 G A
Linha 2 C Z
Linha 3 B N
Em seguida, ASORT( ) classifica a matriz a partir do primeiro elemento (1,1) da mesma. Os
elementos da primeira coluna são colocados em ordem ascendente por meio de uma reorganização
das linhas da matriz.

=ASORT(gaArray,1)

Observe a nova ordem das linhas:

Coluna 1 Coluna 2

Linha 1 B N
Linha 2 C Z
Linha 3 G A

Em seguida, a matriz é classificada a partir do seu quarto elemento (2,2). Os elementos na segunda
coluna são colocados em ordem por meio de uma reorganização das linhas da matriz.

=ASORT(gaArray,4)

Observe a diferença na ordem das linhas:

Coluna 1 Coluna 2

Linha 1 B N
Linha 2 G A
Linha 3 C Z
nNúmeroClassificados Especifica o número de elementos classificados em uma matriz
unidimensional ou o número de linhas classificadas em uma matriz bidimensional. Por exemplo, se
a matriz for unidimensional e nElementoInicial for 2, indicando que a classificação começa no
segundo elemento da matriz, e nNúmeroClassificados for 3, indicando que a classificação deve
incluir três elementos, o segundo, o terceiro e o quarto elementos da matriz serão classificados. Se
nNúmeroClassificados for –1 ou for omitido, todos os elementos da matriz, a partir do elemento
inicial nElementoInicial até o último elemento, serão classificados.

Se a matriz for bidimensional, nNúmeroClassificados designará o número de linhas que devem ser
classificadas, a partir da linha que contém o elemento inicial nElementoInicial. Por exemplo, se
nElementoInicial for 2 e nNúmeroClassificados for 3, a linha que contém o segundo elemento de
matriz e as duas linhas seguintes serão classificadas. Se nNúmeroClassificados for –1 ou for
omitido, todas as linhas da matriz, a partir da linha que contém o elemento inicial nElementoInicial
até a última linha, serão classificadas.

nOrdemClassificação Especifica a ordem de classificação (ascendente ou descendente) dos


elementos da matriz. Como padrão, os elementos de matriz são classificados em ordem ascendente.
Se nOrdemClassificação for 0 ou for omitida, os elementos de matriz serão classificados em ordem
ascendente. Se nOrdemClassificação for 1 ou qualquer valor diferente de zero, os elementos de
matriz serão classificados em ordem descendente.

Comentários
Todos os elementos incluídos na classificação devem ter o mesmo tipo de dados. As matrizes
unidimensionais são classificadas pelos seus elementos; as matrizes bidimensionais são
classificadas pelas suas linhas. Quando uma matriz bidimensional é classificada, a ordem das linhas
na matriz é alterada para que os elementos de uma coluna da matriz fiquem em ordem ascendente
ou descendente.

Se a classificação for bem-sucedida, será retornado 1; caso contrário, será retornado –1.

ASORT( ), exemplo da função

O exemplo a seguir copia o campo contact da tabela customer para uma matriz denominada
gaContact. Os primeiros 20 contatos na matriz são exibidos, a matriz é classificada e os contatos são
exibidos novamente na ordem de classificação.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre a tabela de clientes

COUNT TO gnCount && Número de contatos


DIMENSION gaContact(gnCount,1) && Cria uma matriz de contatos
COPY TO ARRAY gaContact FIELD contact && Preenche a matriz

CLEAR
? 'Contact names:'
?
FOR nCount = 1 TO 20
? gaContact(nCount) && Exibe os 20 primeiros contatos
ENDFOR
= ASORT(gaContact) && Classifica a matriz

?
? 'Sorted Contact names:'

?
FOR nCount = 1 TO 20
? gaContact(nCount) && Exibe os 20 primeiros contatos, classificados
ENDFOR

ASSERT, comando

Exibe uma caixa de mensagem quando uma expressão lógica é avaliada como falsa (.F.).

Sintaxe

ASSERT lExpressão [MESSAGE cTextoMensagem]

Argumentos
lExpressão Especifica a expressão lógica que é avaliada. Se lExpressão resultar em um falso (.F.)
lógico, uma caixa de diálogo de depuração será exibida. Se lExpressão resultar em um verdadeiro
(.T.) lógico, a caixa de diálogo não será exibida.

cTextoMensagem Especifica o texto exibido na caixa de diálogo de depuração. Se você omitir


cTextoMensagem, o texto padrão será exibido, indicando o número da linha na qual a declaração
falhou e o procedimento contendo a declaração.

Comentários

Esse comando será ignorado se o comando SET ASSERTS for definido como OFF.

A caixa de mensagem contém os botões Cancelar, Depurar, Ignorar e Ignorar todos. A tabela a
seguir descreve a ação executada quando cada botão é selecionado.

Botão Ação

Depurar A execução do programa é suspensa e a janela Depurar é exibida com a janela


Rastrear ativa.
Cancelar A execução do programa é encerrada.
Ignorar A execução do programa continua com a linha após o comando ASSERT.
Ignorar Todos A execução do programa continua com a linha após o comando ASSERT e
ASSERTS é definido como OFF. Os comandos ASSERT subseqüentes serão ignorados até que
ASSERTS seja definido como ON.

ASUBSCRIPT( ), função

Retorna o índice de linha ou coluna de um elemento a partir do número do elemento.

Sintaxe

ASUBSCRIPT(NomeMatriz, nNúmeroElemento, nÍndice)

Tipos de retorno

Numérico

Argumentos

NomeMatriz Especifica o nome da matriz.

nNúmeroElemento Especifica o número do elemento.

nÍndice Determina se é retornado o índice de linha ou coluna.

Se a matriz for unidimensional, inclua o número do elemento em nNúmeroElemento e 1 em


nÍndice. ASUBSCRIPT( ) retorna nNúmeroElemento de forma idêntica.
Se a matriz for bidimensional, você deve incluir o número do elemento nNúmeroElemento e um
valor 1 ou 2 em nÍndice. A especificação de 1 em nÍndice retorna o índice de linha do elemento, e a
especificação de 2 retorna o índice de coluna.

Para obter maiores informações sobre como fazer referência a elementos de uma matriz, consulte ”
DIMENSION”.

Comentários

Você pode referir-se a elementos de matrizes de variável bidimensionais de duas maneiras. O


primeiro método utiliza dois índices para especificar a posição do elemento na matriz em termos de
linha e coluna. O segundo método utiliza um número de elemento. Utilize ASUBSCRIPT( ) para
obter o índice de linha ou coluna de um elemento a partir do número do elemento.

No exemplo a seguir, é criada uma matriz com duas linhas e três colunas. DISPLAY MEMORY
exibe o conteúdo dos elementos da matriz listados na ordem dos números dos elementos.

DIMENSION gaMyArray(2,3)
DISPLAY MEMORY LIKE gaMyArray
GAMYARRAY Pub A
( 1, 1) L .F. (elemento número 1)
( 1, 2) L .F. (elemento número 2)
( 1, 3) L .F. (elemento número 3)
( 2, 1) L .F. (elemento número 4)
( 2, 2) L .F. (elemento número 5)
( 2, 3) L .F. (elemento número 6)

Os dois comandos abaixo armazenam a seqüência de caracteres INVOICE no mesmo elemento de


matriz:

STORE 'INVOICE' TO gaMyArray(2, 1)


STORE 'INVOICE' TO gaMyArray(4)

Em matrizes unidimensionais, o número de um elemento é idêntico ao seu índice de linha único.


Não é necessário utilizar ASUBSCRIPT( ) com matrizes unidimensionais.

AT( ), função

Retorna a posição numérica inicial da primeira ocorrência de uma expressão de caracteres ou campo
Memo dentro de uma outra expressão de caracteres ou campo Memo, contando a partir do caractere
mais à esquerda.
Sintaxe

AT(cExpressãoProcurada, cExpressãoPesquisada [, nOcorrência])

Tipos de retorno

Numérico

Argumentos

cExpressãoProcurada Especifica a expressão de caracteres que AT( ) procura em


cExpressãoPesquisada.

cExpressãoPesquisada Especifica a expressão de caracteres que a cExpressãoProcurada procura.

Tanto cExpressãoProcurada como cExpressãoPesquisada podem ser campos Memo de qualquer


tamanho.

nOcorrência Especifica qual ocorrência (primeira, segunda, terceira e assim por diante) da
cExpressãoProcurada é procurada na cExpressãoPesquisada. Como padrão, AT( ) procura a
primeira ocorrência da cExpressãoProcurada (nOcorrência = 1). A inclusão de nOcorrência permite
que você procure ocorrências adicionais da cExpressãoProcurada na cExpressãoPesquisada. AT( )
retornará 0 se nOcorrência for maior do que o número de vezes que a cExpressãoProcurada ocorre
na cExpressãoPesquisada.
Comentários

AT( ) procura a primeira ocorrência da primeira expressão de caracteres na segunda expressão de


caracteres. Em seguida, retorna um inteiro que indica a posição do primeiro caractere na expressão
de caracteres localizada. Caso a expressão de caracteres não seja localizada, AT( ) retornará 0.

A procura executada por AT( ) considera maiúsculas/minúsculas. Para executar uma procura que
não considere maiúsculas/minúsculas, utilize ATC( ).

AT( ), exemplo da função

STORE 'Agora é a hora da verdade' TO gcString


STORE 'é a' TO gcFindString
CLEAR
? AT(gcFindString,gcString) && Exibe 5
STORE 'É' TO gcFindString
? AT(gcFindString,gcString) && Exibe 0, considera maiúsculas/minúsculas
AT_C( ), função

Retorna a posição numérica inicial da primeira ocorrência de uma expressão de caracteres ou campo
Memo dentro de uma outra expressão de caracteres ou campo Memo, contando a partir do caractere
mais à esquerda.

Sintaxe

AT_C(cExpressãoProcurada, cExpressãoPesquisada [, nOcorrência])

Tipos de retorno

Numérico

Argumentos

cExpressãoProcurada Especifica a expressão de caracteres que AT_C( ) procura em


cExpressãoPesquisada.

CExpressãoPesquisada Especifica a expressão de caracteres que a cExpressãoProcurada procura.

Tanto a cExpressãoProcurada como a cExpressãoPesquisada podem ser campos Memo de qualquer


tamanho.

nOcorrência Especifica qual ocorrência (primeira, segunda, terceira e assim por diante) da
cExpressãoProcurada é procurada na cExpressãoPesquisada. Como padrão, AT_C( ) procura a
primeira ocorrência da cExpressãoProcurada (nOcorrência = 1). A inclusão de nOcorrência permite
que você procure ocorrências adicionais de cExpressãoProcurada em cExpressãoPesquisada.
AT_C( ) retornará 0 se nOcorrência for maior do que o número de vezes que a
cExpressãoProcurada ocorre na cExpressãoPesquisada.

Comentários

AT_C( ) procura a primeira ocorrência da primeira expressão de caracteres na segunda expressão de


caracteres. Em seguida, retorna um inteiro que indica a posição do primeiro caractere na expressão
de caracteres localizada. Caso a expressão de caracteres não seja localizada, AT_C( ) retornará 0.

AT_C( ) foi criada para expressões que contêm caracteres de byte duplo. Se a expressão contiver
apenas caracteres de byte único, AT_C( ) será equivalente a AT( ).

A procura executada por AT_C( ) considera maiúsculas/minúsculas. Para executar uma procura que
não considere maiúsculas/minúsculas, utilize ATCC( ).
ATAN( ), função

Retorna em radianos o arco tangente de uma expressão numérica.

Sintaxe

ATAN(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica uma expressão numérica cujo arco tangente é retornado por ATAN( ).
nExpressão pode ser qualquer valor. O valor retornado por ATAN( ) pode variar de –pi/2 a +pi/2 (–
1,57079 a 1,57079). O número de casas decimais exibidas no valor retornado por ATAN( ) é
determinado por SET DECIMALS.

Comentários

Utilize RTOD( ) para converter radianos em graus.

ATAN( ), exemplo da função

CLEAR
? ATAN(0) && Exibe 0.00
STORE PI( )/2 to gnAngle
? ATAN(gnAngle) && Exibe 1.00
? ATAN(PI( )/2) && Exibe 1.00
? ATAN(DTOR(90)) && Exibe 1.00

ATC( ), função

Retorna a posição numérica inicial da primeira ocorrência de uma expressão de caracteres ou campo
Memo dentro de uma outra expressão de caracteres ou campo Memo, sem considerar
maiúsculas/minúsculas nas duas expressões.

Sintaxe

ATC(cExpressãoProcurada, cExpressãoPesquisada [, nOcorrência])

Tipos de retorno

Numérico

Argumentos
cExpressãoProcurada Especifica a expressão de caracteres que ATC( ) procura em
cExpressãoPesquisada.

cExpressãoPesquisada Especifica a expressão de caracteres que a cExpressãoProcurada procura.

Tanto a cExpressãoProcurada como a cExpressãoPesquisada podem ser campos Memo de qualquer


tamanho.

nOcorrência Especifica qual ocorrência (primeira, segunda, terceira e assim por diante) da
cExpressãoProcurada será procurada na cExpressãoPesquisada. Como padrão, ATC( ) procura a
primeira ocorrência da cExpressãoProcurada (nOcorrência = 1). A inclusão de nOcorrência permite
que você procure ocorrências adicionais da cExpressãoProcurada na cExpressãoPesquisada.

Comentários

ATC( ) procura a ocorrência da primeira expressão de caracteres na segunda expressão de


caracteres, sem considerar maiúsculas/minúsculas nas duas expressões. Utilize AT( ) para executar
uma procura que considere maiúsculas/minúsculas.

ATC( ) retorna um inteiro correspondente à posição em que o primeiro caractere da expressão de


caracteres foi localizado. Se a expressão de caracteres não for localizada, ATC( ) retornará 0.

ATC( ), exemplo da função

STORE ' Agora é a hora da verdade ... ' TO gcString


STORE 'É A' TO gcFindString
CLEAR
? ATC(gcFindString, gcString) && Exibe 5
STORE 'é' TO gcFindString
? ATC(gcFindString, gcString) && Exibe 5
? ATC('now',gcString) && Exibe 1

ATCC( ), função

Retorna a posição numérica inicial da primeira ocorrência de uma expressão de caracteres ou campo
Memo dentro de outra expressão de caracteres ou campo Memo, sem considerar
maiúsculas/minúsculas nas duas expressões.

Sintaxe

ATCC(cExpressãoProcurada, cExpressãoPesquisada [, nOcorrência])

Tipos de retorno

Numérico

Argumentos
cExpressãoProcurada Especifica a expressão de caracteres que ATCC( ) procura em
cExpressãoPesquisada.

cExpressãoPesquisada Especifica a expressão de caracteres que a cExpressãoProcurada procura.

Tanto a cExpressãoProcurada como a cExpressãoPesquisada podem ser campos Memo de qualquer


tamanho.

nOcorrência Especifica qual ocorrência (primeira, segunda, terceira e assim por diante) da
cExpressãoProcurada será procurada na cExpressãoPesquisada. Como padrão, ATCC( ) procura a
primeira ocorrência da cExpressãoProcurada (nOcorrência = 1). A inclusão de nOcorrência permite
que você procure ocorrências adicionais da cExpressãoProcurada na cExpressãoPesquisada.

Comentários

ATCC( ) foi criada para expressões que contêm caracteres de byte duplo. Se a expressão contiver
apenas caracteres de byte único, ATCC( ) será equivalente a ATC( ).

ATCC( ) procura a ocorrência da primeira expressão de caracteres na segunda expressão de


caracteres, sem considerar maiúsculas/minúsculas nas duas expressões. Utilize AT_C( ) para
executar uma procura que considere maiúsculas/minúsculas.

ATCC( ) retorna um inteiro correspondente à posição em que o primeiro caractere da expressão de


caracteres foi localizado. Caso a expressão de caracteres não seja localizada, ATCC( ) retornará 0.

ATCLINE( ), função

Retorna o número da linha da primeira ocorrência de uma expressão de caracteres ou campo Memo
dentro de uma outra expressão de caracteres ou campo Memo, sem considerar
maiúsculas/minúsculas nas duas expressões.

Sintaxe

ATCLINE(cExpressãoProcurada, cExpressãoPesquisada)

Tipos de retorno

Numérico

Argumentos

cExpressãoProcurada Especifica a expressão de caracteres que ATCLINE( ) procura em


cExpressãoPesquisada.

cExpressãoPesquisada Especifica a expressão de caracteres que a cExpressãoProcurada procura.

Tanto a cExpressãoProcurada como a cExpressãoPesquisada podem ser campos Memo de qualquer


tamanho. Utilize MLINE( ) para retornar a linha que contém a expressão de caracteres
correspondente.
Dica ATCLINE( ) oferece um método conveniente para pesquisar em campos Memo.

Comentários

Se a procura for bem-sucedida, ATCLINE( ) retornará o número da linha que contém a primeira
expressão de caracteres. Caso contrário, ATCLINE( ) retornará 0.

O número de linha retornado por ATCLINE( ) é determinado pelo valor de SET MEMOWIDTH,
mesmo que a cExpressãoPesquisada não seja um campo Memo. Para obter maiores informações,
consulte ” SET MEMOWIDTH” na Ajuda.

Utilize ATLINE( ) para executar uma procura que considere maiúsculas/minúsculas.

ATCLINE( ), exemplos da função

O exemplo 1 localiza a primeira ocorrência de uma seqüência de caracteres em um campo Memo e


exibe o nome e o sobrenome do funcionário, e a linha do memo contendo a seqüência de caracteres.
O exemplo 2 demonstra como a largura do Memo afeta ATCLINE( ).

* Example 1
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE employee && Abre tabela a employee

CLEAR
STORE 'JAPANESE' TO gcFindString && Não considera maiúsculas/minúsculas
LOCATE FOR ATCLINE(gcFindString, notes) != 0
? First_Name
?? Last_Name
? MLINE(notes, ATCLINE(gcFindString, notes))

* Example 2
STORE '1234567890ABCDEFGHIJ' TO gcString
SET MEMOWIDTH TO 20
? ATCLINE('AB', gcString) && Exibe 1

SET MEMOWIDTH TO 10
? ATCLINE('AB', gcString) && Exibe 2

ATLINE( ), função

Retorna o número da linha da primeira ocorrência de uma expressão de caracteres ou campo Memo
dentro de uma outra expressão de caracteres ou campo Memo, contando a partir da primeira linha.

Sintaxe

ATLINE(cExpressãoProcurada, cExpressãoPesquisada)
Tipos de retorno

Numérico

Argumentos

cExpressãoProcurada Especifica a expressão de caracteres que o Visual FoxPro procura em


cExpressãoPesquisada.

cExpressãoPesquisada Especifica a expressão de caracteres que a cExpressãoProcurada procura.

Tanto a cExpressãoProcurada como a cExpressãoPesquisada podem ser campos Memo de qualquer


tamanho.

Utilize MLINE( ) para retornar a linha que contém a expressão de caracteres correspondente como
uma seqüência de caracteres.

Dica ATLINE( ) oferece um método conveniente de procura de campos Memo.

Comentários

ATLINE( ) procura a ocorrência da primeira expressão de caracteres na segunda expressão de


caracteres, sem considerar maiúsculas/minúsculas em ambas expressões. Utilize ATCLINE( ) para
executar uma procura que não considere maiúsculas/minúsculas.

Se a procura for bem-sucedida, ATLINE( ) retornará o número da linha em que ocorre a


correspondência. Caso contrário, ATLINE( ) retornará 0.

O número de linha retornado por ATLINE( ) é determinado pelo valor de SET MEMOWIDTH,
mesmo que a cExpressãoPesquisada não seja um campo Memo. Para obter maiores informações,
consulte ” SET MEMOWIDTH” na Ajuda.

ATLINE( ), exemplos da função

O exemplo 1 localiza a primeira ocorrência de uma seqüência de caracteres em um campo Memo e


exibe o nome e o sobrenome do funcionário, e a linha do memo contendo a seqüência de caracteres.
O exemplo 2 demonstra como a largura do memo afeta ATLINE( ).

* Example 1
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE employee && Abre a tabela employee

CLEAR
STORE 'Japonês' TO gcFindString && Considera maiúsculas/minúsculas
LOCATE FOR ATLINE(gcFindString, notes) != 0
? First_Name
?? Last_Name
? MLINE(notes, ATLINE(gcFindString, notes))
* Example 2
STORE '1234567890ABCDEFGHIJ' TO gcString
SET MEMOWIDTH TO 20
? ATLINE('AB', gcSting) && Exibe 1

SET MEMOWIDTH TO 10
? ATLINE('AB', gcString) && Exibe 2

ATN2( ), função

Retorna o arco tangente em todos os quatro quadrantes de valores especificados.

Sintaxe

ATN2(nCoordenadaY, nCoordenadaX)

Tipos de retorno

Numérico

Argumentos

nCoordenadaY Especifica a coordenada y.

nCoordenadaX Especifica a coordenada x.

Comentários

ATN2( ) retorna o ângulo (em radianos) entre a linha y = 0 e a linha que conecta as coordenadas
especificadas e a origem (0, 0) do sistema de coordenadas.

ATN2( ) retorna um valor entre – pi/2 e + pi/2.

Para converter o valor retornado por ATN2( ) em graus, utilize RTOD( ). Para especificar o número
de casas decimais exibidas no resultado, utilize SET DECIMALS.

ATN2( ), exemplo da função

CLEAR
? PI( ) && Exibe 3.14
? ATN2(0,-1) && Exibe 3.14
STORE COS(PI( )) TO gnXCoord
STORE SIN(PI( )) TO gnYCoord
? ATN2(gnYCoord,gnXCoord) && Exibe 3.14
? ATN2(gnYCoord,gnXCoord)/PI( ) && Exibe 1.00
AVERAGE, comando

Calcula o método aritmético das expressões ou campos numéricos.

Sintaxe

AVERAGE [ListaExpressões]
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[TO ListaVarMem | TO ARRAY NomeMatriz]
[NOOPTIMIZE]

Argumentos

ListaExpressões Especifica as expressões para a média. ListaExpressões pode ser uma lista de
campos a partir da tabela separada por vírgulas ou expressões numéricas que envolvem campos
dessa tabela.

Escopo Especifica o registro ou o intervalo de registros para incluir na média. Apenas os registros
incluídos no intervalo de registros especificados pelo escopo estão com média calculada. As
cláusulas do escopo são: ALL, NEXT nRegistros, RECORD nNúmeroRegistro e REST. O escopo
padrão para AVERAGE é registros ALL.

Os comandos que incluem Escopo operam apenas em tabelas na Área de trabalho ativa.

FOR lExpressão1 Especifica uma condição pela qual são incluídos apenas os registros que
satisfazem as condições lógicas de lExpressão. Esse argumento permite filtrar registros
indesejáveis.

Rushmore otimiza uma consulta AVERAGE FOR se lExpressão for uma expressão de otimização.
Para obter um melhor desempenho, utilize uma expressão de otimização da cláusula FOR. Para
obter maiores informações sobre expressões de otimização Rushmore, consulte ” SET OPTIMIZE”
e “Compreendendo a tecnologia Rushmore” no capítulo 15, “Otimizando aplicativos”, no Guia do
Desenvolvedor.

WHILE lExpressão2 Especifica que, uma vez que a expressão lógica lExpressão2 resulta em
verdadeiro (.T.), os registros estão incluídos na média.

TO ListaVarMem Especifica a lista de variáveis ou elementos de matriz para os quais os


resultados da média são armazenados.

TO ARRAY NomeMatriz Especifica a matriz unidimensional na qual os resultados da média são


armazenados. A matriz unidimensional pode ser criada antes da execução de AVERAGE.

Se a matriz incluída em AVERAGE não existir, o Visual FoxPro a criará automaticamente. Se a


matriz existir e não for grande o suficiente para conter todos os resultados, o Visual FoxPro
automaticamente aumentará o tamanho da matriz para acomodar as informações.
NOOPTIMIZE Desativa a otimização Rushmore de AVERAGE. Para obter maiores informações,
consulte ’ ’SET OPTIMIZE” e “Compreendendo a tecnologia Rushmore” no capítulo 15,
“Otimizando aplicativos”, no Guia do Desenvolvedor.

Comentários

Todos os campos numéricos na tabela selecionada estão com médias calculadas, a menos que você
inclua uma lista de expressões opcional. O resultado é exibido na tela se SET TALK estiver ativado
(ON). Se SET HEADINGS estiver ativado (ON), os nomes dos campos ou expressões envolvendo
os nomes dos campos são exibidos acima dos resultados.

AVERAGE, exemplo do comando

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE orders && Abre a tabela de pedidos

CLEAR
AVERAGE Order_Amt && Calcula as médias de todos os pedidos
AVERAGE Order_Amt TO gnAvg && Armazena a média na variável de memória
? 'Quantidade média dos pedidos: '
?? gnAvg && Exibe a média novamente

TABELA de Cores

A tabela a seguir lista valores típicos de cor.

Cor Valores RGB Valor de nCor

Branco 255, 255, 255 16777215


Preto 0, 0, 0 0
Cinza 192, 192, 192 12632256
Cinza-escuro 128, 128, 128 8421504
Vermelho 255, 0, 0 255
Vermelho-escuro 128, 0, 0 128
Amarelo 255, 255, 0 65535
Amarelo-escuro 128, 128, 0 32896
Verde 0, 255, 0 65280
Verde-escuro 0, 128, 0 32768
Ciano 0, 255, 255 16776960
Ciano-escuro 0, 128, 128 8421376
Azul 0, 0, 255 16711680
Azul-escuro 0, 0, 128 8388608
Magenta 255, 0 ,255 16711935
Magenta-escuro 128, 0, 128 8388736
BETWEEN( ), função

Determina se o valor de uma expressão está entre os valores de duas outras expressões com mesmo
tipo de dado.

Sintaxe

BETWEEN(eValorTeste, eValorMínimo, eValorMáximo)

Tipos de retorno

Lógico ou valor nulo

Argumentos

eValorTeste Especifica a expressão cujo valor é testado por BETWEEN( ). Se o valor de


eValorTeste for maior que ou igual ao valor de eValorMínimo e menor que ou igual ao valor de
eValorMáximo, BETWEEN( ) retornará verdadeiro (.T.). Caso contrário, BETWEEN( ) retornará
falso (.F.). BETWEEN( ) retornará o valor nulo se eValorMínimo ou eValorMáximo representarem
um valor nulo.

eValorMínimo Especifica o valor mais baixo no intervalo avaliado por BETWEEN( ).

eValorMáximo Especifica o valor mais alto no intervalo avaliado por BETWEEN( ).

Comentários

BETWEEN( ) retornará um valor verdadeiro (.T.) se o valor de uma expressão do tipo caractere,
data, data e hora, numérico, flutuante, inteiro, duplo ou moeda situar-se entre os valores de duas
outras expressões com o mesmo tipo de dado. Caso contrário, BETWEEN( ) retornará falso (.F.).
BETWEEN( ) retornará o valor nulo se eValorMínimo ou eValorMáximo representarem um valor
nulo.

BETWEEN( ), exemplo da função

O exemplo a seguir procura na tabela orders todos os registros no campo order_amt com valores
entre 950 e 1000 inclusive e exibe o campo cust_id e o campo order_amt.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE orders && Abre a tabela Order

CLEAR
SCAN FOR BETWEEN(order_amt,950,1000)
? cust_id, order_amt
ENDSCAN
BINTOC( ), função

Converte um valor inteiro em uma representação de caracteres binários.

Sintaxe

BINTOC(nExpressão [, nTamanho])

Tipos de retorno

Caractere

Argumentos

nExpressão Especifica o valor inteiro a ser convertido.

nTamanho Especifica o tamanho em caracteres da seqüência de caracteres retornada.

nTamanho também determina o valor que pode ser especificado para nExpressão. A tabela a seguir
lista os valores aceitos para nTamanho e o intervalo correspondente de valores para nExpressão:

nTamanho Intervalo nExpressão

1 -128 a 127
2 -32,768 a 32,767
4 (padrão) -2,147,483,648 a 2,147,483,647

Se nTamanho for omitido, BINTOC( ) retornará uma seqüência de caracteres composta por quatro
caracteres.
Comentários

Utiliza-se BINTOC( ) para reduzir o tamanho dos índices para campos numéricos que contêm dados
inteiros. Por exemplo, um campo numérico denominado iPartCode pode conter um valor inteiro
entre 1 e 127 que corresponde a um código de classificação de peças. BINTOC( ) permite que você
converta o valor no campo numérico em uma representação de caracteres simples. Por exemplo, o
comando a seguir cria um índice com uma chave de índice de um caractere:

INDEX ON BINTOC(nPartCode,1) TAG PartCode

BITAND( ), função

Retorna o resultado de uma operação AND em nível de bit executada sobre dois valores numéricos.

Sintaxe

BITAND(nExpressão1, nExpressão2)
Tipos de retorno

Numérico

Argumentos

nExpressão1, nExpressão2 Especifica os valores numéricos sobre os quais a operação AND em


nível de bit é executada. Se nExpressão1 e nExpressão2 não forem números inteiros, serão
convertidos em inteiros antes que a operação AND em nível de bit seja executada.

Comentários

BITAND( ) compara cada bit em nExpressão1 com o bit correspondente em nExpressão2. Se os bits
em nExpressão1 e nExpressão2 forem ambos 1, o bit resultante correspondente será definido como
1; caso contrário, será definido como 0.

A tabela a seguir mostra o resultado de uma operação AND em nível de bit em bits correspondentes
de nExpressão1 e nExpressão2:

Bit de nExpressão1 Bit de nExpressão2 Bit resultante

0 0 0
0 1 0
1 1 1
1 0 0

BITAND( ), exemplo da função

x = 3 && 0011 binário


y = 6 && 0110 binário

? BITAND(x,y) && Retorna 2, 0010 binário

BITCLEAR( ), função

Limpa um bit especificado (define o bit como 0) em um valor numérico e retorna o valor resultante.

Sintaxe

BITCLEAR(nExpressão1, nExpressão2)

Tipos de retorno

Numérico

Argumentos

nExpressão1 Especifica o valor numérico em que um bit é limpo. Se nExpressão1 não for um
número inteiro, será convertido em inteiro antes que o seu bit seja definido.
nExpressão2 Especifica a posição do bit que é limpo em nExpressão1. nExpressão2 pode estar no
intervalo de 0 a 31; 0 é o bit mais à direita.

BITCLEAR( ), exemplo da função

x = 7 && 0111 binário


y = 1 && 2a. posição de bit (0 = 1a. posição de bit)
? BITCLEAR(x,y) && Retorna 5, 0101 binário

BITLSHIFT( ), função

Retorna o resultado do deslocamento para a esquerda dos bits de um valor numérico, um número
especificado de posições.

Sintaxe

BITLSHIFT(nExpressão1, nExpressão2)

Tipos de retorno

Numérico

Argumentos

nExpressão1 Especifica o valor numérico cujos bits são deslocados para a esquerda. Se
nExpressão1 não for um número inteiro, será convertido em inteiro antes que os respectivos bits
sejam deslocados.

nExpressão2 Especifica o número de posições de bits a serem deslocados. Se nExpressão2 não for
um número inteiro, será convertido.

BITLSHIFT( ), exemplo da função

x = 5 && 0101 binário


y = 1 && Desloca os bits 1 posição para a esquerda

? BITLSHIFT(x,y) && Retorna 10, 1010 binário

BITNOT( ), função

Retorna o resultado de uma operação NOT em nível de bit executada sobre um valor numérico.

Sintaxe

BITNOT(nExpressão)
Tipos de retorno

Numérico

Argumentos

nExpressão Especifica o valor numérico sobre o qual a operação NOT em nível de bit é executada.
Se nExpressão1 não for um número inteiro, será convertido em inteiro antes que os respectivos bits
sejam deslocados.

Comentários

A função BITNOT( ) retorna o complemento em nível de bit de nExpressão. O valor numérico


retornado por BITNOT( ) representa nExpressão com cada bit de valor 0 alternado para 1 e cada bit
de valor 1 alternado para 0.

A tabela a seguir mostra o resultado de uma operação NOT em nível de bit em nExpressão:

Bit de nExpressão Bit resultante

0 1
1 0

BITNOT( ), exemplo da função

x = 5 && 0101 binário


? BITNOT(x) && Retorna -6

BITOR( ), função

Retorna o resultado de uma operação OR inclusiva em nível de bit executada sobre dois valores
numéricos.

Sintaxe

BITOR(nExpressão1, nExpressão2)

Tipos de retorno

Numérico

Argumentos

nExpressão1, nExpressão2 Especifica os valores numéricos sobre os quais a operação OR


inclusiva em nível de bit é executada. Se nExpressão1 e nExpressão2 não forem números inteiros,
serão convertidos em inteiros antes que a operação OR inclusiva em nível de bit seja executada.

Comentários
BITOR( ) compara cada bit em nExpressão1 com o bit correspondente em nExpressão2. Se um dos
bits em nExpressão1 ou nExpressão2 for 1, o bit resultante correspondente será definido como 1;
caso contrário, será definido como 0.

A tabela a seguir mostra o resultado de uma operação OR inclusiva sobre bits correspondentes em
nExpressão1 e nExpressão2:

Bit de nExpressão1 Bit de nExpressão2 Bit resultante

0 0 0
0 1 1
1 0 1
1 1 1

BITOR( ), exemplo da função

x = 5 && 0101 binário


y = 6 && 0110 binário

? BITOR(x,y) && Retorna 7, 0111 binário

BITRSHIFT( ), função

Retorna o resultado do deslocamento para a direita dos bits de um valor numérico, um número
especificado de posições.

Sintaxe

BITRSHIFT(nExpressão1, nExpressão2)

Tipos de retorno

Numérico

Argumentos

nExpressão1 Especifica o valor numérico cujos bits são deslocados para a direita. Se nExpressão1
não for um número inteiro, será convertido em inteiro antes que os respectivos bits sejam
deslocados.

nExpressão2 Especifica o número de posições de bits a serem deslocados. Se Expressão2 não for
um número inteiro, será convertido.

BITRSHIFT( ), exemplo da função

x = 5 && 0101 binário


y = 1 && Desloca os bits 1 posição para a direita

? BITRSHIFT(x,y) && Retorna 2, 0010 binário


BITSET( ), função

Define o bit como 1 em um valor numérico e retorna o valor resultante.

Sintaxe

BITSET(nExpressão1, nExpressão2)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica o valor numérico em que um bit é definido. Se nExpressão1 não for um
número inteiro, será convertido em inteiro antes que o seu bit seja definido.

nExpressão Especifica a posição em nExpressão1 do bit que é definido como 1. nExpressão2 pode
estar no intervalo de 0 a 31; 0 é o bit mais à direita.

BITSET( ), exemplo da função

x = 5 && 0101 binário


y = 1 && 2a. posição de bit (0 = 1a. posição de bit)
? BITSET(x,y) && Retorna 7, 0111 binário

BBIITTTTEESSTT(( )),, ffuunnççããoo

Retornará verdadeiro (.T.) se um bit especificado em um valor numérico estiver definido como 1;
caso contrário, retornará falso (.F.).

Sintaxe

BITTEST(nExpressão1, nExpressão2)

Tipos de retorno

Lógico

Argumentos

nExpressão1 Especifica o valor numérico em que um bit é verificado. Se nExpressão1 não for um
número inteiro, será convertido em inteiro antes que o respectivo bit seja verificado.

nExpressão2 Especifica a posição do bit que é verificado em nExpressão1. nExpressão2 pode


estar no intervalo de 0 a 31; 0 é o bit mais à direita.
BITTEST( ), exemplo da função

O exemplo a seguir utiliza BITTEST( ) para determinar se uma série de inteiros é par. Se um inteiro
for par, a função IsEven retornará verdadeiro (.T.); caso contrário, retornará falso (.F.).

CLEAR
? '2 even? '
?? IsEven(2) && É par, retorna .T.
? '3 even? '
?? IsEven(3) && Não é par, retorna .F.
? '0 even? '
?? IsEven(0) && É par, retorna .T.
? '-13 even? '
?? IsEven(-13) && Não é par, retorna .F.

Function IsEven
PARAMETER nInteger
RETURN NOT BITTEST(nInteger, 0)

BITXOR( ), função

Retorna o resultado de uma operação OR exclusiva em nível de bit executada sobre dois valores
numéricos.

Sintaxe

BITXOR(nExpressão1, nExpressão2)

Tipos de retorno

Numérico

Argumentos

nExpressão1, nExpressão2 Especifica os valores numéricos sobre os quais a operação OR


exclusiva em nível de bit é executada. Se nExpressão1 e nExpressão2 não forem números inteiros,
serão convertidos em inteiros antes que a operação OR exclusiva em nível de bit seja executada.

Comentários

BITXOR( ) compara cada bit em nExpressão1 com o bit correspondente em nExpressão2. Se um bit
for 0 e o outro bit for 1, o bit resultante correspondente será definido como 1. Caso contrário, será
definido como 0.

A tabela a seguir mostra o resultado de uma operação OR exclusiva sobre bits correspondentes em
nExpressão1 e nExpressão2:

Bit de nExpressão1 Bit de nExpressão2 Bit resultante


0 0 0
0 1 1
1 0 1
1 1 0

BITXOR( ), exemplo da função

x = 5 && 0101 binário


y = 6 && 0110 binário

? BITXOR(x,y) && Retorna 3, 0011 binário

BLANK, comando

Limpa os dados de todos os campos do registro atual quando emitido sem argumentos adicionais.

Sintaxe

BLANK
[FIELDS ListaCampos]
[Escopo]
[FOR lExpressão1]
[WHILE lExpressão2]
[NOOPTIMIZE]

Argumentos

FIELDS ListaCampos Limpa apenas os campos especificados com ListaCampos. Como padrão, se
a cláusula FIELDS for omitida, todos os campos de um registro serão limpos. Qualquer campo
especificado em uma Área de trabalho não selecionada deve ser precedido pelo alias da Área de
trabalho.

Importante BLANK não irá limpar os dados dos campos de um registro em outra Área de trabalho
relacionada se o ponteiro do registro estiver no final do arquivo na Área de trabalho do momento. O
ponteiro deverá estar em um registro na Área de trabalho atual para que BLANK atue sobre os
campos do registro relacionado.

Escopo Especifica um intervalo de registros a serem limpos. Somente os registros que estiverem
dentro do intervalo serão limpos. As cláusulas de escopo são: ALL, NEXT nRegistros, RECORD
nNúmeroRegistro e REST.

Para obter maiores informações sobre as cláusulas de escopo, consulte o tópico Cláusulas de
escopo. Os comandos que incluem Escopo operam somente na tabela na Área de trabalho ativa.

O escopo padrão para BLANK é o registro atual (NEXT 1).

FOR lExpressão1 Limpa os dados dos campos dos registros para os quais lExpressão1 resulta em
verdadeiro (.T.). Rushmore otimizará BLANK FOR se lExpressão1 for uma expressão otimizável.
Uma discussão sobre a otimização Rushmore é apresentada em “Compreendendo a tecnologia
Rushmore” no capítulo 15, “Otimizando Aplicativos”, no Guia do Desenvolvedor.

WHILE lExpressão2 Especifica uma condição pela qual os dados dos campos dos registros serão
limpos desde que a expressão lógica lExpressão2 resulte em verdadeiro (.T.).

NOOPTIMIZE Evita a otimização Rushmore de BLANK. Para obter maiores informações,


consulte SET OPTIMIZE e “Compreendendo a tecnologia Rushmore” no capítulo 15, “Otimizando
aplicativos,” no Guia do Desenvolvedor.

Comentários

Utilize APPEND BLANK para adicionar um novo registro em branco ao final de uma tabela.
Utilize ISBLANK( ) para determinar se um campo de um registro está em branco.

BLANK, exemplo de comando

O exemplo a seguir abre a tabela customer no banco de dados testdata. O conteúdo do primeiro
registro é exibido. Utiliza-se SCATTER para salvar o conteúdo do registro em uma matriz. Este é
limpo com BLANK, e o conteúdo do registro exibido novamente. Usa-se GATHER para restaurar o
conteúdo do registro original, e o conteúdo do registro restaurado é exibido novamente.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer

CLEAR
DISPLAY && Exibe o registro atual
SCATTER TO gaCustomer && Cria matriz com o conteúdo do registro
BLANK && Limpa o registro
DISPLAY && Exibe o registro em branco
GATHER FROM gaCustomer && Restaura o conteúdo do registro original
DISPLAY && Exibe o registro restaurado

BOF( ), função

Determina se o ponteiro do registro está posicionado no início de uma tabela.

Sintaxe

BOF([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Lógico

Argumentos

nÁreaTrabalho Especifica o número da Área de trabalho para uma tabela aberta em uma outra
Área de trabalho.
cAliasTabela Especifica o alias de uma tabela aberta em uma outra Área de trabalho.

Caso a tabela em que você deseja testar a condição de início do arquivo esteja aberta em uma Área
de trabalho diferente da selecionada no momento, utilize estes argumentos opcionais para
especificar o número da Área de trabalho ou o alias da tabela. Caso a tabela não esteja aberta na
Área de trabalho especificada, BOF( ) retornará falso (.F.).

Comentários

Utilize BOF( ) para testar uma condição de início do arquivo para uma tabela. BOF( ) retornará
verdadeiro (.T.) se você tiver tentado mover o ponteiro do registro para uma posição anterior ao
primeiro registro da tabela.

BOF( ), exemplo de função

O exemplo a seguir abre a tabela customer e lista o nome da empresa, uma página de cada vez,
começando pelo último registro. A lista continua até o início do arquivo ser alcançado ou até que se
escolha Cancelar.

CLOSE DATABASES
CLEAR
OPEN DATABASE (HOME() + "samples\data\testdata")
USE customer
GO BOTTOM
local recCtr, btnValue
recCtr = 0
btnValue = 1
DO WHILE btnValue = 1 AND NOT BOF()
? "Company : " + company
recCtr = recCtr + 1
if (recCtr % 20) = 0 then
btnValue =MESSAGEBOX ("Clique em OK para continuar, clique sobre Cancelar para
sair.",33)
clear
endif
Skip -1 && Move um registro acima
ENDDO
=MESSAGEBOX("Lista concluída.",48)

BROWSE, comando

Abre a janela Pesquisar e exibe registros da tabela selecionada no momento.

Sintaxe

BROWSE
[FIELDS ListaCampos]
[FONT cNomeFonte [, nTamanhoFonte]]
[STYLE cEstiloFonte]
[FOR lExpressão1 [REST]]
[FORMAT]
[FREEZE NomeCampo]
[KEY eExpressão1 [, eExpressão2]]
[LAST | NOINIT]
[LOCK nNúmeroDeCampos]
[LPARTITION]
[NAME NomeObjeto]
[NOAPPEND]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLGRID] [NORGRID]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NOREFRESH]
[NORMAL]
[NOWAIT]
[PARTITION nNúmeroColuna [LEDIT] [REDIT]]
[PREFERENCE NomePreferência]
[SAVE]
[TIMEOUT nSegundos]
[TITLE cTextoTítulo]
[VALID [:F] lExpressão2 [ERROR cTextoMensagem]]
[WHEN lExpressão3]
[WIDTH nLarguraCampo]
[[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]
[COLOR SCHEME nNúmeroEsquema]

Argumentos

FIELDS ListaCampos Especifica os campos exibidos na janela Pesquisar. Os campos são exibidos
na ordem especificada em ListaCampos. Você pode incluir campos de outras tabelas relacionadas
na lista de campos. Quando um campo de uma tabela relacionada é incluído, antes do nome dele,
deve ser colocado o alias de tabela e um ponto.

Se você omitir FIELDS, todos os campos da tabela serão exibidos na ordem em que aparecem na
estrutura da tabela.

FONT cNomeFonte [, nTamanhoFonte] Especifica a fonte e o tamanho da fonte da janela


Pesquisar. A expressão de caracteres cNomeFonte especifica o nome da fonte e a expressão
numérica nTamanhoFonte especifica o tamanho dela. Por exemplo, a cláusula a seguir especifica
uma fonte Courier de 16 pontos para os campos exibidos em uma janela Pesquisar:

FONT 'Courier',16
Se você incluir a cláusula FONT, mas omitir o tamanho da fonte nTamanhoFonte, será utilizada
uma fonte de 10 pontos na janela Pesquisar. Se a cláusula FONT for omitida, será utilizada uma
fonte MS Sans Serif de 8 pontos.

Se a fonte especificada não estiver disponível, ela será substituída por outra com características
semelhantes.

STYLE cEstiloFonte Especifica o estilo da fonte da janela Pesquisar. Caso você omita a cláusula
STYLE, será utilizado o estilo de fonte Normal.

Se o estilo de fonte especificado não estiver disponível, ele será substituído por outro com
características semelhantes, ou será utilizada uma fonte estilo Normal.

Caractere Estilo de fonte

B Negrito
I Itálico
N Normal
O Contornado
Q Opaco
S Sombreado
- Riscado
T Transparente
U Sublinhado
Você pode incluir mais de um caractere para especificar uma combinação de estilos de fonte. O
exemplo a seguir abre uma janela Pesquisar e utiliza uma fonte sublinhada:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
IF _WINDOWS
BROWSE FIELDS contact FONT 'System', 15 STYLE 'NU'
ENDIF
IF _MAC
BROWSE FIELDS contact FONT 'Geneva', 14 STYLE 'NU'
ENDIF

FOR lExpressão1 Especifica uma condição pela qual somente registros para os quais lExpressão1
é verdadeira são exibidos na janela Pesquisar.

Rushmore otimizará uma consulta especificada com um comando BROWSE FOR se lExpressão1
for uma expressão otimizável. Para obter um melhor desempenho, utilize uma expressão otimizável
na cláusula FOR. Para obter informações sobre expressões otimizáveis por Rushmore, consulte SET
OPTIMIZE e “Compreendendo a tecnologia Rushmore” no capítulo 15, “Otimizando aplicativos,”
no Guia do Desenvolvedor.

Inclua FOR para mover o ponteiro do registro até o primeiro registro que corresponda à condição.
Inclua REST para manter o ponteiro do registro na sua posição atual.
REST Impede que o ponteiro do registro seja movido da sua posição atual para o início da tabela
quando uma janela Pesquisar é aberta com a cláusula FOR. Caso contrário, BROWSE, como
padrão, posiciona o ponteiro do registro no início da tabela.

FORMAT Especifica o uso de um arquivo de formatação para controlar a exibição e o formato da


entrada de dados em uma janela Pesquisar. Primeiro, o arquivo de formatação deve ser aberto com
SET FORMAT. As informações a seguir são extraídas do arquivo de formatação e aplicadas à
janela Pesquisar:

· A lista de campos a serem pesquisados


· Todas as cláusulas VALID
· Todas as cláusulas WHEN
· Todas as cláusulas RANGE
· Tamanhos de campos (conforme especificado em cláusulas PICTURE)
· Todas as expressões SAY (incluídas como campos BROWSE calculados)

O exemplo a seguir utiliza um arquivo de formatação para validar os dados digitados em uma janela
Pesquisar. As posições especificadas com @ ... GET são ignoradas.

A primeira linha cria um campo BROWSE (Cust_id) com 5 caracteres de largura e permite a
entrada somente de letras e dígitos. A segunda linha cria um campo BROWSE (
Company) que não pode conter um valor em branco e pode conter um máximo de 20 caracteres
alfabéticos.

A terceira linha cria um campo BROWSE (Contact) no qual só poderão ser digitados dados quando
o campo estiver em branco.

A seguir é apresentado o conteúdo do arquivo de formatação CUSTENTR.FMT, que é utilizado


para validar dados digitados na tabela customer:

@ 3,0 GET cust_id PICTURE 'NNNNN'


@ 3,0 GET company VALID company != SPACE(40) ;
PICTURE 'AAAAAAAAAAAAAAAAAAAA'
@ 3,0 GET contact WHEN contact = SPACE(40)

* Este é o programa que utiliza o arquivo de formatação


CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
SET FORMAT TO custentr.fmt
BROWSE FORMAT

FREEZE NomeCampo Permite que sejam feitas alterações somente em um campo da janela
Pesquisar. Este campo é especificado com NomeCampo. Os demais campos são exibidos e não
podem ser editados.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
BROWSE FIELDS phone :H = 'Telefone:' , ;
company :H = 'Empresa:' ;
FREEZE phone

KEY eExpressão1 [, eExpressão2] Limita o escopo de registros exibidos na janela Pesquisar. Com
KEY, você pode especificar um valor de chave de índice (eExpressão1) ou um intervalo de valores
de chaves (eExpressão1, eExpressão2) para os registros exibidos na janela Pesquisar. A tabela
pesquisada deve estar indexada e o valor ou os valores de chave de índice incluídos na cláusula
KEY devem ter o mesmo tipo de dados da expressão de índice da marca ou arquivo de índice
principal.

Por exemplo, a tabela customer inclui um campo de caractere que contém códigos postais. Caso a
tabela esteja indexada no campo de código postal, você poderá especificar um intervalo deles na
cláusula KEY.

No exemplo a seguir, somente registros com códigos postais dentro do intervalo de 10.000 a 30.000
são exibidos na janela Pesquisar:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
SET ORDER TO postalcode
BROWSE KEY '10000', '30000'

LAST | NOINIT Salva qualquer alteração na configuração feita na aparência de uma janela
Pesquisar. As alterações são salvas no arquivo FOXUSER, podendo incluir alterações feitas na lista
de campos, no tamanho de cada campo e na localização e tamanho da janela Pesquisar.

Se BROWSE for emitido com a cláusula LAST ou NOINIT, a janela Pesquisar será aberta na
mesma configuração que foi salva por último no arquivo FOXUSER, caso SET RESOURCE esteja
ativado (ON). Este procedimento restaura a configuração anterior da janela Pesquisar criada com o
último comando BROWSE. Caso o último BROWSE emitido na janela Comando inclua uma lista
extensa de cláusulas, emita BROWSE com a opção LAST ou NOINIT para evitar a necessidade de
digitar novamente o comando. Para obter maiores informações sobre o arquivo FOXUSER,
consulte SET RESOURCE na Ajuda.

Caso a última janela Pesquisar tenha sido aberta com um BROWSE com uma cláusula
PREFERENCE, BROWSE LAST não irá restaurar a preferência.

As alterações na configuração da janela Pesquisar feitas na sessão atual não serão salvas se você
sair de BROWSE pressionando as teclas CTRL+Q.

As cláusulas LAST e NOINIT são idênticas; NOINIT fornece compatibilidade com o dBASE.
LOCK nNúmeroDeCampos Especifica o número de campos que pode ser exibido na partição
esquerda da janela Pesquisar sem tabular ou rolar. A partição esquerda é automaticamente
dimensionada para que possa exibir o número de campos especificado com nNúmeroDeCampos.

LPARTITION Especifica que o cursor é colocado no primeiro campo na partição esquerda da


janela Pesquisar. Como padrão, o cursor é colocado no primeiro campo na partição direita quando a
janela Pesquisar é aberta.

NAME NomeObjeto Cria uma referência de objeto para a janela Pesquisar, permitindo que você
manipule essa janela com as propriedades orientadas a objetos disponíveis para o controle Grid.
Para obter informações adicionais sobre a programação orientada a objetos do Visual FoxPro,
consulte o capítulo 3, “Programação orientada a objetos”, no Guia do Desenvolvedor. Para obter
informações adicionais sobre as propriedades do controle Grid que podem ser especificadas para
uma janela Pesquisar criada com a cláusula NAME, consulte o tópico Grid, controle.

NOAPPEND Impede que o usuário adicione registros à tabela pressionando as teclas CTRL+Y ou
selecionando Incluir registro no menu Tabela

Important Including NOAPPEND doesn’t prevent you from appending a record from within a
routine (created with VALID, WHEN, or ON KEY LABEL) while in the Browse window.

NODELETE Impede que os registros sejam marcados para exclusão de dentro de uma janela
Pesquisar. Como padrão, um registro pode ser marcado para exclusão pressionando-se as teclas
CTRL+T, selecionando-se Alternar exclusão no menu Tabela ou clicando-se na coluna mais à
esquerda do registro a ser excluído.

Important Including NODELETE doesn’t prevent you from marking a record for deletion from
within a routine (created with VALID, WHEN, or ON KEY LABEL) while in the Browse
window.

NOEDIT | NOMODIFY Impede que um usuário modifique a tabela. NOEDIT e NOMODIFY são
idênticas. Se você incluir qualquer uma destas cláusulas, poderá pesquisar ou percorrer a tabela,
mas não poderá editá-la. No entanto, você poderá incluir e excluir registros.

NOLGRID Remove as linhas de grade dos campos na partição esquerda da janela Pesquisar.

NORGRID Remove as linhas de grade dos campos na partição direita da janela Pesquisar.

NOLINK Desvincula as partições de uma janela Pesquisar. Como padrão, as partições esquerda e
direita da janela Pesquisar estão vinculadas de modo que quando você percorre uma partição, a
outra partição é rolada.

NOMENU Remove da Barra de menus do sistema o título do menu Tabela, impedindo o acesso ao
menu Pesquisar.

NOOPTIMIZE Desativa a otimização Rushmore de BROWSE. Para obter maiores informações,


consulte SET OPTIMIZE e “Compreendendo a tecnologia Rushmore” na Ajuda no capítulo 15,
“Otimizando aplicativos”, no Guia do Desenvolvedor.
NOREFRESH Impede que a janela Pesquisar seja atualizada. As janelas Pesquisar são atualizadas
em intervalos determinados por SET REFRESH. NOREFRESH é útil com arquivos somente para
leitura e melhora o desempenho.

NORMAL Abre a janela Pesquisar com as definições padrão normais, tais como as opções de
cores, tamanho, posição, título e controle (GROW, FLOAT, ZOOM e assim por diante). Se você
omitir NORMAL e a janela de saída atual for implementada pelo usuário com suas próprias
definições, a janela Pesquisar também assumirá as definições especificadas pelo usuário.

NOWAIT Continua a execução do programa logo depois da abertura da janela Pesquisar. O


programa não aguarda o fechamento da janela Pesquisar, mas continua a execução na linha de
programa imediatamente após a linha que contém BROWSE NOWAIT. Se você omitir NOWAIT
quando emitir BROWSE dentro de um programa, uma janela Pesquisar será aberta e a execução do
programa será colocada em pausa até que a janela Pesquisar seja fechada.

NOWAIT está disponível apenas dentro de um programa. A inclusão de NOWAIT quando


BROWSE é emitido na janela Comando não tem qualquer efeito.

PARTITION nNúmeroColuna Divide uma janela Pesquisar em partições esquerda e direita com
nNúmeroColuna especificando o número da coluna da barra de divisão. Por exemplo, se
nNúmeroColuna for 20, a barra de divisão será colocada na coluna 20 da janela Pesquisar.

LEDIT Especifica que a partição esquerda da janela Pesquisar será exibida no modo Editar
.

REDIT Especifica que a partição direita da janela Pesquisar será exibida no modo Editar. O
exemplo a seguir abre uma janela Pesquisar com a barra de divisão colocada na coluna 20 e a
partição direita aberta no modo Editar.

Inclua as duas palavras-chave para abrir as duas partições no modo Editar.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
BROWSE PARTITION 20 REDIT

PREFERENCE NomePreferência Salva os atributos e as opções de uma janela Pesquisar para uso
posterior. Ao contrário de LAST, que restaura a janela Pesquisar como ela foi exibida na sessão
anterior, PREFERENCE salva os atributos de uma janela Pesquisar indefinidamente no arquivo de
recursos FOXUSER. As preferências podem ser recuperadas a qualquer momento.

Na primeira vez que BROWSE é emitido com o nome da preferência especificado, é criada uma
entrada no arquivo FOXUSER que salva a configuração da janela Pesquisar. A emissão de
BROWSE posteriormente com o mesmo nome da preferência restaura a janela Pesquisar a esse
estado de preferência. Quando a janela Pesquisar é fechada, a preferência é atualizada.

Os nomes de preferências podem ter até 10 caracteres, devem iniciar com uma letra ou um caractere
sublinhado e podem conter qualquer combinação de letras, números e caracteres sublinhados.

Quando uma preferência estiver como você deseja, você poderá impedir que ela seja alterada. Feche
a janela Pesquisar, emita SET RESOURCE OFF, abra o arquivo FOXUSER como uma tabela e
altere o registro que contém a preferência para somente para leitura, alterando o valor do campo
lógico READONLY para verdadeiro (.T.).

Para obter maiores informações sobre o arquivo de recurso FOXUSER, consulte SET RESOURCE.

Se você sair de uma janela Pesquisar pressionando as teclas CTRL+Q, nenhuma alteração feita na
janela Pesquisar será salva no arquivo de recursos.

SAVE Mantém a janela Pesquisar e qualquer uma de suas janelas de edição de texto de campo
Memo ativas e visíveis (abertas). Em seguida, você poderá retornar à janela Pesquisar depois de
percorrer as outras janelas abertas com o teclado ou o mouse.

SAVE só está disponível dentro de um programa, e não tem qualquer efeito quando incluída com
BROWSE na janela Comando, pois BROWSE SAVE é sempre o padrão no modo interativo.

TIMEOUT nSegundos Especifica quanto tempo uma janela Pesquisar pode aguardar entrada.
expressão numérica nSegundos especifica quantos segundos podem decorrer sem nenhuma entrada
antes do fechamento automático da janela Pesquisar.

TIMEOUT só está disponível dentro de um programa, não apresentando qualquer efeito quando
BROWSE é emitido na janela Comando. No exemplo a seguir, a janela Pesquisar será fechada caso
não ocorra nenhuma entrada dentro de 10 segundos.

DEFINE WINDOW wBrowse FROM 1,1 TO 24,40 ;


CLOSE ;
GROW ;
COLOR SCHEME 10
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
BROWSE WINDOW wBrowse ;
FIELDS phone :H = 'Phone Number:' , ;
company :H = 'Company:' ;
TIMEOUT 10
RELEASE WINDOW wBrowse

TITLE cTextoTítulo Substitui o alias ou o nome de tabela padrão exibido na barra de título da
janela Pesquisar pelo título especificado com cTextoTítulo. Caso contrário, o nome ou o alias da
tabela que está sendo pesquisada será exibido na barra de título.

Se BROWSE WINDOW for emitido para colocar a janela Pesquisar em outra, definida pelo
usuário, o título desta janela substituirá o título da outra.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
BROWSE;
TITLE 'My Browse Window' ;
FIELDS phone :H = 'Phone Number' , ;
company :H = 'Company:'

VALID lExpressão2 Executa a validação em nível de registro em uma janela Pesquisar. A


cláusula VALID só será executada se houver uma alteração no registro e você tentar mover o cursor
para outro registro. A cláusula VALID não será executada se a única alteração feita for em um
campo Memo.

Se VALID retornar um valor verdadeiro (.T.), o usuário poderá mover o cursor para outro registro.
Se VALID retornar um valor falso (.F.), o cursor permanecerá no campo atual e o Visual FoxPro irá
gerar uma mensagem de erro. Se VALID retornar 0, o cursor permanecerá no campo atual e não
será exibida nenhuma mensagem de erro.

A cláusula VALID não deve ser confundida com a opção de verificação (:V), que permite a
validação em nível de campo.

:F Força a execução da cláusula VALID antes de o usuário mover o cursor para o registro
seguinte. Nesse caso, VALID é executada mesmo que o registro não seja alterado.

ERROR cTextoMensagem Especifica uma mensagem de erro que substitui a mensagem de erro
padrão do sistema. O Visual FoxPro exibe cTextoMensagem quando VALID retorna falso (.F.).

WHEN lExpressão3 Avalia uma condição quando o usuário move o cursor para outro registro. Se
lExpressão3 resultar em verdadeiro (.T.), o usuário poderá modificar o registro para o qual se
moveu. Se lExpressão3 resultar em falso (.F.) ou 0, o registro para o qual o usuário se moveu se
tornará somente para leitura e não poderá ser modificado

A cláusula WHEN não é executada quando outra janela está ativada.

WIDTH nLarguraCampo Limita o número de caracteres exibidos para todos os campos em uma
janela Pesquisar a nLarguraCampo. O conteúdo de um campo pode ser rolado horizontalmente,
utilizando as teclas de Seta à Direita e Seta à Esquerda ou a barra de rolagem horizontal. A inclusão
da cláusula WIDTH não altera o tamanho dos campos da tabela; ela altera somente a maneira como
os campos são exibidos na janela Pesquisar. Caso uma largura tenha sido especificada para um
campo individual com a cláusula FIELDS, ela substituirá a largura especificada com a cláusula
WIDTH para esse campo.

WINDOW NomeJanela1 Especifica uma janela definida pelo usuário cujas características são
assumidas pela janela Pesquisar. Por exemplo, se a janela definida pelo usuário for criada com a
cláusula FLOAT, a janela Pesquisar poderá ser movida. A janela especificada não precisa estar
ativa ou visível, mas deve estar definida.

IN [WINDOW] NomeJanela2 Especifica a janela pai dentro da qual a janela Pesquisar é aberta. A
janela Pesquisar não assume as características da janela pai. Uma janela Pesquisar ativada dentro de
uma janela pai não pode ser deslocada para fora dela. Caso a janela pai seja movida, a janela
Pesquisar a acompanhará.

Para acessar a janela Pesquisar, a janela pai deverá primeiro ser definida com DEFINE WINDOW
e deverá estar ativa e visível.
IN SCREEN Coloca explicitamente uma janela Pesquisar na janela principal do Visual FoxPro,
quando uma definida pelo usuário está ativa.

COLOR SCHEME nNúmeroEsquema Especifica o número de um esquema de cores utilizado para


as cores da janela Pesquisar.

A janela Pesquisar assume o esquema de cores estabelecido com o uso da opção Cor do painel de
controle do Windows.

Comentários

Uma janela Pesquisar permite que você visualize os registros de uma tabela, edite esses registros e
inclua registros adicionais. O Visual FoxPro permite que várias janelas Pesquisar fiquem abertas ao
mesmo tempo.

Se você pressionar ESC para sair da janela Pesquisar, as alterações feitas no último campo
modificado serão descartadas. No entanto, se você mover para outro registro após modificar um
campo, as alterações feitas nele serão salvas.

Para obter informações sobre como navegar na janela Pesquisar, consulte o capítulo 2, “Criando
tabelas e índices”, no Guia do usuário.

A lista de campos pode especificar qualquer combinação de campos ou campos calculados.

A sintaxe da lista de campo é:

FieldName1
[:R]
[:nColumnWidth]
[:V = lExpression1 [:F] [:E = cMessageText]]
[:P = cFormatCodes]
[:B = eLowerBound, eUpperBound [:F]]
[:H = cHeadingText]
[:W = lExpression2]
[, FieldName2 [:R]...]

Campos calculados… A lista de campos pode conter instruções para a criação de campos
calculados. Um campo calculado contém dados somente para leitura criados com uma expressão.
Esta pode ter qualquer forma, mas deve ser do Visual FoxPro.

O formato da instrução que você utiliza para criar um campo calculado é o seguinte:

NomeCampoCalculado = eExpressão

Este exemplo cria um campo calculado chamado location:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
BROWSE FIELDS location = ALLTRIM(city) + ', ' + country

City e Country são os nomes dos campos da tabela selecionada no momento.

A lista de campos da cláusula FIELDS inclui opções que permitem a manipulação especial dos
campos exibidos em uma janela Pesquisar:

:R Especifica que o campo é somente para leitura. Os dados contidos no campo podem ser
visualizados, mas não editados.

No exemplo a seguir, uma janela Pesquisar é aberta com os campos Cust_id e Company. O campo
Cust_id é somente para leitura e não pode ser alterado.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
BROWSE FIELDS Cust_id:R, Company

:nLarguraColuna Especifica o tamanho de exibição para um campo em colunas. O valor de


nLarguraColuna não afeta o tamanho do campo na tabela; apenas altera a forma de exibição do
campo na janela Pesquisar.

:V = lExpressão1 [:F] [:E = cTextoMensagem] Permite que você execute validação de dados em
nível de campo dentro da janela Pesquisar. Se lExpressão1 resultar em verdadeiro (.T.) quando o
cursor for movido de um campo, a entrada de dados nele será considerada correta e o cursor se
moverá para o campo seguinte.

If lExpressão1 resultar em falso (.F.), a entrada de dados será considerada incorreta, o cursor
permanecerá no campo e uma mensagem será exibida. Se lExpressão1 resultar em 0, a entrada de
dados será considerada incorreta e o cursor permanecerá no campo e nenhuma mensagem de erro
será exibida.

A opção de verificação não é executada para campos Memo.

Como padrão, lExpressão1 será avaliada somente quando o campo for modificado. Para forçar a
verificação, inclua a opção :F.

É possível exibir a sua própria mensagem de erro, incluindo a opção :E descrita abaixo.

:F Determina se a expressão na opção de verificação será avaliada quando o cursor for movido
para fora de um campo ou outra janela for ativada. Se a opção :F não estiver incluída, lExpressão1
só será avaliado se forem feitas alterações no campo. Se a opção :F estiver incluída, lExpressão1
será avaliada mesmo se o campo não for modificado.

:E = cTextoMensagem Se a expressão de validação :V = lExpressão1 resultar em verdadeiro (.T),


o cursor deixará o campo normalmente. Se a expressão resultar em falso (.F.), o cursor permanecerá
no campo e o Visual FoxPro exibirá uma mensagem de erro.
Se a opção de erro (:E) for incluída, cTextoMensagem aparecerá no lugar da mensagem de erro do
sistema. cTextoMensagem aparecerá somente se SET NOTIFY estiver ativado (ON). A campainha
soará se SET BELL estiver ativado (ON).

Se :V = lExpressão1 resultar em 0, nenhuma mensagem será exibida e o cursor permanecerá no


campo que está sendo validado. Esta opção permite que você exiba as suas próprias mensagens de
erro em rotinas de validação.

O exemplo a seguir abre a tabela products e exibe os campos Product_id e Prod_name. O campo
Product_id é um campo numérico que aceitará até cinco números. Para este exemplo, consideramos
um campo Product_id maior que 100 como não-válido.

:V especifica os critérios de validação. :F força a verificação da validação a ser executada se os


dados forem alterados ou não. :E substitui a mensagem de erro do sistema do Visual FoxPro por
uma definida pelo usuário. No Visual FoxPro, a mensagem de erro é exibida na barra de status na
parte inferior da janela principal.

Pressione ESC para fechar a janela Pesquisar.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
IF _WINDOWS OR _MAC
SET STATUS BAR ON
ENDIF
USE products
BROWSE FIELDS in_stock :V = in_stock < 100 ;
:F ;
:E = 'O valor do estoque deve ser inferior a 100'

:P = cCódigosFormato Se você incluir uma cláusula FIELDS, também poderá especificar uma
opção de figura (:P) para cada campo na lista. Ela permite que você crie uma lista de códigos que
controle a exibição e a entrada de dados para cada campo em uma janela Pesquisar.
cCódigosFormato é a lista de códigos.

O exemplo a seguir utiliza a opção de figura para permitir apenas a inserção de dados numéricos em
um formato específico no campo unit_price:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
BROWSE FIELDS unit_price :P = '99,999.99'

Consulte as propriedades Format e InputMask para obter maiores informações sobre os códigos de
opção de figura.
:B = eLigaçãoInferior eLigaçãoSuperior [:F] Especifica um conjunto de limites no qual os dados
em um campo devem se encontrar. As expressões de limite eLigaçãoInferior e eLigaçãoSuperior
devem corresponder ao tipo de dados do campo. Elas não podem ser funções definidas pelo usuário.
Se os dados digitados não estiverem no intervalo entre eLigaçãoInferior e eLigaçãoSuperior, uma
mensagem de erro do sistema será exibida indicando onde os dados devem se encontrar.

Como padrão, os dados digitados só serão verificados com os valores de limite se você alterar o
conteúdo do campo. Para forçar esta verificação, inclua a opção de validação forçada (:F).

O exemplo a seguir assegura que o valor no campo In_stock se encontre entre 1 e 100. Pressione
ESC para fechar a janela Pesquisar.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
BROWSE FIELDS in_stock :B = 1, 100 :F

:H = cTextoCabeçalho Substitui os nomes de campo padrão pelos seus próprios cabeçalhos, que
são especificados com cTextoCabeçalho. Como padrão, os nomes de campos são utilizados como
cabeçalhos de coluna na janela Pesquisar.

O exemplo a seguir fornece cabeçalhos definidos pelo usuário para os campos exibidos.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
BROWSE FIELDS prod_name :H = 'Product Name:', ;
unit_price :H = 'Price per Unit:'

:W = lExpressão2 Determina se o cursor pode ser movido para um campo. Se lExpressão2 resultar
em falso (.F.), será proibido mover o cursor para o campo. Se lExpressão2 resultar em verdadeiro
(.T.), o cursor poderá ser movido para o campo. As funções definidas pelo usuário são suportadas
em lExpressão2.

Se for proibida a movimentação do cursor para todos os campos, o registro atual será marcado
como somente para leitura. Isto só ocorrerá quando cada campo contiver uma cláusula WHEN que
resulte em falsa.

Suporte SET SKIP… SET SKIP permite que você estabeleça um relacionamento um-para-n entre
duas tabelas. Para cada registro da tabela pai, podem existir vários registros relacionados na tabela
filho. Se você criar um relacionamento um-para-n, poderá utilizar BROWSE para visualizar
registros das tabelas pai e filho.

O registro pai é exibido uma vez, junto com o primeiro registro correspondente da tabela filho. Os
registros correspondentes subseqüentes são exibidos nas linhas após o registro pai e o primeiro
registro filho correspondente. O caractere de preenchimento para informações pai repetidas depende
da fonte atual da janela Pesquisar.
Caso o ponteiro do registro esteja posicionado em um registro pai, você poderá movê-lo entre os
registros pai na janela Pesquisar, pressionando as teclas CTRL+SETA ABAIXO para mover-se para
o próximo registro pai ou CTRL+SETA ACIMA para mover-se para o registro pai anterior. Para
obter maiores informações sobre como criar relacionamentos um-para-n, consulte SET SKIP.

O exemplo a seguir utiliza SET SKIP para criar um relacionamento um-para-n entre duas tabelas.
Na tabela pai (customer) existe um único registro. A tabela filho (orders) contém vários registros
para cada registro da tabela pai. Depois de criado o relacionamento, é aberta uma janela Pesquisar
que exibe registros das tabelas pai e filho.

A lista de campos da cláusula FIELDS contém registros das tabelas pai e filho. Os nomes dos
campos são precedidos do respectivo alias de tabela (orders ou customer) e de um ponto.

CLEAR
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer ORDER cust_id IN 0 && Tabela pai
USE orders ORDER cust_id IN 0 && Tabela filho
SELECT customer && Volta à Área de trabalho pai
SET RELATION TO cust_id INTO orders && Estabelece relacionamento
SET SKIP TO orders && Relacionamento um-para-n
WAIT WINDOW 'Role para ver as datas de expedição para cada cliente' NOWAIT
BROWSE FIELDS customer.cust_id :H='Número do Cliente', ;
customer.city :H='Cidade do Cliente', orders.shipped_on

Funções úteis … Várias funções do Visual FoxPro retornam informações úteis sobre uma janela
Pesquisar.

Função Descrição

VARREAD( ) Retorna o nome do campo onde se encontra o cursor na janela Pesquisar.


RECNO( ) Retorna o número do registro selecionado na janela Pesquisar ativa.

BUILD EXE, comando

Cria um arquivo executável a partir de um projeto.

Sintaxe

BUILD EXE NomeArquivoEXE FROM NomeProjeto [RECOMPILE]

Argumentos

NomeArquivoEXE Especifica o nome do arquivo executável a ser criado. Caso exista um arquivo
de aplicativo .APP com o mesmo nome de arquivo raiz do arquivo executável independente, ele
será excluído. Se existir um arquivo executável e você criar um arquivo .APP com o mesmo nome,
o arquivo executável será excluído.
FROM NomeProjeto Especifica o nome do projeto a partir do qual o arquivo executável é criado.

RECOMPILE Especifica que o projeto é compilado antes da criação do arquivo executável. Todos
os arquivos de formato e de programa; formulário, etiqueta, relatório e código de origem de
biblioteca de classe visual, bem como procedimentos armazenados nos bancos de dados do projeto,
são compilados.

Comentários

Para obter informações adicionais sobre a criação de arquivos executáveis, consulte o capítulo 25,
“Construindo um aplicativo para distribuição”, no Guia do Desenvolvedor.

Um arquivo executável criado com BUILD EXE exige dois arquivos de suporte: VFP500.DLL e
VFP5ENU.DLL (EN denota a versão em inglês). Esses arquivos devem ser colocados no mesmo
diretório que o arquivo executável ou junto ao caminho do MS-DOS.

Se o arquivo executável contém as definições de classe OLEPUBLIC, BUILD EXE


automaticamente registra as definições de classe OLEPUBLIC no registro do sistema. As definições
de classe OLEPUBLIC aparecem na caixa de listagem Classes do servidor, na guia Servidores da
caixa de diálogo Informações sobre o projeto.

BUILD EXE também cria arquivos .VBR (registro) e .TLB (biblioteca de tipos) com o mesmo
nome do arquivo executável. O arquivo .VBR permite registrar as definições de classe no registro
do sistema quando o arquivo executável é movido para um computador diferente. O arquivo .TLB
deve ser utilizado com pesquisadores de objeto.

Para obter maiores informações sobre o registro das definições de classe OLEPUBLIC em um
arquivo executável, consulte “Criando servidores OLE personalizados” no capítulo 16,
“Adicionando a OLE”, no Guia do Desenvolvedor.

BUILD PROJECT, comando

Cria e constrói um arquivo de projeto.

Sintaxe

BUILD PROJECT NomeArquivoProjeto


FROM NomePrograma1 | NomeMenu1 | NomeRelatório1 | NomeEtiqueta1
| NomeFormulário1 | NomeBiblioteca1
[, NomePrograma2 | NomeMenu2 | NomeRelatório2 | NomeEtiqueta2
| NomeFormulário2 | NomeBiblioteca2 ...]

Argumentos

NomeArquivoProjeto Especifica o nome da tabela de projeto a ser criada.

FROM NomePrograma1 | NomeMenu1 | NomeRelatório1 | NomeEtiqueta1


| NomeFormulário1 | NomeBiblioteca1 Especifica os arquivos a serem incluídos no projeto. É
possível especificar um ou mais arquivos de programa, menu, relatório, etiqueta, formulário ou
biblioteca e o projeto irá controlar esses arquivos, bem como as dependências, referências e
conexões entre eles.

Como padrão, o primeiro arquivo de menu ou programa executável na cláusula FROM é o arquivo
de programa mestre do projeto.

Comentários

BUILD PROJECT cria automaticamente uma tabela de projeto com uma extensão de nome de
arquivo .PJX ao abrir e processar um ou mais arquivos de programa, menu, relatório, etiqueta,
formulário ou biblioteca especificados. Você pode utilizar o arquivo de projeto para criar um dentre
dois tipos de programa: um arquivo de aplicativo com uma extensão .APP ou um arquivo
executável com uma extensão .EXE. A tabela de projeto controla todos os arquivos necessários para
a criação de um aplicativo, bem como as dependências, referências e conexões entre os arquivos.
Uma vez que as partes do projeto forem especificadas, o Visual FoxPro certifica-se de que o
aplicativo está baseado nos arquivos fonte mais recentes.

Para obter maiores informações sobre a criação de projetos, consulte o capítulo 13, “Compilando
um aplicativo”, no Guia do Desenvolvedor.

Quando o Visual FoxPro encontra um arquivo de programa, menu ou formulário ao criar um


arquivo de projeto com BUILD PROJECT, ele procura seu arquivo compilado e compara a marca
de data e hora dos dois arquivos. Caso a marca de data e hora do arquivo fonte seja posterior à do
arquivo compilado, o Visual FoxPro irá recompilar o arquivo fonte.

Cada arquivo de projeto contém uma marca de data e hora para que você possa atualizá-lo quando
fizer alterações nos arquivos do projeto ou quando as dependências forem alteradas. Isso ajuda a
garantir que qualquer aplicativo criado a partir de um arquivo de projeto sempre utilizará os
arquivos fonte mais recentes. Para atualizar um arquivo de projeto, emita BUILD PROJECT sem a
cláusula opcional FROM. Em seguida, o Visual FoxPro atualizará o projeto especificado.

Quando você emite BUILD PROJECT, referências não resolvidas e outros erros são reportados,
mas não impedem que o arquivo de projeto seja criado. Isso permite criar um projeto mesmo que
todas as partes necessárias não tenham sido de fato criadas ou não estejam disponíveis no momento
que o projeto é criado. Referências não resolvidas e outros problemas poderão ser corrigidos
atualizando-se o arquivo de projeto em uma data posterior ou modificando-se manualmente as
informações armazenadas no arquivo de projeto com MODIFY PROJECT.

IIM
MPPO
ORRTTA
ANNTTEE :: CCoom
moo ggeerraarr uum
m ..EEX
XEE

.. CCrriiaarr oo ..PPRRG G ((CCoom


m uum m eeddiittoorr))
.. EExxeeccuuttaarr oo ccoom
maannddoo BBU
UIILLD D PPRRO OJJEECCTT nnoom
mee--11 FFRRO
OMM nnoom
mee--pprrgg
.. EExxeeccuuttaarr oo ccoom
maannddoo BBU
UIILLD D EEX XEE nnoom
mee-exe FROM nome-1
CALCULATE, comando

Executa operações financeiras e estatísticas em campos de uma tabela ou em expressões que


envolvem campos.

Sintaxe

CALCULATE eListaExpressões
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[TO ListaVarMem | TO ARRAY NomeMatriz]
[NOOPTIMIZE]

Argumentos

eListaExpressão Especifica as expressões que podem conter qualquer combinação das seguintes
funções:

AVG(nExpressão)

CNT( )

MAX(eExpressão)

MIN(eExpressão)

NPV(nExpressão1, nExpressão2 [, nExpressão3])

STD(nExpressão)

SUM(nExpressão)

VAR(nExpressão)

Na lista de expressões eListaExpressões, as funções são separadas por vírgulas. Essas funções são
específicas do comando CALCULATE e serão descritas em maiores detalhes posteriormente nesta
seção. Elas não devem ser confundidas com as funções independentes de mesmo nome. Por
exemplo, CALCULATE MIN( ) não é igual a MIN( ).

Escopo Especifica um intervalo de registros utilizados no cálculo. Apenas os registros dentro do


intervalo são incluídos no cálculo. As cláusulas de escopo são: ALL, NEXT nRegistros, RECORD
nNúmeroRegistro e REST. Para obter maiores informações sobre as cláusulas de escopo, consulte o
tópico ” Cláusulas de escopo”. Os comandos que incluem Escopo operam somente na tabela da
Área de trabalho ativa.

O escopo padrão para CALCULATE é ALL, ou seja todos os registros.


FOR lExpressão1 Especifica que somente os registros que satisfazem a condição lógica
lExpressão1 serão incluídos no cálculo. A inclusão de uma cláusula FOR resulta na inclusão
condicional dos registros no cálculo, filtrando os registros indesejáveis.

Rushmore otimizará uma consulta CALCULATE ... FOR se lExpressão1 for uma expressão
otimizável. Para um melhor desempenho, use uma expressão otimizável na cláusula FOR. Para
obter maiores informações sobre expressões otimizáveis Rushmore, consulte SET OPTIMIZE e
“Compreendendo a tecnologia Rushmore” no capítulo 15, “Otimizando aplicativos”, no Guia do
Desenvolvedor.

WHILE lExpressão2 Especifica uma condição pela qual os registros serão incluídos no cálculo
desde que a expressão lógica lExpressão2 resulte em verdadeiro (.T.).

TO ListaVarMem Especifica uma ou mais variáveis de memória nas quais os resultados do cálculo
são armazenados. Se você especificar uma variável de memória que não existe, o Visual FoxPro irá
criá-la automaticamente com o nome especificado.

TO ARRAY NomeMatriz Especifica um nome de matriz na qual os resultados do cálculo podem


ser armazenados. Se você especificar um nome de matriz que não existe, o Visual FoxPro criará
uma matriz automaticamente com o nome especificado. Se a matriz existir, mas não for grande o
bastante para conter todos os resultados do cálculo, o Visual FoxPro aumentará automaticamente o
tamanho da matriz para abrir espaço para as informações. Se uma matriz existente for maior do que
o necessário, os elementos adicionais permanecerão inalterados. Os resultados são armazenados nos
elementos da matriz na ordem em que são especificados no comando CALCULATE.

NOOPTIMIZE Desativa a otimização Rushmore de CALCULATE. Para obter maiores


informações, consulte ” SET OPTIMIZE” e “Compreendendo a tecnologia Rushmore” no capítulo
15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

AVG(nExpressão) Calcula a média aritmética de nExpressão. Somente os registros que


correspondam ao Escopo e/ou à condição opcional FOR ou WHILE serão incluídos no resultado.

CNT( ) Retorna o número de registros da tabela. Somente os registros que correspondam ao


Escopo e/ou à condição opcional FOR ou WHILE serão incluídos no resultado.

MAX(eExpressão) Retorna o valor mais alto ou mais recente de eExpressão. Na cláusula MAX( ),
pode ser especificado qualquer campo do tipo inteiro, numérico, flutuante, duplo, de caractere, de
data, de datahora ou de moeda, ou qualquer expressão que utilize campos desses tipos. Somente os
registros que correspondam ao Escopo e/ou à condição opcional FOR ou WHILE serão incluídos no
resultado.

MIN(eExpressão) Retorna o valor mais baixo ou mais antigo de eExpressão. Qualquer campo de
caractere, data, datahora, numérico, flutuante, inteiro, duplo ou de moeda, ou qualquer expressão
válida que utilize campos destes tipos pode ser incluída em e
Expressão. Apenas os registros que correspondam ao Escopo e/ou à condição opcional FOR ou
WHILE são incluídos no resultado.

NPV(nExpressão1, nExpressão2 [, nExpressão3]) Calcula o valor presente líquido de uma série de


fluxos de caixa futuros descontados a uma taxa de juros periódica e constante.

nExpressão1 especifica a taxa de juros expressa como um valor decimal.


nExpressão2 especifica um campo, uma expressão de campo ou uma expressão numérica que
representa uma série de fluxos de caixa. Cada fluxo de caixa pode ser positivo ou negativo. Nos
casos em que nExpressão2 for um campo, o valor de cada registro do campo será considerado um
fluxo de caixa.

nExpressão3 especifica um investimento inicial opcional. Caso o investimento inicial não for
incluído, será admitido que ele ocorra no final do primeiro período. Esse investimento inicial é o
primeiro registro do campo, sendo negativo a fim de representar uma saída de caixa.

Somente os registros que correspondam ao Escopo e/ou à condição opcional FOR ou WHILE serão
incluídos no resultado.

STD(nExpressão) Calcula o desvio padrão de nExpressão. O desvio padrão mede o grau em que os
valores dos campos ou das expressões que envolvem campos diferem da média de todos os valores.
Quanto menor for o desvio padrão, menor será a variação entre os valores e a média. Somente os
registros que correspondam ao Escopo e/ou à condição opcional FOR ou WHILE serão incluídos no
resultado.

SUM(nExpressão) Totaliza os valores de nExpressão. Somente os registros que correspondam ao


Escopo e/ou à condição opcional FOR ou WHILE serão incluídos no resultado.

VAR(nExpressão) Calcula a variância da média de nExpressão. A variância é o desvio padrão


elevado ao quadrado. Quanto menor for a variância, menor será a variação entre os valores e a
média. Somente os registros que correspondam ao Escopo e/ou à condição opcional FOR ou
WHILE serão incluídos no resultado.

Comentários

Registros que contenham valores nulos não serão incluídos nas operações executadas por
CALCULATE.

CALCULATE, exemplo do comando

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE orders && Abre a tabela Orders

SET TALK ON
CLEAR
CALCULATE AVG(order_amt), MIN(order_amt), MAX(order_amt)
CALCULATE STD(order_amt), VAR(order_amt) TO gnStd, gnVar

CANCEL, comando

Finaliza a execução do arquivo de programa atual do Visual FoxPro.

Sintaxe
CANCEL

Comentários

O controle retornará à janela Comando quando o Visual FoxPro estiver sendo utilizado de forma
interativa. Se um aplicativo distribuído em tempo de execução estiver sendo executado, CANCEL
terminará o aplicativo e o controle retorna ao Windows. Se um programa estiver sendo executado
no Visual FoxPro na hora da criação, CANCEL terminará o programa e o controle retorna à janela
Comando.

A execução de CANCEL libera todas as variáveis privadas.

CANCEL, exemplo do comando

O exemplo a seguir simula um loop de execução do programa. Pelo loop, você é solicitado a
informar se deseja continuar. Se pressionar o botão Cancelar, CANCEL pára a execução do
programa.

DO WHILE .T.
IF MESSAGEBOX("Deseja continuar?",36) <> 6
CANCEL
ENDIF
ENDDO

CAPSLOCK( ), função

Retorna o modo atual da tecla CAPS LOCK ou ativa ou desativa o modo dessa tecla.

Sintaxe

CAPSLOCK([lExpressão])

Tipos de retorno

Lógico

Argumentos

lExpressão Incluída para ativar ou desativar a tecla CAPS LOCK. CAPSLOCK(.T.) ativa CAPS
LOCK e CAPSLOCK(.F.) desativa CAPS LOCK. Um valor lógico correspondente à definição de
CAPS LOCK é emitido antes de CAPSLOCK(.T.) ou CAPSLOCK(.F.).

Comentários

A emissão de CAPSLOCK( ) sem argumentos retornará verdadeiro (.T.), caso CAPS LOCK estiver
ativado ou falso (.F.), caso CAPS LOCK estiver desativado.
CAPSLOCK( ), exemplo da função

O código a seguir armazena o estado de CAPSLOCK( ) para uma variável do sistema. O comando =
executa a função CAPSLOCK( ) para ativar CAPS LOCK. Em seguida, o comando = executa a
função CAPSLOCK( ) para definir CAPS LOCK como seu estado anterior.

glOldLock = CAPSLOCK( ) && Grava a definição original


= CAPSLOCK(.T.) && Ativa CAPS LOCK

*** Executar qualquer número de instruções ***

= CAPSLOCK(glOldLock) && Retorna à definição original

*** ou, alterne CapsLock para o valor oposto e anterior ***

= CAPSLOCK(!CAPSLOCK( ))
WAIT WINDOW
= CAPSLOCK(!CAPSLOCK( ))
WAIT WINDOW
= CAPSLOCK(glOldLock) && Retorna à definição original

CD | CHDIR, comando

Altera o diretório padrão do Visual FoxPro para o diretório especificado.

Sintaxe

CD cCaminho | CHDIR cCaminho

Argumentos

cCaminho Especifica um dos itens a seguir:

· Um designador de unidade de disco.


· Um designador de unidade de disco com um diretório.
· Um diretório filho.
· Qualquer opção acima usando a notação abreviada do MS-DOS ( \ ou ..). Quando você
inclui .. para alterar ao diretório pai, deve acrescentar um espaço entre CD ou CHDIR e os dois
pontos.

Comentários

Utilize CD ou CHDIR para especificar o diretório padrão do Visual FoxPro. O Visual FoxPro
procura arquivos no diretório padrão do Visual FoxPro. Caso o Visual FoxPro não localize um
arquivo no diretório padrão, ele irá procurar no caminho do Visual FoxPro, caso tenha sido
especificado. Utilize SET PATH para especificar o caminho do Visual FoxPro.

Se você criar um arquivo e não especificar onde deverá ser colocado, ele será colocado no diretório
padrão do Visual FoxPro.
CD | CHDIR, exemplo do comando

O exemplo a seguir utiliza MKDIR para criar um novo diretório denominado mytstdir. Em seguida,
CHDIR é utilizado para alterar o novo diretório. GETDIR( ) é utilizado para exibir a estrutura
do diretório e, em seguida, RMDIR para remover o diretório mais recente. GETDIR( ) é usado para
exibir novamente a estrutura do diretório.

SET DEFAULT TO HOME( ) && Restaura o diretório do Visual FoxPro


MKDIR mytstdir && Cria um novo diretório
CHDIR mytstdir && Altera para o novo diretório
= GETDIR( ) && Exibe a caixa de diálogo Selecionar diretório
SET DEFAULT TO HOME( ) && Restaura o diretório do Visual FoxPro
RMDIR mytstdir && Remove o novo diretório
= GETDIR( ) && Exibe a caixa de diálogo Selecionar diretório

CDOW( ), função

Retorna o dia da semana de uma determinada expressão de data ou de data e hora.

Sintaxe

CDOW(dExpressão | tExpressão)

Tipos de retorno

Caractere

Argumentos

dExpressão Especifica a data a partir da qual CDOW( ) retorna o dia.

tExpressão Especifica a data e hora a partir da qual CDOW( ) retorna o dia.

Comentários

CDOW( ) retorna o nome do dia da semana como uma seqüência no formato de nome próprio.

CDOW( ), exemplo da função

STORE {02/16/95} TO gdDate Exibe quinta-feira


CLEAR
? CDOW(gdDate) &&
CDX( ), função

Retorna o nome do arquivo de índice composto aberto (.CDX) que tem o número de posição de
índice especificado.

Sintaxe

CDX(nNúmeroÍndice [, nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Caractere

Argumentos

nNúmeroÍndice A descrição a seguir é relativa a uma tabela com um índice composto estrutural e
um ou mais índices compostos:

nNúmeroÍndice Descrição

1 Retorna o nome do arquivo de índice estrutural(que é sempre o mesmo que o nome da


tabela).
2 Retorna o primeiro nome de arquivo de índice composto especificado na cláusula INDEX
de USE ou em SET INDEX.
3 Retorna o segundo nome de arquivo de índice composto, se presente, e assim por diante.
Maior que o número de arquivos .CDX abertos Retorna a seqüência vazia.

A descrição a seguir é relativa a uma tabela sem índice composto estrutural e com um ou mais
índices compostos:

nNúmeroÍndice Descrição

1 Retorna o primeiro nome de arquivo de índice composto especificado na cláusula INDEX


de USE ou em SET INDEX.
2 Retorna o segundo nome de arquivo de índice composto, se presente, e assim por diante.
Maior que o número de arquivos .CDX abertos Retorna a seqüência vazia.

nÁreaTrabalho Especifica o número da Área de trabalho de uma tabela, cujos nomes de arquivos
de índice composto abertos você deseja que sejam retornados por CDX( ).
cAliasTabela Especifica o alias de uma tabela, cujos nomes de arquivos de índice composto
abertos você deseja que sejam retornados por CDX( ).

Se você omitir nÁreaTrabalho e cAliasTabela, serão retornados os nomes dos arquivos de índice
composto correspondentes à tabela na Área de trabalho selecionada no momento.

Comentários
A função CDX( ) é idêntica à função MDX( ).
Um índice .CDX (composto) consiste em um arquivo físico contendo várias marcas de índice. Cada
marca é uma referência de ordem de índice para a tabela associada.
Há dois tipos de arquivos .CDX: índice composto padrão (.CDX) e .CDX estrutural. Um índice
composto padrão (.CDX) pode ter um nome diferente da tabela associada e pode residir em um
diretório diferente da tabela associada. Uma tabela pode ter vários arquivos de índice composto. Um
índice composto é aberto com a cláusula INDEX de USE ou com SET INDEX.

Um .CDX estrutural deve ter o mesmo nome da tabela associada e residir no mesmo diretório. Uma
tabela pode ter somente um arquivo de índice estrutural. Os arquivos .CDX estruturais são abertos e
atualizados automaticamente quando a tabela associada é aberta com USE.
CDX( ) ignora qualquer arquivo .IDX (índice compatível com FoxBASE+ e FoxPro 1.0)
especificados em USE ou SET INDEX.
Utilize TAG( ) para retornar nomes de marcas individuais contidos em um .CDX e NDX( ) para
retornar o nome dos arquivos .IDX abertos.

Quando SET FULLPATH estiver ON, CDX( ) retornará o caminho e o nome de .CDX. Quando
SET FULLPATH estiver OFF, CDX( ) retornará a unidade de disco e o nome de .CDX.

CDX( ), exemplo da função

O exemplo a seguir abre a tabela customer no banco de dados testdata. FOR ... ENDFOR é utilizado
para criar um loop em que o nome de cada índice estrutural é exibido.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer

CLEAR
FOR nCount = 1 TO 254
IF !EMPTY(TAG(nCount)) && Verifica marcas no índice
? CDX(nCount) && Exibe nomes de índice estrutural
ELSE
EXIT && Sai do loop quando não são mais encontradas marcas
ENDIF
ENDFOR

CEILING( ), função

Retorna o próximo inteiro maior ou igual à expressão numérica especificada.

Sintaxe

CEILING(nExpressão)

Tipos de retorno
Numérico

Argumentos

nExpressão Especifica o número cujo próximo inteiro maior é retornado por CEILING( ).

Comentários

CEILING arredonda um número com fração para o próximo inteiro maior.

CEILING( ), exemplo de função

STORE 10.1 TO num1


STORE -10.9 TO num2
? CEILING(num1) && Exibe 11
? CEILING(num2) && Exibe -10
? CEILING(10.0) && Exibe 10
? CEILING(-10.0) && Exibe -10

CHANGE, comando

Exibe campos para edição.

Sintaxe

CHANGE
[FIELDS ListaCampos]
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[FONT cNomeFonte [,nTamanhoFonte]]
[STYLE cEstiloFonte]
[FREEZE NomeCampo]
[KEY eExpressão1 [, eExpressão2]]
[LAST | NOINIT]
[LPARTITION]
[NAME NomeObjeto]
[NOAPPEND]
[NOCLEAR]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NORMAL]
[NOWAIT]
[PARTITION nNúmeroColuna [LEDIT] [REDIT]]
[PREFERENCE NomePreferência]
[REST]
[SAVE]
[TIMEOUT nSegundos]
[TITLE cTextoTítulo]
[VALID [:F] lExpressão3 [ERROR cTextoMensagem]]
[WHEN lExpressão4]
[WIDTH nLarguraCampo]
[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN | IN MACDESKTOP]]
[COLOR SCHEME nNúmeroEsquema
| COLOR ListaParesCores]

Argumentos

Os argumentos de CHANGE são iguais aos de EDIT. Consulte EDIT para obter uma descrição dos
argumentos.

Comentários

CHANGE funciona da mesma forma que EDIT.

CHR( ), função

Retorna o caractere associado ao código numérico ANSI especificado.

Sintaxe

CHR(nCódigoANSI)

Tipos de retorno

Caractere

Argumentos

nCódigoANSI Especifica um número entre 0 e 255, cujo caractere ANSI equivalente é retornado
por CHR( ).

Utilize ASC( ) para retornar o valor ANSI para um caractere específico.

Comentários

CHR( ) retorna um caractere único correspondente à posição numérica do caractere na tabela de


caracteres da página de código atual. CHR( ) pode ser utilizado para enviar códigos de controle de
impressão para a impressora.

CHR( ), exemplo de função


O exemplo a seguir exibe os números 65 a 75 e utiliza CHR( ) para exibir seus valores de caractere
A a K correspondentes.

CLEAR
FOR nCOUNT = 65 TO 75
? nCount && Exibe o valor numérico
?? ' ' + CHR(nCount) && Exibe o caractere
ENDFOR

CHRSAW( ), função

Determina se um caractere está presente ou não no buffer de teclado.

Sintaxe

CHRSAW([nSegundos])

Tipos de retorno

Lógico

Argumentos

nSegundos Especifica o tempo em segundos que CHRSAW( ) espera antes de verificar o buffer do
teclado. O buffer do teclado será verificado imediatamente se nSegundos for omitido.

A inclusão de nSegundos permite que você utilize CHRSAW( ) para diversas atividades com
intervalo de tempo determinado. Por exemplo, seu programa pode fechar um aplicativo se uma tecla
não for pressionada após um número específico de segundos.

Comentários

CHRSAW( ) retornará verdadeiro (.T.) se um caractere estiver presente no buffer do teclado; caso
contrário, retornará falso (.F.). CHRSAW( ) não afeta o conteúdo do buffer do teclado.

CHRSAW( ), exemplo de função

No exemplo a seguir, o sistema exibe uma janela que contém campos de entrada criados com os
comandos @... GET e espera 5 segundos para a entrada do teclado. Se uma tecla não for
pressionada neste período de tempo, CHRSAW( ) resultará em falso (.F.) e o programa será
finalizado.

SET TALK OFF


DEFINE WINDOW wEnter FROM 7,10 to 13,70 PANEL
ACTIVATE WINDOW wEnter
@ 1,3 SAY 'Customer: ' GET gcCustomer DEFAULT SPACE(40)
@ 3,3 SAY 'Address: ' GET gcAddress DEFAULT SPACE(40)
WAIT WINDOW 'Waiting for input' NOWAIT
IF NOT CHRSAW(5)
DEACTIVATE WINDOW wEnter
CLEAR GETS
ELSE
READ
DEACTIVATE WINDOW wEnter
ENDIF
RELEASE WINDOW wEnter
WAIT
CLEAR

CHRTRAN( ), função

Em uma expressão de caracteres, substitui cada caractere que corresponde a um caractere em uma
segunda expressão pelo caractere correspondente em uma terceira expressão de caracteres.

Sintaxe

CHRTRAN(cExpressãoProcurada, cExpressãoProcura, cExpressãoSubstituição)

Tipos de retorno

Caractere

Argumentos

cExpressãoProcurada Especifica a expressão na qual CHRTRAN( ) substitui caracteres.

cExpressãoProcura Especifica a expressão que contém os caracteres que CHRTRAN( ) procura em


cExpressãoProcurada.

cExpressãoSubstituição Especifica a expressão que contém os caracteres de substituição.

Se um caractere em cExpressãoProcura for localizado em cExpressãoProcurada, o caractere em


cExpressãoProcurada será substituído pelo caractere de cExpressãoSubstituição que estiver na
mesma posição em cExpressãoSubstituição que o respectivo caractere em cExpressãoProcura.

Se cExpressãoSubstituição tiver menos caracteres do que cExpressãoProcura, os caracteres


adicionais em cExpressãoProcura serão excluídos de cExpressãoProcurada. Se
cExpressãoSubstituição tiver mais caracteres do que cExpressãoProcura, os caracteres adicionais
em cExpressãoSubstituição serão ignorados.

Comentários

CHRTRAN( ) converte a expressão de caracteres cExpressãoProcurada utilizando as expressões de


conversão cExpressãoProcura e cExpressãoSubstituição e retorna a seqüência de caracteres
resultante.

CHRTRAN( ), exemplo de função


? CHRTRAN('ABCDEF', 'ACE', 'XYZ') && Exibe XBYDZF
? CHRTRAN('ABCD', 'ABC', 'YZ') && Exibe YZD
? CHRTRAN('ABCDEF', 'ACE', 'XYZQRST') && Exibe XBYDZF

CHRTRANC( ), função

Em uma expressão de caracteres, substitui cada caractere que corresponde a um caractere em uma
segunda expressão pelo caractere correspondente em uma terceira expressão de caracteres.

Sintaxe

CHRTRANC(cProcurado, cProcurarPor, cSubstituição)

Tipos de retorno

Caractere

Argumentos

cProcurada Especifica a expressão na qual CHRTRANC( ) substitui caracteres.

cProcurarPor Especifica a expressão que contém os caracteres que CHRTRANC( ) procura em


cProcurada.

cSubstituição Especifica a expressão que contém os caracteres de substituição.

Se um caractere em cProcurarPor for localizado em cProcurada, o caractere em cProcurada será


substituído por um caractere de cSubstituição que estiver na mesma posição em cSubstituição que o
respectivo caractere em cProcurarPor.

Se cSubstituição tiver menos caracteres do que cProcurarPor, os caracteres adicionais em


cProcurarPor serão excluídos de cProcurado. Se cSubstituição tiver mais caracteres do que
cProcurarPor, os caracteres adicionais em cSubstituição serão ignorados.

Comentários

CHRTRANC( ) é projetado para facilitar o trabalho com expressões que contenham caracteres de
byte duplo. Utilize CHRTRANC( ) para substituir os caracteres de byte único por caracteres de byte
duplo ou vice-versa. SE as expressões contiverem apenas caracteres de byte único, o
CHRTRANC( ) será equivalente a CHRTRAN( ).

CLEAR, comandos

Libera o item ou itens especificados da memória.

Sintaxe
CLEAR
[ALL | CLASS NomeClasse | CLASSLIB NomeBibliotecaClasses | DEBUG
| DLLS | EVENTS | FIELDS | GETS | MACROS | MEMORY
| MENUS | POPUPS | PROGRAM | PROMPT | READ [ALL]
| RESOURCES [NomeArquivo] | TYPEAHEAD | WINDOWS]

Argumentos

ALL Libera da memória todas as matrizes e variáveis de memória e todas as definições do usuário
para barras de menus, menus e janelas. CLOSE ALL também fecha qualquer tabela, inclusive todos
os arquivos de índice, de formatação e memo associados, e seleciona a Área de trabalho 1. CLEAR
ALL também remove da memória todas as funções de bibliotecas compartilhadas externas
registradas por meio de DECLARE - DLL.

CLEAR ALL não libera variáveis de memória do sistema e não limpa o buffer do programa
compilado. Para limpar o buffer, utilize CLEAR PROGRAM.

Se você emitir CLEAR ALL dentro de um evento ou método de um controle ou objeto ativo, o
Visual FoxPro exibirá uma mensagem de erro. Uma variável de memória do tipo objeto não pode
ser liberada da memória enquanto o controle ou objeto associado a ela estiver ativo.

CLASS NomeClasse Limpa uma definição de classe da memória.Quando uma instância de classe
é criada, o Visual FoxPro guarda a definição de classe na memória, mesmo depois que a instância é
liberada. Utilize CLEAR CLASS para limpar uma definição de classe da memória depois que a
instância for liberada.

CLASSLIB NomeBibliotecaClasses Limpa da memória todas as definições de classes contidas em


uma biblioteca de classes visuais. Se existirem instâncias de classes na biblioteca de classes, as
definições de classes não são limpas da memória. Entretanto, todas as definições de classes que não
tenham instâncias são limpas da memória.

DEBUG Limpa todos os pontos de interrupção no Depurador e restaura as janelas de depuração


(Chamar Pilha, Rastrear, Observar etc.) às suas posições padrão.

Se Clear Debug for emitido quando o Depurador estiver fechado, o Depurador será aberto com as
janelas de depuração em suas posições padrão.

Trabalha no modo de moldura do depurador ou fox.

DLLS Limpa da memória todas as bibliotecas compartilhadas externas com DECLARE - DLL.
Consulte DECLARE -DLL para obter maiores informações sobre como registrar as funções de
bibliotecas compartilhadas externas.

EVENTS Interrompe o processamento de eventos iniciado com READ EVENTS. Quando CLEAR
EVENTS for executado, a execução do programa continuará na linha do programa imediatamente
após READ EVENTS.

FIELDS Libera uma lista criada com SET FIELDS e executa SET FIELDS OFF. A diferença entre
CLEAR FIELDS e SET FIELDS TO é que o primeiro libera todas as listas de campos de todas as
Áreas de trabalho, e não apenas a lista de campos da Área de trabalho atual. Além disso, SET
FIELDS TO não emite um comando SET FIELDS OFF de forma implícita.

GETS Libera todos os controles @ ... GET pendentes. O comando CLEAR também libera todos os
controles @ ... GET pendentes.

MACROS Libera da memória todas as macros de teclado, inclusive todas as atribuições de teclas
definidas com SET FUNCTION. As macros podem ser salvas em um arquivo de macros ou em um
campo Memo através de SAVE MACROS e restauradas posteriormente com RESTORE
MACROS. As macros padrão também podem ser restauradas com RESTORE MACROS.

MEMORY Libera da memória todas as matrizes e variáveis de memória públicas e privadas. As


variáveis de memória do sistema não são liberadas.

MENUS Libera todas as definições de barras de menus da memória.

POPUPS Libera da memória todas as definições de menus criadas com DEFINE POPUP.

PROGRAM Limpa o buffer de programa compilado. O Visual FoxPro mantém um buffer dos
últimos programas executados. Em raras ocasiões, o Visual FoxPro poderá não reconhecer as
alterações feitas nos arquivos de programa no disco. CLEAR PROGRAM força o Visual FoxPro a
ler os programas no disco, em vez de ler no buffer de programa. O motivo mais comum para o
Visual FoxPro não reconhecer as alterações feitas nos arquivos de programa é a utilização de um
editor externo ou residente (TSR) para fazer essas modificações. Com exceção desta situação, não
será necessário utilizar CLEAR PROGRAM.

PROMPT Libera itens de menus criados com @ ... PROMPT.

READ [ALL] Incluído para manter a compatibilidade com versões anteriores. Utilize CLEAR
EVENTS como substituto.

RESOURCES [NomeArquivo] Especifica o nome de um arquivo de ícone, cursor, fonte, figura ou


bitmap no cache a ser limpo da memória. Se nenhum nome de arquivo for especificado, todos os
arquivos de ícone, cursor, fonte, figura e bitmap serão removidos da memória.

Quando o Visual FoxPro exibe um recurso de fonte, ícone, cursor, figura ou bitmap, o recurso fica
na memória cache para otimizar o desempenho. Se um recurso com o mesmo nome for utilizado
(por exemplo, um bitmap diferente com o mesmo nome de um já existente no cache de memória), o
Visual FoxPro não recarregará o recurso.

Limpar um arquivo de recurso é útil principalmente para remover uma imagem gráfica da memória
e fazer com que o Visual FoxPro recarregue uma imagem com o mesmo nome a partir do disco. Por
exemplo, um relatório pode exibir imagens gráficas de um banco de dados, todas denominadas
TEMP; no entanto, como todas possuem o mesmo nome, o Visual FoxPro não recarregará cada
nova imagem gráfica, a menos que uma já existente tenha sido limpa da memória utilizando o
comando CLEAR RESOURCES.

TYPEAHEAD Limpa o buffer de teclado. CLEAR TYPEAHEAD é útil quando você deseja evitar
que um campo receba entrada ou que um aviso seja respondido antes que o campo ou aviso seja
exibido.
WINDOWS Libera da memória todas as características de janelas definidas pelo usuário e limpa
as janelas da janela principal do Visual FoxPro ou da janela ativa definida pelo usuário. Utilize
SAVE WINDOW para salvar as definições de janelas em um arquivo ou campo Memo para uso
posterior.

CLEAR WINDOWS libera da memória qualquer referência de variáveis de memória aos


formulários. Por exemplo, os comandos a seguir criam uma referência de variável de memória para
um formulário e, em seguida, exibem informações sobre a variável:

goMyForm = CREATEOBJECT('FORM')
DISPLAY MEMORY LIKE goMyForm && Exibe GOMYFORM O FORM

Ao se emitir CLEAR WINDOWS, a referência da variável de memória é liberada e a variável de


memória passa a conter o valor nulo:

CLEAR WINDOWS
DISPLAY MEMORY LIKE goMyForm && Exibe GOMYFORM O .NULL.

Comentários

CLEAR apaga a janela principal do Visual FoxPro ou a janela atual definida pelo usuário e libera
todos os controles @ ... GET pendentes da memória. Você pode incluir CLEAR em arquivos de
formatação.

CLOSE, comandos

Fecha diversos tipos de arquivos.

Sintaxe

CLOSE
[ALL | ALTERNATE | DATABASES [ALL] | DEBUGGER
| FORMAT | INDEXES | PROCEDURE | TABLES [ALL]]

Argumentos

ALL Fecha todos os bancos de dados, tabelas e índices abertos em todas as Áreas de trabalho e
seleciona a Área de trabalho 1. CLOSE ALL também fecha todos os arquivos abertos com as
funções de arquivo de nível inferior FCREATE( ) e FOPEN( ). CLOSE ALL não fecha um arquivo
aberto com SET PRINT.

CLOSE ALL também fecha os itens:

· Criador de formulários
· Gerenciador de projetos
· Criador de etiquetas
· Criador de relatórios
· Criador de consultas

CLOSE ALL não fecha os itens:

· janela Comando
· janela Depurar
· Ajuda
· janela Rastrear
CLOSE ALTERNATE Fecha um arquivo alternativo aberto com SET ALTERNATE.

CLOSE DATABASES [ALL] Fecha o banco de dados atual e suas tabelas. Se não houver um
banco de dados aberto no momento, todas as tabelas livres, índices e arquivos de formatação
abertos em todas as Áreas de trabalho são fechados e a Área de trabalho 1 é selecionada.

ALL

Especifica que serão fechados os itens a seguir:

Todos os bancos de dados abertos e suas respectivas tabelas.


Todas as tabelas livres abertas.
Todos os índices e arquivos de formatação em todas as áreas de trabalho.
A Área de trabalho 1 é selecionada.

CLOSE DEBUGGER Fecha o depurador do Visual FoxPro.

CLOSE FORMAT Fecha um arquivo de formatação da Área de trabalho atual aberto com SET
FORMAT.

CLOSE INDEXES Fecha todos os arquivos de índice abertos (arquivos .IDX de entrada simples e
arquivos .CDX compostos independentes) na Área de trabalho atual. Um índice composto estrutural
(arquivos .CDX abertos automaticamente com a tabela) não é fechado.

CLOSE PROCEDURE Fecha um arquivo de procedimentos aberto com SET PROCEDURE.

CLOSE TABLES [ALL] Fecha todas as tabelas de todos os bancos de dados abertos, mas deixa os
bancos de dados abertos. Caso não haja um banco de dados aberto, CLOSE TABLES fechará todas
as tabelas livres de todas as Áreas de trabalho.

CLOSE TABLES não deverá ser emitido quando uma transação estiver em andamento, pois o
Visual FoxPro irá gerar uma mensagem de erro.

ALL

Especifica que todas as tabelas, inclusive as livres, serão fechadas em todas as Áreas de trabalho.
Todos os bancos de dados permanecerão abertos.
CMONTH( ), função

Retorna o nome do mês de uma determinada expressão de data ou Data Hora.

Sintaxe

CMONTH(dExpressão | tExpressão)

Tipos de retorno

Caractere

Argumentos

dExpressão Especifica a expressão de data a partir da qual CMONTH( ) retorna o nome do mês.

tExpressão Especifica a expressão DataHora a partir da qual CMONTH( ) retorna o nome do mês.

Comentários

CMONTH( ) retorna o nome do mês como uma seqüência no formato de substantivo próprio.

CMONTH( ), exemplo de função

? CMONTH(DATE( ))
STORE {02/16/95} TO gdDueDate
? 'Seu pagamento venceu em ', CMONTH(gdDueDate)
STORE gdDueDate+60 TO gdFinalDate
? 'Você deve pagar até ', CMONTH(gdFinalDate)
? | ??, comando

Avalia expressões e exibe os resultados.

Sintaxe

? | ?? Expressão1
[PICTURE cCódigosFormato] | [FUNCTION cCódigosFormato] | [VnLargura]
[AT nColuna]
[FONT cNomeFonte [, nTamanhoFonte] [STYLE cEstiloFonte | Expressão2]]
[, Expressão3] ...

Argumentos

? Expressão1 Avalia a expressão especificada por Expressão1 e envia um retorno de carro e


alimentação de linha antes dos resultados da expressão. Os resultados são exibidos na próxima linha
da janela principal do Visual FoxPro ou da janela ativa definida pelo usuário e são impressos na
margem esquerda de uma página, a menos que um código de função cCódigosFormato ou a variável
do sistema _ALIGNMENT especifique o contrário.

Se você omitir as expressões, uma linha em branco será exibida ou impressa. Um espaço será
colocado entre os resultados dessas expressões quando várias expressões forem incluídas.

?? Expressão1 Avalia a expressão especificada por Expressão1 e exibe os resultados da expressão


na linha atual na posição atual da janela principal do Visual FoxPro, de uma janela ativa definida
pelo usuário ou da impressora. Um retorno de carro e alimentação de linha não são enviados antes
dos resultados.

PICTURE cCódigosFormato Especifica um formato de figura no qual é exibido o resultado de


Expressão1. cCódigosFormato pode consistir em códigos de função, códigos de figura ou em uma
combinação dos dois. É possível utilizar os mesmos códigos disponíveis nas propriedades Format e
InputMask.

Os códigos de função afetam o formato geral do resultado; os códigos de figura agem sobre
caracteres individuais no resultado. Se os códigos de função forem utilizados em cCódigosFormato,
eles deverão aparecer antes dos códigos de figura e ser precedidos por @. Vários códigos de função
sem espaços incorporados podem aparecer logo depois de @. O último código de função deve ser
seguido de um ou mais espaços. O(s) espaço(s) indicam o fim dos códigos de função e o início dos
códigos de figura.

FUNCTION cCódigosFormato Especifica um código de função a ser incluído na saída ? e ??. Se a


cláusula de função estiver incluída, não coloque @ antes dos códigos de função. Os códigos de
função devem ser precedidos por @ quando incluídos em PICTURE.

VnLargura Especifica um código de função especial que permite que os resultados de uma
expressão de caracteres se estendam verticalmente em um número limitado de colunas. nLargura
especifica o número de colunas na saída.

? 'Este é um exemplo de como o código de função V funciona.' ;


FUNCTION 'V10'

AT nColuna Especifica o número da coluna onde a saída é exibida. Essa opção permite que você
alinhe a saída em colunas para criar uma tabela. A expressão numérica nColuna pode ser uma
função definida pelo usuário que retorne um valor numérico.

FONT cNomeFonte [, nTamanhoFonte] Especifica uma fonte para a saída ? | ??. cNomeFonte
especifica o nome da fonte e nTamanhoFonte especifica o tamanho em pontos. Por exemplo, o
comando a seguir exibe a data do sistema na fonte Courier de 16 pontos:

? DATE( ) FONT 'Courier',16

Se você incluir a cláusula FONT, mas omitir o tamanho em pontos nTamanhoFonte, será utilizada
uma fonte de 10 pontos.

Caso omita cláusula FONT e a saída ? | ?? for colocada na janela principal do Visual FoxPro, a
fonte da janela principal do FoxPro será utilizada na saída. Caso omita a cláusula FONT e a saída ? |
?? for colocada em uma janela definida pelo usuário, a fonte da janela definida pelo usuário será
utilizada na saída.
· Se a fonte especificada não estiver disponível, ela será substituída por outra fonte com
características semelhantes.

STYLE cEstiloFonte Especifica um estilo de fonte para a saída ? | ??. Se você omitir a cláusula
STYLE, o estilo de fonte Normal será utilizado. Se o estilo de fonte especificado não estiver
disponível, ele será substituído por um estilo de fonte com características semelhantes.

Observação É necessário incluir a cláusula FONT ao especificar um estilo de fonte com a cláusula
STYLE.

Os estilos de fonte que podem ser especificados com cEstiloFonte são:

Caractere Estilo de fonte

B Negrito
I Itálico
N Normal
O Contorno
Q Opaco
S Sombreado
- Riscado
T Transparente
U Sublinhado
Você pode incluir mais de um caractere para especificar uma combinação de estilos de fonte. Por
exemplo, o comando a seguir exibe a data do sistema em Courier Negrito Itálico:

? DATE( ) FONT 'COURIER' STYLE 'BI'

Comentários

? e ?? avaliam expressões e enviam os resultados para a janela principal do Visual FoxPro, para
uma janela ativa definida pelo usuário ou para a impressora.

Caso SET PRINTER estiver ativado (ON), os resultados da expressão serão direcionados para a
impressora e para a janela principal do Visual FoxPro ou para uma janela ativa definida pelo
usuário. Se SET PRINTER estiver ativado (ON) e SET CONSOLE estiver desativado (OFF), os
resultados serão direcionados somente para a impressora.

? | ??, exemplo do comando

? 15 * (10+10)
? 'Bem-vindo ao ' PICTURE '@!'
?? 'Visual FoxPro'

????, comando

Envia a saída diretamente para a impressora.


Sintaxe

??? cExpressão

Argumentos

cExpressão Especifica os caracteres que são enviados para a impressora.

Comentários

Um grupo de três pontos de interrogação desconsidera o driver da impressora e envia o conteúdo de


cExpressão diretamente para a impressora. cExpressão deve conter códigos de impressora válidos.

Os códigos de controle de impressora permitem reinicializar a impressora, alterar o tamanho e estilo


de tipo gráfico, bem como ativar ou desativar a impressão em negrito. Esses códigos podem
consistir em qualquer combinação de caracteres que podem ser ou não impressos e são específicos
da impressora que está sendo utilizada. Existem várias maneiras diferentes de direcionar códigos de
controle à impressora:

· Utilizar combinações de CHR( ) e seqüências entre aspas concatenadas com + para enviar
caracteres ASCII diretamente à impressora.
· Utilizar aspas para enviar uma seqüência contendo códigos de impressora ou caracteres
ASCII.
· Os códigos podem ser enviados para a impressora antes do início e depois do término da
impressão com as variáveis do sistema _PSCODE e _PECODE. Para obter maiores informações,
consulte _”PSCODE” e _”PECODE”.

Os códigos de controle de impressora variam de impressora a impressora. A melhor fonte de


informações sobre os códigos de controle de impressora é o manual que acompanha a sua
impressora.

CONTINUE, comando

Dá continuidade ao LOCATE anterior.

Sintaxe

CONTINUE

Comentários
CONTINUE é utilizado depois que LOCATE localiza um registro, a fim de continuar a operação de
LOCATE. CONTINUE move o ponteiro do registro até o próximo registro para o qual a expressão
lógica especificada no LOCATE anterior resultar verdadeiro (.T.).

CONTINUE pode ser utilizado várias vezes até o fim do arquivo ou do escopo especificado com
LOCATE.

Se CONTINUE localizar um registro, RECNO( ) retornará o número do registro, FOUND( )


retornará um valor verdadeiro (.T.) e EOF( ) retornará um valor falso (.F.).

Se CONTINUE não localizar um registro, RECNO( ) retornará o número de registros da tabela mais
um, FOUND( ) retornará falso (.F.) e EOF( ) retornará verdadeiro (.T.).

CONTINUE, exemplo do comando

No exemplo a seguir, todos os clientes da França são contados e o total será exibido. Todos os
registros são encontrados com a utilização de um comando LOCATE seguido de um comando
CONTINUE dentro de um loop.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer
SET TALK OFF
STORE 0 TO gnCount

LOCATE FOR ALLTRIM(UPPER(country)) = 'FRANCE'


DO WHILE FOUND( )
gnCount = gnCount + 1
CONTINUE
ENDDO
? 'Total de clientes na França: '+ LTRIM(STR(gnCount))

COPY FILE, comando

Duplica qualquer tipo de arquivo.

Sintaxe

COPY FILE NomeArquivo1 TO NomeArquivo2

Comentários

COPY FILE cria uma duplicata do arquivo cujo nome é especificado em NomeArquivo1. É
possível utilizar COPY FILE para copiar qualquer tipo de arquivo. O arquivo a ser copiado não
pode estar aberto. Você deve incluir as extensões para o nome de arquivo de origem NomeArquivo1
e o nome de arquivo de destino NomeArquivo2.
NomeArquivo1 e NomeArquivo2 pode conter caracteres curinga como * e ?. Por exemplo, para
criar cópias de backup de todos os arquivos de programa com a extensão .PRG no diretório ou pasta
atual, emita COPY FILE *.PRG TO *.BAK.

Se você utilizar COPY FILE para criar uma cópia de backup de uma tabela, que possui um campo
Memo, um índice estrutural ou ambos, certifique-se de copiar também os arquivos .FPT e .CDX.

COPY STRUCTURE, comando

Cria uma nova tabela livre e vazia com a mesma estrutura da tabela selecionada no momento.

Sintaxe

COPY STRUCTURE TO NomeArquivo


[FIELDS ListaCampos]
[[WITH] CDX | [WITH] PRODUCTION]

Argumentos

NomeArquivo Especifica o nome da nova tabela vazia a ser criada.

No Visual FoxPro, o suporte ao valor nulo e à página de código para a nova tabela livre são
idênticos à tabela selecionada atualmente.

FIELDS ListaCampos Especifica que apenas os campos, cujos nomes estão indicados em
ListaCampos, serão copiados para a nova tabela. Se você omitir FIELDS ListaCampos, todos os
campos serão copiados para a nova tabela.

[WITH] CDX | [WITH] PRODUCTION Cria, para a nova tabela, um arquivo de índice estrutural
idêntico ao da tabela existente. As marcas e as expressões de índice do arquivo de índice estrutural
original são copiadas para o novo arquivo de índice estrutural.

As cláusulas CDX e PRODUCTION são idênticas.

No Visual FoxPro, um índice primário para a tabela selecionada no momento é convertido em um


índice candidato para a nova tabela vazia.

COPY STRUCTURE, exemplo do comando

No exemplo a seguir, a tabela customer é aberta, sua estrutura é copiada para uma tabela
denominada backup e a tabela backup é aberta. APPEND FROM, em seguida, inclui registros na
tabela backup a partir da tabela customer e uma janela Pesquisar é aberta para a tabela backup.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

COPY STRUCTURE TO backup


USE backup
APPEND FROM customer FOR country = 'UK'
BROWSE FIELDS contact, country
USE
DELETE FILE backup.dbf

COPY STRUCTURE EXTENDED, comando

Cria uma nova tabela com campos contendo a estrutura da tabela selecionada no momento.

Sintaxe

COPY STRUCTURE EXTENDED TO NomeArquivo


[DATABASE NomeBancoDeDados [NAME NomeTabelaExtenso]]
[FIELDS ListaCampos]

Argumentos

NomeArquivo Especifica a nova tabela a ser criada.

DATABASE NomeBancoDeDados Especifica um banco de dados ao qual a nova tabela será


adicionada.

NAME NomeTabelaExtenso Especifica um nome extenso para a nova tabela. Os nomes extensos
podem conter até 128 caracteres e podem ser utilizados no lugar de nomes de arquivo curtos no
banco de dados.

FIELDS ListaCampos Especifica que apenas os campos indicados em ListaCampos serão incluídos
em um registro na nova tabela. Se você omitir FIELDS ListaCampos, todos os campos terão um
registro na nova tabela.

Comentários

As informações sobre cada campo da tabela selecionada no momento são copiadas para um registro
na nova tabela. A estrutura da nova tabela tem um formato fixo e consiste em dezesseis campos. A
tabela abaixo lista os nomes dos dezesseis campos e seu respectivo conteúdo.

Campo Tipo do campo Conteúdo

FIELD_NAME Caractere Nomes de campos da tabela selecionada (128 caracteres de largura)


FIELD_TYPE Caractere Tipos de campos:
C = Caractere
Y = Moeda
N = Numérico
F = Flutuante
I = Inteiro
B = Duplo
D = Data
T = DataHora
L = Lógico
M = Memo
G = Geral
FIELD_LEN Numérico Largura dos campos
FIELD_DEC Numérico Número de casas decimais em campos numéricos
FIELD_NULL Lógico Suporte ao valor nulo do campo
FIELD_NOCP Lógico Não é permitida a tradução da página de código (somente campos do tipo
caractere e memo)
FIELD_DEFA Memo Valores padrão do campo
FIELD_RULE Memo Regras de validação do campo
FIELD_ERR Memo Texto de validação do campo
TABLE_RULE Memo Regra de validação da tabela
TABLE_ERR Memo Texto de validação da tabela
TABLE_NAME Caractere Nome de tabela extenso (somente o primeiro registro)
INS_TRIG Memo Inserir expressão de disparo (somente o primeiro registro)
UPD_TRIG Memo Atualizar expressão de disparo (somente o primeiro registro)
DEL_TRIG Memo Excluir expressão de disparo (somente o primeiro registro)
TABLE_CMT Memo Comentário da tabela (somente o primeiro registro)

Você pode modificar a tabela recém-criada e utilizar CREATE FROM para criar uma nova tabela
com uma estrutura diferente. COPY STRUCTURE e CREATE FROM permitem a alteração da
estrutura de uma tabela através de programação.
A largura do campo FIELD_NAME é de 10 caracteres em versões anteriores do Visual FoxPro,
FoxPro para Windows e FoxPro para MS-DOS. Para utilizar CREATE FROM com uma tabela
criada por COPY STRUCTURE EXTENDED no Visual FoxPro 4.0, deve-se alterar a largura do
campo FIELD_NAME para 10 caracteres.

COPY STRUCTURE EXTENDED, exemplo do comando

O exemplo a seguir exibe a estrutura da tabela orders, copia a estrutura estendida para uma tabela
temp, pesquisa temp, cria uma tabela backup a partir de temp e exibe a estrutura de backup.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE orders && Abre a tabela Orders
CLEAR
DISPLAY STRUCTURE

WAIT WINDOW 'Estrutura da tabela orders' NOWAIT


COPY STRUCTURE EXTENDED TO temp
USE temp
WAIT WINDOW 'A tabela temp - 1 linha por campo em orders' NOWAIT
BROWSE
CREATE backup FROM temp
USE backup
DISPLAY STRUCTURE
WAIT WINDOW 'Backup.dbf possui a mesma estrutura que orders' NOWAIT
USE
DELETE FILE temp.dbf
DELETE FILE backup.dbf

COPY TAG, comando

Cria um arquivo de índice de entrada única .IDX a partir de uma marca existente em um arquivo de
índice composto.

Sintaxe

COPY TAG NomeMarca [OF NomeArquivoCDX]


TO NomeArquivoÍndice

Argumentos

NomeMarca Especifica a marca utilizada para criar o arquivo de índice de entrada única .IDX.

OF NomeArquivoCDX Especifica o arquivo de índice composto que contém a marca. Inclua esta
cláusula se houver marcas com nomes iguais nos arquivos de índice composto abertos. Se OF
NomeArquivoCDX for omitido, o Visual FoxPro irá procurar a marca primeiro no arquivo de
índice estrutural. Se a marca não for encontrada nesse arquivo, o Visual FoxPro pesquisará todos os
arquivos de índice composto não-estrutural que estiverem abertos.

TO NomeArquivoÍndice Especifica o nome do arquivo de índice de entrada única .IDX a ser


criado.

Comentários

Utilize COPY TAG para criar um novo arquivo de índice de entrada única .IDX a partir de uma
marca em um arquivo de índice composto .CDX.

O arquivo de índice composto a partir do qual é criado o arquivo de índice de entrada única .IDX
deve estar aberto. Os arquivos de índice composto estrutural são abertos automaticamente quando
você abre uma tabela. Os índices compostos não-estruturais devem ser explicitamente abertos com
USE ... INDEX ou SET INDEX. Para obter maiores informações sobre arquivos de índice
composto, consulte “ INDEX”.

Utilize COPY INDEX para criar marcas em arquivos de índice composto a partir de arquivos de
índice de entrada única .IDX.

COPY TO ARRAY, comando

Copia dados da tabela selecionada no momento para uma matriz.

Sintaxe

COPY TO ARRAY NomeMatriz


[FIELDS ListaCampos]
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[NOOPTIMIZE]

Argumentos

NomeMatriz Especifica a matriz para a qual os dados da tabela são copiados.

FIELDS ListaCampos Especifica que apenas os campos especificados em ListaCampos serão


copiados para a matriz. Se você omitir FIELDS ListaCampos, todos os campos serão copiados para
a matriz, caso ela possua o número suficiente de colunas.

Escopo Especifica um intervalo de registros a serem copiados para a matriz. Apenas os registros
dentro do intervalo são copiados. As cláusulas de escopo são: ALL, NEXT nRegistros, RECORD
nNúmeroRegistro e REST.

Para obter maiores informações sobre cláusulas de escopo, consulte o tópico Cláusulas de Escopo.

O escopo padrão para COPY TO ARRAY é ALL (todos os registros).

FOR lExpressão1 Especifica que apenas os registros que satisfazem a condição lógica lExpressão1
serão copiados para a matriz. Ao incluir FOR, você poderá copiar os registros condicionalmente
para a matriz, filtrando os registros indesejáveis.

Uma otimização Rushmore ocorrerá em uma consulta COPY TO ARRAY que inclui FOR
lExpressão1 se lExpressão1 for uma expressão otimizável. Para obter um melhor desempenho,
utilize uma expressão otimizável na cláusula FOR.

Para obter informações sobre expressões otimizáveis Rushmore, consulte SET OPTIMIZE e
“Compreendendo a Tecnologia Rushmore” no capítulo 15, “Otimizando Aplicativos,” no Guia do
Desenvolvedor.

WHILE lExpressão2 Especifica uma condição pela qual os registros serão copiados para a matriz
desde que a expressão lógica lExpressão2 resulte em verdadeiro (.T.).
NOOPTIMIZE Desativa a otimização Rushmore de COPY TO ARRAY. Para obter maiores
informações, consulte SET OPTIMIZE e “Compreendendo a Tecnologia Rushmore” no capítulo
15, “Otimizando Aplicativos”, no Guia do Desenvolvedor.

Comentários

COPY TO ARRAY e SCATTER são semelhantes. COPY TO ARRAY copia vários registros para
uma matriz, enquanto SCATTER copia apenas um registro para uma matriz ou um conjunto de
variáveis de memória. COPY TO ARRAY e SCATTER criarão uma nova matriz caso não exista
uma matriz com o nome especificado.

Para copiar um só registro para uma matriz, você pode especificar uma matriz unidimensional. A
matriz unidimensional especificada deve ter o mesmo número de elementos que os campos da
tabela, sem contar os campos Memo. Os campos Memo são ignorados em COPY TO ARRAY.

Se você especificar uma matriz unidimensional, o primeiro campo do registro será armazenado no
primeiro elemento da matriz, o segundo campo será armazenado no segundo elemento da matriz e
assim por diante. Se uma matriz unidimensional possuir mais elementos do que a tabela possui
campos, os elementos restantes permanecerão inalterados. Caso o número de elementos da matriz
seja menor do que o número de campos da tabela, os campos restantes serão ignorados.

Para copiar vários registros ou uma tabela inteira para uma matriz, especifique uma matriz
bidimensional. O número de linhas na matriz corresponde ao número de registros que a matriz pode
conter, e o número de colunas corresponde ao número de campos que ela pode conter.

Cada registro é armazenado em uma linha da matriz, e cada campo do registro é armazenado em
uma coluna da matriz. Para cada registro, o primeiro campo é armazenado na primeira coluna da
matriz, o segundo campo é armazenado na segunda coluna e assim por diante. Se o número de
colunas da matriz for maior do que o número de campos da tabela, as colunas restantes não serão
alteradas. Se o número de colunas da matriz for menor do que o número de campos da tabela, os
campos restantes não serão armazenados na matriz.

Cada linha sucessiva na matriz é preenchida com o conteúdo do registro seguinte na tabela. Se o
número de linhas da matriz for maior do que o número de registros da tabela, as linhas restantes não
serão alteradas. Se o número de linhas da matriz for menor do que o número de registros da tabela,
os registros restantes não serão armazenados na matriz.

Os dados podem ser copiados das matrizes para os novos registros de tabela com APPEND FROM
ARRAY. Eles também podem ser copiados de uma matriz ou de um conjunto de variáveis de
memória para os registros de uma tabela, através de GATHER.

COPY TO ARRAY, exemplo do comando

No exemplo a seguir, a tabela customer é aberta. Uma matriz bidimensional é então criada e os três
primeiros registros de customer são copiados para a matriz. DISPLAY MEMORY mostra os dados
armazenados na matriz.
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

DIMENSION gaTemp(3,10)
COPY NEXT 3 TO ARRAY gaTemp
DISPLAY MEMORY LIKE gaTemp

COPY TO, comando

Cria um novo arquivo a partir dos conteúdos da tabela selecionada no momento.

Sintaxe

COPY TO NomeArquivo
[DATABASE NomeBancoDeDados [NAME NomeTabelaExtenso]]
[FIELDS ListaCampos
| FIELDS LIKE Estrutura
| FIELDS EXCEPT Estrutura]
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[[WITH] CDX] | [[WITH] PRODUCTION]
[NOOPTIMIZE]
[[TYPE] [FOXPLUS | FOX2X | DIF | MOD
| SDF | SYLK | WK1 | WKS | WR1 | WRK | XLS | XL5
| DELIMITED [WITH Delimitador | WITH BLANK | WITH TAB
| WITH CHARACTER Delimitador]]]
[AS nPáginaCódigo]

Argumentos

NomeArquivo Especifica o nome do novo arquivo criado por COPY TO. Se você não incluir uma
extensão com o nome do arquivo, será atribuída a extensão padrão do tipo de arquivo especificado.
Se você não especificar um tipo de arquivo, COPY TO criará uma nova tabela do Visual FoxPro e
atribuirá a extensão padrão .DBF ao nome de arquivo da tabela.

DATABASE NomeBancoDeDados Especifica um banco de dados ao qual a nova tabela será


adicionada.

NAME NomeTabelaExtenso Especifica um nome extenso para a nova tabela. Os nomes extensos
podem conter até 128 caracteres e podem ser utilizados no lugar de nomes de arquivo curtos no
banco de dados.

FIELDS ListaCampos Especifica os campos que serão copiados para o novo arquivo. Se você
omitir FIELDS ListaCampos, todos os campos serão copiados para o arquivo. Se o arquivo que
você está criando não for uma tabela, os campos Memo não serão copiados para o novo arquivo,
mesmo que nomes de campos Memo tenham sido incluídos na lista de campos.
FIELDS LIKE Estrutura Especifica que os campos da tabela original, correspondentes à estrutura
do arquivo estrutura, são incluídos no novo arquivo criado por COPY TO.

FIELDS EXCEPT Estrutura Especifica que todos os campos, exceto os que correspondem ao
estrutura do arquivo Estrutura, são incluídos no novo arquivo criado por COPY TO.

A estrutura do campo Estrutura suporta caracteres curinga. Por exemplo, para especificar que todos
os campos que comecem pelas letras A e P sejam incluídos no novo arquivo, Utilize:

COPY TO mytable FIELDS LIKE A*,P*

A cláusula LIKE pode ser combinada com a cláusula EXCEPT:

COPY TO mytable FIELDS LIKE A*,P* EXCEPT PARTNO*


Escopo Especifica um intervalo de registros a serem copiados para um arquivo. Apenas os
registros dentro do intervalo são copiados. As cláusulas de escopo são: ALL, NEXT nRegistros,
RECORD nNúmeroRegistro e REST. Para obter maiores informações sobre cláusulas de escopo,
consulte o tópico Cláusulas de Escopo.

FOR lExpressão1 Especifica que somente os registros para os quais a condição lógica lExpressão1
resulta em verdadeiro (.T.) são copiados para o arquivo. Inclua FOR lExpressão1 para copiar
registros condicionalmente, filtrando os registros indesejáveis.

Uma otimização Rushmore™ ocorrerá em COPY TO com uma cláusula FOR lExpressão1 se
lExpressão1 for uma expressão otimizável. Para obter um melhor desempenho, utilize uma
expressão otimizável na cláusula FOR lExpressão1.

Para obter informações sobre expressões otimizáveis Rushmore, consulte “SET OPTIMIZE
” e “Compreendendo a Tecnologia Rushmore” no capítulo 15, “Otimizando Aplicativos”, no Guia
do Desenvolvedor.

WHILE lExpressão2 Especifica uma condição pela qual os registros serão copiados, desde que a
expressão lógica lExpressão2 resulte em verdadeiro (.T.).

[WITH] CDX | [WITH] PRODUCTION Cria, para a nova tabela, um arquivo de índice estrutural
idêntico ao da tabela existente. As marcas e as expressões de índice do arquivo de índice estrutural
original são copiadas para o novo arquivo de índice estrutural. As cláusulas CDX e PRODUCTION
são idênticas.

Não inclua CDX ou PRODUCTION, se a cópia estiver sendo feita para um arquivo que não
pertence a uma nova tabela do Visual FoxPro.

NOOPTIMIZE Desativa a otimização Rushmore de COPY TO.

Para obter maiores informações, consulte “ SET OPTIMIZE” e “Compreendendo a Tecnologia


Rushmore” no capítulo 15, “Otimizando Aplicativos”, no Guia do Desenvolvedor
.
TYPE Especifica o tipo de arquivo, caso o arquivo criado não seja uma tabela do Visual FoxPro.
Embora você deva especificar um tipo de arquivo, não é necessário incluir a palavra-chave TYPE.

FOXPLUS Os arquivos do tipo memo do Visual FoxPro possuem uma estrutura diferente daquela
dos arquivos memo do FoxBASE+. Caso a tabela-fonte do Visual FoxPro contenha um campo
Memo, inclua a cláusula FOXPLUS para criar uma tabela que possa ser utilizada no FoxBASE+. O
campo Memo do Visual FoxPro não pode conter dados binários, pois o FoxBASE+ não suporta
dados binários em campos Memo.

FOX2X Cria uma nova tabela que pode ser aberta em versões anteriores do FoxPro (versões 2.0,
2.5 e 2.6).

Para campos do tipo Numérico, Flutuante, Inteiro, Duplo e Moeda, valores nulos na tabela-fonte
são convertidos para zero na nova tabela. Para outros tipos de campo, valores nulos na tabela-fonte
são deixados em branco na nova tabela. Para obter maiores informações sobre valores em branco,
consulte “ ISBLANK( )”.

A tabela abaixo lista os tipos de campo do Visual FoxPro que serão convertidos em tipos de campos
diferentes na nova tabela, quando o argumento FOX2X for incluído.

Tipo de Campo do Visual FoxPro Tipo de Campo do FoxPro 2.X

Moeda Flutuante
DataHora Data
Duplo Flutuante

Inteiro Numérico
DIF Cria um arquivo DIF (Data Interchange Format) do VisiCalc®. Os campos da tabela do
Visual FoxPro tornam-se vetores (colunas) e os registros tornam-se tuplas (linhas). O nome do novo
arquivo receberá a extensão .DIF, caso não seja incluída uma extensão em NomeArquivo.
MOD Cria um arquivo do Microsoft Multiplan® versão 4.01. O nome do novo arquivo do
Microsoft Multiplan receberá a extensão .MOD, caso não seja incluída uma extensão
SDF Cria um arquivo SDF (System Data Format). Um arquivo SDF é um arquivo de texto ASCII
no qual os registros possuem um comprimento fixo e terminam com um retorno de carro e um
comando de alimentação de linha. Os campos não são delimitados. O nome do arquivo SDF
receberá a extensão .TXT, caso não seja incluída uma extensão.

SYLK Cria um arquivo de intercâmbio SYLK (Symbolic Link). Os arquivos SYLK são utilizados
no Microsoft MultiPlan. Cada campo da tabela selecionada no momento torna-se uma coluna da
planilha, e cada registro torna-se uma linha. Os nomes de arquivos SYLK não possuem extensão.
WK1 Cria um arquivo de planilha do Lotus® 1-2-3® versão 2.x. Cada campo da tabela
selecionada no momento torna-se uma coluna da planilha, e cada registro torna-se uma linha. A
nova planilha recebe a extensão de nome de arquivo .WK1.

WKS Cria um arquivo de planilha do Lotus 1-2-3 versão 1a. Cada campo da tabela selecionada no
momento torna-se uma coluna da planilha, e cada registro torna-se uma linha. A nova planilha
recebe a extensão de nome de arquivo .WKS.
WR1 Cria um arquivo de planilha do Lotus Symphony® versão 1.1 ou 1.2. Cada campo da tabela
selecionada no momento torna-se uma coluna da planilha, e cada registro torna-se uma linha. A
nova planilha recebe a extensão de nome de arquivo .WR1.

WRK Cria um arquivo de planilha do Lotus Symphony versão 1.0. Cada campo da tabela
selecionada no momento torna-se uma coluna da planilha, e cada registro torna-se uma linha. A
nova planilha recebe a extensão de nome de arquivo .WR1.
XLS Cria um arquivo de planilha do Microsoft Excel versão 2.0. Cada campo da tabela
selecionada no momento torna-se uma coluna da planilha, e cada registro torna-se uma linha. A
nova planilha receberá a extensão .XLS, caso não seja incluída uma extensão.

XL5 Cria um arquivo de planilha do Microsoft Excel versão 5.0. Cada campo da tabela
selecionada no momento torna-se uma coluna da planilha, e cada registro torna-se uma linha. A
nova planilha receberá a extensão .XLS, caso não seja incluída uma extensão.
DELIMITED Cria um arquivo delimitado. Um arquivo delimitado é um arquivo de texto ASCII
no qual cada registro termina com um retorno de carro e um comando de alimentação de linha. O
separador de campo padrão é a vírgula. Como os dados de caractere podem incluir vírgulas, os
campos de caractere também podem ser delimitados por aspas.

A menos que você especifique outra coisa, a extensão .TXT será atribuída a todos os arquivos do
tipo DELIMITED recém-criados.

DELIMITED WITH Delimitador Cria um arquivo delimitado com campos de caractere


delimitados por um caractere que não seja as aspas. O caractere que delimita campos de caractere é
especificado com Delimitador.
DELIMITED WITH BLANK Cria um arquivo delimitado com campos separados por espaços em
vez de vírgulas.
DELIMITED WITH TAB Cria um arquivo delimitado com campos separados por tabulações em
vez de vírgulas.
DELIMITED WITH CHARACTER Delimitador Cria um arquivo delimitado com todos os
campos delimitados pelo caractere especificado por Delimitador. Se Delimitador for um ponto-e-
vírgula (o caractere utilizado no Visual FoxPro para indicar continuação de linha de comando),
coloque o caractere de ponto-e-vírgula entre aspas. Você também pode especificar as palavras-
chave BLANK e TAB para Delimitador.

Observe que a cláusula WITH do Delimitador pode ser combinada com a cláusula WITH
CHARACTER. Por exemplo, o comando a seguir cria um arquivo de texto com campos de
caracteres delimitados por caracteres de sublinhado e todos os campos delimitados por ponto-e-
vírgula:

COPY TO mytxt.txt DELIMITED WITH _ WITH CHARACTER ‘;’

AS nPáginaCódigo Especifica a página de código para a tabela ou arquivo criado por COPY TO.
O Visual FoxPro copia o conteúdo da tabela selecionada no momento e, ao copiar os dados,
converte-os automaticamente para a página de código especificada para a nova tabela ou arquivo.
Se for possível, o Visual FoxPro marcará a tabela ou arquivo recém-criado com a página de código
especificada.
Se você especificar para nPáginaCódigo um valor que não seja suportado, o Visual FoxPro gera
uma mensagem de erro. Você pode utilizar GETCP( ) em nPáginaCódigo a fim de exibir a caixa de
diálogo Página de código, onde poderá especificar uma página de código para a tabela ou o arquivo
criado pelo Visual FoxPro.

Se você omitir AS nPáginaCódigo, a tabela ou o arquivo recém-criados serão convertidos para a


página de código atual do Visual FoxPro.

Caso nPáginaCódigo seja igual a 0, não ocorrerá a conversão de página de código e a tabela ou
arquivo recém-criados não serão marcados com uma página de código.

Comentários

Caso uma ordem de índice seja definida, os registros serão copiados na ordem do índice principal.

COPY TO, exemplo do comando

No exemplo a seguir, a tabela customer é aberta e os três registros seguintes são copiados para um
novo arquivo de dados do tipo DELIMITED, denominado TEMP.TXT.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

COPY NEXT 3 TO temp TYPE DELIMITED


WAIT WINDOW 'Este é o arquivo de texto delimitado' NOWAIT
MODIFY FILE temp.txt
DELETE FILE temp.txt

COS( ), função

Retorna o co-seno de uma expressão numérica.

Sintaxe

COS(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica uma expressão numérica, cujo co-seno é retornado por COS( ). nExpressão
pode ser qualquer valor.
Comentários

COS( ) retorna o co-seno de nExpressão em radianos. Utilize DTOR( ) para converter um ângulo de
graus em radianos. O número de casas decimais que COS( ) retorna pode ser especificado com SET
DECIMALS. O valor retornado por COS( ) varia entre –1 e 1.

COS( ), função exemplo

CLEAR
? COS(0) && Exibe 1.00
? COS(PI( )) && Exibe -1.00
? COS(DTOR(180)) && Exibe -1.00
STORE PI( ) * 3 TO gnAngle
? COS(gnAngle) && Exibe -1.00

COUNT, comando

Conta os registros de uma tabela.

Sintaxe

COUNT
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[TO NomeVarMem]
[NOOPTIMIZE]

Argumentos

Escopo Especifica um intervalo de registros a serem incluídos na contagem. As cláusulas de


escopo são: ALL, NEXT nRegistros, RECORD nNúmeroRegistro e REST. Os comandos que
incluem Escopo operam somente na tabela da Área de trabalho ativa.

O escopo padrão para COUNT é ALL, ou seja, todos os registros.

FOR lExpressão1 Especifica que apenas os registros que satisfaçam a condição lógica lExpressão1
serão contados.Ao incluir FOR, você poderá contar os registros condicionalmente, filtrando os
registros indesejáveis.

Rushmore irá otimizar uma consulta COUNT FOR se lExpressão1 for uma expressão otimizável.
Para obter um melhor desempenho, utilize uma expressão otimizável na cláusula FOR.

Para obter maiores informações sobre expressões otimizáveis, consulte SET OPTIMIZE, e
“Compreendendo a tecnologia Rushmore” no capítulo 15, “Otimizando aplicativos”, no Guia do
Desenvolvedor.
WHILE lExpressão2 Especifica uma condição pela qual os registros serão contados, quando a
expressão lógica lExpressão2 resulta em verdadeiro (.T.).

TO NomeVarMem Especifica a matriz ou variável de memória na qual a contagem de registros


será armazenada.Se a variável de memória especificada não existir, o Visual FoxPro criará uma.

NOOPTIMIZE Desativa a otimização Rushmore de COUNT. Para obter maiores informações,


consulte SET OPTIMIZE, e “Compreendendo a tecnologia Rushmore” na Ajuda ou o capítulo 17,
“Otimizando aplicativos”, no Guia do Desenvolvedor.

Comentários

COUNT conta os registros dentro de um escopo de registros para os quais a condição FOR ou
WHILE seja verdadeira. Se SET TALK estiver ativo (ON), a contagem de registros é exibida.

Os registros marcados para exclusão serão incluídos na contagem caso SET DELETE esteja
desativado (OFF).

COUNT, exemplo do comando

O exemplo a seguir conta e exibe o número de clientes em Paris.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

CLEAR
COUNT FOR UPPER(city) = 'PARIS'
DISPLAY FIELDS company, contact FOR UPPER(city) = 'PARIS'

CREATE COLOR SET, comando

Cria um conjunto de cores a partir das definições de cores atuais.

Sintaxe

CREATE COLOR SET NomeConjuntoCores

Argumentos

NomeConjuntoCores Especifica o nome do conjunto de cores a ser criado.

Comentários
Os conjuntos de cores não são aceitos no FoxPro para Macintosh; CREATE COLOR SET será
ignorado.

Cada par de cores em cada esquema de cores é salvo no conjunto de cores que você criou. O nome
de um conjunto de cores pode ter até 24 caracteres no Visual FoxPro (10 caracteres em versões
anteriores do FoxPro) e pode conter números e caracteres de sublinhado, mas não pode começar
com um número.

Uma vez criado um conjunto de cores, você poderá carregá-lo com SET COLOR SET.

Os conjuntos de cores são salvos no arquivo de recurso do Visual FoxPro. Se já existir um conjunto
de cores com o nome especificado, ele será sobrescrito.

Para obter maiores informações sobre esquemas de cores e pares de cores, consulte Visão Geral de
Cores.

CREATE DATABASE, comando

Cria e abre um banco de dados.

Sintaxe

CREATE DATABASE [NomeBancoDados | ?]

Argumentos

NomeBancoDados Especifica o nome do banco de dados a ser criado.

Caso SAFETY esteja ativado (ON) e o nome do banco de dados especificado tenha o mesmo
caminho e o mesmo nome de um banco de dados existente, o Visual FoxPro exibirá uma caixa de
diálogo de aviso, solicitando a especificação de um novo caminho ou nome para o banco de dados.

? Exibe a caixa de diálogo Criar na qual você pode especificar o nome do banco de dados a ser
criado.

Comentários

Um arquivo de banco de dados tem uma extensão .DBC. Os arquivos de memo do banco de dados
associado têm uma extensão .DCT e os arquivos de índice associados têm uma extensão .DCX.

O banco de dados é aberto em modo exclusivo, independente da definição de SET EXCLUSIVE.


Como CREATE DATABASE abre o banco de dados após a sua criação, não é necessário emitir um
comando OPEN DATABASE subseqüente.
Caso CREATE DATABASE seja emitido sem nenhum de seus argumentos opcionais, a caixa de
diálogo Criar será exibida, permitindo que você especifique um nome para o banco de dados.

CREATE DATABASE, exemplo do comando

Este exemplo cria um banco de dados chamado people. Uma tabela denominada friends é criada e
automaticamente adicionada ao banco de dados. DISPLAY TABLES é utilizado para exibir as
tabelas no banco de dados e DISPLAY DATABASES é utilizado para exibir informações sobre as
tabelas no banco de dados.

CREATE DATABASE people


CREATE TABLE friends (FirstName C(20), LastName C(20))
CLEAR
DISPLAY TABLES && Exibe as tabelas do banco de dados
DISPLAY DATABASES && Exibe informações sobre as tabelas

CREATE FROM, comando

Cria uma tabela a partir de um arquivo construído com COPY STRUCTURE EXTENDED.

Sintaxe

CREATE
[NomeArquivo1 [DATABASE NomeBancoDados [NAME NomeLongoTabela]]]
FROM [NomeArquivo2]

Argumentos

NomeArquivo1 Especifica o nome da nova tabela a ser criada.

DATABASE NomeBancoDados Especifica um banco de dados em que a nova tabela será


adicionada.

NAME NomeLongoTabela Especifica um nome longo para a nova tabela. Os nomes longos
podem conter até 128 caracteres e podem ser utilizados em substituição aos nomes de arquivos
reduzidos no banco de dados.

NomeArquivo2 Especifica a tabela (criada com COPY STRUCTURE EXTENDED ou


manualmente) a partir da qual a nova tabela será criada.

Comentários

Esta variação de CREATE pressupõe que a tabela especificada em NomeArquivo2 tenha sido
criada com COPY STRUCTURE EXTENDED ou manualmente. Uma nova tabela,
NomeArquivo1, é criada com a estrutura descrita em NomeArquivo2. A tabela recém-criada torna-
se a tabela ativa.
Se você não incluir NomeArquivo1 ou NomeArquivo2 ou ambos, será exibida uma caixa de
diálogo, na qual você poderá especificar o arquivo a ser criado, o arquivo FROM ou ambos.

Observe que todos os registros em NomeArquivo2, incluindo aqueles que estão marcados para
exclusão, são utilizados para criar NomeArquivo1.

CREATE FROM, exemplo do comando

O exemplo a seguir exibe a estrutura da tabela orders, copia a estrutura estendida para a tabela
temp, pesquisa temp, cria uma tabela denominada backup a partir de temp e exibe a estrutura de
backup.

CLOSE DATABASES
CLEAR
SET PATH TO (HOME( ) + 'samples\data\') && Define o caminho para o banco de dados
USE orders
DISPLAY STRUCTURE
WAIT WINDOW 'Estrutur da tabela orders' NOWAIT
COPY STRUCTURE EXTENDED TO temp
USE temp
WAIT WINDOW 'A tabela temporária contém 1 linha por campo em ORDERS' NOWAIT
BROWSE
CREATE backup FROM temp
USE backup
DISPLAY STRUCTURE
WAIT WINDOW 'Backup.dbf tem a mesma estrutura que ORDERS' NOWAIT
USE
DELETE FILE temp.dbf

DELETE FILE backup.dbf

CREATE MENU, comando

Abre o Criador de menus no Visual FoxPro.

Sintaxe

CREATE MENU [NomeArquivo | ?]


[NOWAIT] [SAVE]
[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]

Argumentos

NomeArquivo Especifica o nome de arquivo para a tabela de menu. Caso não seja especificada
uma extensão para o nome de arquivo, o Visual FoxPro atribuirá automaticamente a extensão
.MNX.
? Exibe a caixa de diálogo Criar, solicitando que você digite um nome para o menu que está sendo
criado.

NOWAIT Continua a execução do programa depois que o Criador de menus é aberto. Oprograma
não espera que o Criador de menus seja fechado, mas continua a execuçãona linha de programa
imediatamente após a linha que contém CREATE MENU NOWAIT.Caso você omita NOWAIT
quando CREATE MENU for emitido em um programa, oCriador de menus será aberto e a execução
do programa interrompida até que oCriador de menus seja fechado.

Se você emitir CREATE MENU na janela Comando e incluir NOWAIT, não será exibida a caixa
de diálogo Novo menu. Esta caixa de diálogo permite que você especifique o tipo de menu criado
(padrão ou de atalho).

SAVE Faz com que o Criador de menus permaneça aberto depois que outra janela éativada. Se
você omitir SAVE, o Criador de menus será fechado quando outra janela forativada. A inclusão de
SAVE não tem efeito quando o comando é emitido na janelaComando.

WINDOW NomeJanela1 Especifica uma janela cujas características são adotadas peloCriador de
menus. Por exemplo, se a janela for criada com a opção FLOAT de DEFINEWINDOW, o Criador
de menus poderá ser movido. Não é necessário que a janela estejaativa ou visível, mas ela deve
estar definida.

O Criador de menus possui um tamanho padrão que pode ser maior que a janela
cujascaracterísticas ele assume. Nesse caso, o Criador de menus ainda adquire ascaracterísticas da
janela na qual é posicionado. O canto superior esquerdo do Criador demenus é posicionado nas
mesmas coordenadas do canto superior esquerdo da janela ese estende além das bordas da janela.

IN [WINDOW] NomeJanela2 Especifica uma janela pai onde o Criador de menus éaberto. O
Criador de menus não adquire as características da janela pai e não pode sermovido para fora dela.
Caso a janela pai seja movida, o Criador de menus também serámovido.

A janela pai deve ser definida primeiramente com DEFINE WINDOW, e deve estar visívelpara
que se possa acessar o Criador de menus.

IN SCREEN Especifica que o Criador de menus seja explicitamente aberto na janelaprincipal do


Visual FoxPro, depois de ter sido posicionado em uma janela pai. O Criadorde menus é posicionado
em uma janela pai com a inclusão da cláusula IN WINDOW.

Comentários

A emissão de CREATE MENU sem argumentos adicionais abre o Criador de menus, noqual você
pode definir um sistema de menu. O nome MENU1 é atribuído temporariamente àtabela de
definição de menu. Ao sair do Criador de menus, você pode salvar a definição demenu com um
nome diferente.

Para obter maiores informações sobre como criar menus, consulte “Criando um sistema de menus”
e o capítulo 11, “Criando menus e barras de ferramentas”, no Guia do Desenvolvedor.
CREATE REPORT - Relatório Rápido, comando

Cria um relatório utilizando a linguagem de programação.

Sintaxe

CREATE REPORT NomeArquivo1 | ? FROM NomeArquivo2


[FORM | COLUMN] [FIELDS ListaCampos] [ALIAS]
[NOOVERWRITE] [WIDTH nColunas]

Argumentos

NomeArquivo1 Especifica o nome de arquivo do relatório. Caso não seja especificada uma
extensão para o nome de arquivo, o Visual FoxPro atribuirá automaticamente a extensão .FRX.

? Exibe a caixa de diálogo Criar, que solicita um nome para o relatório que está sendo criado.

FROM NomeArquivo2 Especifica o nome da tabela a partir da qual o relatório será criado. A
tabela não precisa estar aberta.

FORM Especifica que o relatório é criado com os campos e seus nomes organizados de cima para
baixo na faixa Detalhes.

COLUMN Especifica que o relatório seja criado com os campos organizados da esquerda para a
direita da página na faixa Detalhes. Os nomes dos campos são localizados na faixa Cabeçalho de
página. Caso você omita FORM e COLUMN, o relatório assume os padrões para o formato de
COLUMN.

FIELDS ListaCampos Especifica os campos da tabela que aparecerão no relatório. Separa os


campos em ListaCampos por vírgulas.

ALIAS Especifica que o alias da tabela é adicionado aos nomes dos campos no relatório.

NOOVERWRITE Especifica que um relatório existente não é sobrescrito. Caso já exista um


relatório com o nome especificado com NomeArquivo1, o relatório não será criado.

WIDTH nColunas Especifica a largura da página do relatório, em colunas.

Comentários

Este formato de CREATE REPORT cria um relatório rápido sem abrir o Criador de relatórios. O
relatório será criado como se você selecionar Relatório rápido no menuRelatório.

Outra forma de CREATE REPORT, discutida no tópico anterior, abre o Criador de relatórios e
permite criar um relatório de forma interativa.
Para obter outras informações sobre relatórios e etiquetas, consulte “Criando relatórios e etiquetas”
na seção “Utilizando o Visual FoxPro” e o capítulo 7, “Criando relatórios e etiquetas”, no Guia do
Usuário.

CREATE TRIGGER, comando

Cria um disparador de Exclusão, Inserção ou Atualização para uma tabela.

Sintaxe

CREATE TRIGGER ON NomeTabela


FOR DELETE | INSERT | UPDATE AS lExpressão

Argumentos

NomeTabela Especifica a tabela do banco de dados atual para a qual é criado um disparador.

FOR DELETE | INSERT | UPDATE Especifica o tipo de disparador criado pelo Visual FoxPro.

Caso já exista um disparador do tipo especificado e SET SAFETY esteja ativado (ON), o Visual
FoxPro perguntará se você gostaria de sobrescrever o disparador existente. Caso SET SAFETY
esteja desativado (OFF), o disparador existente será automaticamente sobrescrito.

AS lExpressão Especifica a expressão lógica avaliada quando o disparador ocorre. lExpressão pode
ser uma função definida pelo usuário ou um procedimento armazenado que retorna um valor lógico.
Procedimentos armazenados são criados para uma tabela com MODIFY PROCEDURE.

Uma função definida pelo usuário ou um procedimento armazenado pode utilizar AERROR( ) para
determinar o nome da tabela para a qual o disparador ocorreu e o tipo de disparador.

Caso lExpressão resulte em verdadeiro (.T.), o comando ou evento que provocou a ocorrência do
disparador será executado.

Caso lExpressão resulte em falso (.F.), o comando ou evento, que provocou a ocorrência do
disparador, não será executado. Caso haja um procedimento ON ERROR em vigor, o procedimento
ON ERROR será executado em vez do comando ou evento. Caso não haja um procedimento ON
ERROR em vigor, o comando ou evento não será executado e o Visual FoxPro irá gerar uma
mensagem de erro.

Comentários

Utilize CREATE TRIGGER para interceptar eventos que fazem com que os registros de uma tabela
sejam excluídos, adicionados ou alterados. Os disparadores de Exclusão, Inserção ou Atualização
podem ser criados somente para uma tabela que tenha sido adicionada a um banco de dados. Utilize
CREATE DATABASE para criar um banco de dados e ADD TABLE para adicionar uma tabela a
um banco de dados.

As listas abaixo descrevem os eventos que provocam a ocorrência de um disparador de Exclusão,


Inserção ou Atualização.

Disparador de exclusão

· DELETE é emitido.
· Um registro é marcado para exclusão a partir do menu Tabela em uma janela Pesquisar ou
em uma janela Editar.
Disparador de inserção

· APPEND FROM é emitido.


· APPEND FROM ARRAY é emitido.
· APPEND BLANK é emitido.
· Um registro é incluído a partir do menu Tabela em uma janela Pesquisar ou Editar.
· IMPORT é emitido.
· INSERT - SQL é emitido.
· RECALL é emitido.
· Um registro é reintegrado a partir do menu Tabela em uma janela Pesquisar ou Editar.

Disparador de atualização

· GATHER é emitido.
· REPLACE é emitido.
· REPLACE FROM ARRAY é emitido.
· UPDATE – SQL é emitido.
· outro evento que provoque uma modificação em um registro, como acontece a um
Formulário alterar o conteúdo de um campo.

As regras a seguir aplicam-se a disparadores criados com CREATE TRIGGER:

· INSERT não pode ser emitido para uma tabela com um disparador. No entanto, INSERT -
SQL pode ser utilizado.
· A emissão de PACK não provoca a ocorrência de nenhum disparador.
· A emissão de ZAP não provoca a ocorrência de um disparador de Exclusão.
· Não ocorrerá nenhum disparador se você atualizar um registro marcado para exclusão.
· Um disparador poderá não ocorrer imediatamente, dependendo do modo de utilização do
buffer atual:

CREATE TRIGGER, exemplo de comando

O exemplo a seguir cria um disparador de Atualização que impede que valores acima de 50 sejam
digitados no campo maxordamt da tabela customer. Uma mensagem de erro é gerada quando o
primeiro comando REPLACE é executado, pois o valor do campo maxordamt
é maior que 50. O segundo comando REPLACE não gera erro porque o valor do campo
maxordamt é menor ou igual a 50.

CLOSE DATABASES

OPEN DATABASE SYS(2004)+"samples\data\testdata"


USE customer && Abre a tabela customer

* Define o disparador no campo maxordamt para falhar com valores <= 50


CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50

ON ERROR && Restaura o gerenciador de erro do sistema

WAIT WINDOW "Pressione uma tecla para testar o disparador com valor 60"+CHR(13);
+"Quando você receber a mensagem de erro, pressione Ignorar".
REPLACE maxordamt WITH 60 && Exibe uma mensagem de erro

? maxordamt

WAIT WINDOW "Pressione uma tecla para testar com valor 50".
REPLACE maxordamt WITH 50 && O valor é aceito
? maxordamt
DELETE TRIGGER ON customer FOR UPDATE && Remove o disparador

CREATE, comando

Cria uma nova tabela do Visual FoxPro.

Sintaxe

CREATE [NomeArquivo | ?]

Argumentos

NomeArquivo Especifica o nome da tabela a ser criada.

? Exibe a caixa de diálogo Criar, solicitando que você digite um nome para a tabela que está sendo
criada.

Comentários

No Visual FoxPro, se houver um banco de dados aberto, quando uma tabela for criada, a tabela será
automaticamente adicionada ao banco de dados.
No Visual FoxPro, FoxPro para Windows e FoxPro para MS-DOS, não é possível criar uma tabela
com o nome de um dispositivo do MS-DOS, como CON, NUL, PRN e COM1. Você deve evitar
utilizar hífens em um nome de tabela, pois os nomes de tabela hifenizados não aparecem na janela
Visualizar e podem ser confundidos com o indicador de alias (->).

Uma tabela é criada definindo-se o nome, o tipo e o tamanho de cada campo. Depois que a estrutura
da tabela estiver criada, você poderá adicionar os registros. Para obter maiores informações sobre
tabelas, consulte o capítulo 2, “Criando tabelas e índices”, no Guia do Usuário.

CTOBIN( ), função

Converte uma representação de caractere binário para um valor inteiro.

Sintaxe

CTOBIN(cExpressão)

Tipos de retorno

Numérico

Argumentos

cExpressão Especifica a representação de caractere binário a ser convertida.

Comentários

Utilize CTOBIN( ) para converter uma representação de caractere binário criada com BINTOC( )
de volta ao seu valor inteiro.

CTOD( ), função

Converte uma expressão de caracteres em uma expressão de data.

Sintaxe

CTOD(cExpressão)

Tipos de retorno

Data
Argumentos

cExpressão Especifica uma expressão de caracteres para a qual CTOD( ) retorna um valor do tipo
Data. cExpressão deve resultar em uma data válida de 1/1/100 a 12/31/9999.

O formato padrão para cExpressão é mm/dd/aa. É possível utilizar SET DATE e SET CENTURY
para alterar o formato padrão. Se o século não for especificado quando uma data for digitada (como
na expressão de caracteres 1/1/95), será adotado o século XX.

Comentários

CTOD( ), a função de conversão de caractere para data, retorna um valor do tipo Data a partir de
uma expressão de caracteres.

CTOD( ), exemplo da função

STORE '7/4/1776' TO gcthe_4th

CLEAR
? CTOD(gcthe_4th)
STORE DATE( ) TO gdtoday
STORE CTOD('12/25/95') TO gdchristmas
STORE STR(gdchristmas - gdtoday, 4) TO gddays_left
? 'Faltam', gddays_left, 'dias para o Natal'

CTOT( ), função

Retorna um valor de DataHora a partir de uma expressão de caracteres.

Sintaxe

CTOT(cExpressãoCaracteres)

Tipos de retorno

DataHora

Argumentos

cExpressãoCaracteres Especifica uma expressão de caracteres a partir da qual um valor de


DataHora é retornado. O formato adequado para cExpressãoCaracteres é determinado pelas
definições atuais de SET DATE, SET HOURS e SET MARK. cExpressãoCaracteres tem que
retornar um valor de DataHora reconhecível, caso contrário o Visual FoxPro irá gerar um erro.

A seguir são apresentados exemplos de expressões de caracteres válidas:


02/16/95 2:00:00pm
02/16/95 2:00pm
02/16/95 14:00
02/16/95
14:00

Caso apenas uma parte relativa à data ou à hora seja especificada em cExpressãoCaracteres, o
Visual FoxPro adicionará automaticamente a hora padrão de meia-noite (12:00:00 A.M.) ou a data
padrão de 12/30/1899 à cExpressãoCaracteres.

É possível incluir o século em cExpressãoCaracteres, mas ele somente será retornado se SET
CENTURY estiver ativado (ON). Caso não seja incluído um século, será adotado o século XX.

CTOT( ), exemplo da função

O exemplo a seguir utiliza CTOT( ) para converter uma seqüência de caracteres para um valor de
DataHora. Observe que CTOT( ) acrescenta automaticamente a hora de meia-noite (12:00:00 A.M.)
à seqüência de caracteres.

? BETWEEN(CTOT('02/16/95'), {02/15/95 11:00pm}, {02/16/95 1:00am})


? CTOT('02/16/95')

CURDIR( ), Função

Retorna o diretório atual.

Sintaxe

CURDIR([cExpressão])

Tipos de retorno

Caractere

Argumentos

cExpressão Especifica a unidade de disco ou o volume para o qual CURDIR( ) retorna o diretório
ou pasta atual. Caso você omita cExpressão, será adotado o volume ou a unidade de disco padrão
atual. A seqüência vazia será retornada se a unidade ou volume especificado em cExpressão não
existir.
Comentários

CURDIR( ) retorna, como seqüência de caracteres, o diretório atual do MS-DOS em uma unidade
especificada.

CURDIR( ), exemplo de Função

O exemplo a seguir armazena o diretório atual em uma variável, define a padrão para o diretório no
qual o Visual FoxPro foi criado, exibe o novo diretório, retorna o padrão para o diretório original e
exibe o diretório original.

CLEAR
? 'Diretório atual: ', CURDIR( )
gcOldDir = SET('DEFAULT') + SYS(2003)
SET DEFAULT TO (HOME( ))
? 'Diretório do Visual FoxPro: ', CURDIR( )
SET DEFAULT TO (gcOldDir)
? 'Diretório atual: ', CURDIR( )

DATE( ), função

Retorna a data do sistema atual, que é controlada pelo sistema operacional.

Sintaxe

DATE( )

Tipos de Retorno

Data

Comentários

Nenhum comando ou função do Visual FoxPro pode alterar diretamente a data do sistema.

O formato da seqüência de caracteres retornado por DATE( ) pode ser alterado com SET
CENTURY, SET DATE e SET MARK TO.

DATE( ),exemplo da função

O exemplo a seguir exibe a data do sistema atual com e sem o século.

CLEAR
SET CENTURY OFF
? DATE( ) && Exibe a data de hoje sem o século
SET CENTURY ON
? DATE( ) && Exibe a data de hoje com o século
DATETIME( ), função

Retorna a data e a hora atuais como um valor de DataHora.

Sintaxe

DATETIME( )

Tipos de Retorno

DataHora

Comentários

O formato do valor de DataHora retornado por DATETIME( ) depende das definições atuais de
SET DATE, SET MARK, SET CENTURY, SET HOURS e SET SECONDS. Depende também das
definições selecionadas no Painel de controle do sistema operacional.

DATETIME( ), exemplo da função

Este exemplo armazena a data e hora para Ano Novo em uma variável denominada tNewyear, e
armazena a data e hora atual em uma variável denominada tToday. O número de segundos entre a
data e hora atual e Ano Novo será então exibido.

tNewyear = {01/01/96 12:00am} && Ano Novo 1996


tToday = DATETIME( )
nSecondstonewyear = tNewyear - tToday
CLEAR
? "There are " + ALLTRIM (STR(nSecondstonewyear)) ;
+ " seconds to the New Year."

DAY( ), função

Retorna o número do dia do mês para uma dada expressão de data ou de data e hora.

Sintaxe

DAY(dExpressão | tExpressão)
Tipos de Retorno

Numérico

Argumentos

dExpressão Especifica a data da qual DAY( ) retorna um dia do mês. dExpressão pode ser um
literal de data, uma variável de memória do tipo Data, um elemento de matriz ou um campo de data.

tExpressão Especifica uma data ou hora da qual DAY( ) retorna um dia do mês. dExpressão pode
ser um literal de data e hora, uma variável de memória do tipo DataHora, um elemento de matriz ou
um campo de data e hora.

Comentários

DAY( ) retorna um número de 1 a 31.

DAY( ), exemplo da função

STORE {03/05/95} TO gdBDate

CLEAR
? CDOW(gdBDate) && Exibe Domingo
? DAY(gdBDate) && Exibe 5
? 'That date is ', CMONTH(gdBDate),STR(DAY(gdBDate),2)

DBC( ), função

Retorna o nome e o caminho do banco de dados atual.

Sintaxe

DBC( )

Tipos de Retorno

Caractere

Comentários

DBC( ) retornará a seqüência vazia caso não haja nenhum banco de dados atual.

Utilize SET DATABASE para especificar o banco de dados atual.


DBC( ), exemplo da função

O exemplo a seguir abre o banco de dados testdata e utiliza DBC( ) para exibir informações sobre o
banco de dados.

CLOSE DATABASES
OPEN DATABASE (SYS(2004) + "samples\data\testdata") && Abre o DBC.

CLEAR
? DBC( ) && Exibe o caminho e o nome do banco de dados

DBF( ), função

Retorna o nome de uma tabela aberta em uma Área de trabalho especificada ou um nome de tabela
de um alias de tabela.

Sintaxe

DBF([cAliasTabela | nÁreaTrabalho])

Tipos de Retorno

Caractere

Argumentos

cAliasTabela Especifica o alias de tabela.

nÁreaTrabalho Especifica o número da Área de trabalho.

Se você omitir cAliasTabela e nÁreaTrabalho, DBF( ) retornará o nome da tabela aberta na Área de
trabalho atual. DBF( ) retornará uma seqüência vazia caso não esteja aberta uma tabela na Área de
trabalho especificada. Caso uma tabela não tenha o alias especificado com cAliasTabela, o Visual
FoxPro irá gerar uma mensagem de erro.

Para obter informações sobre como criar um alias para uma tabela, consulte USE.

Comentários

Quando SET FULLPATH está ativado (ON), DBF( ) retorna o caminho da tabela com o nome da
tabela. Quando SET FULLPATH está desativado (OFF), DBF( ) retorna a unidade de disco em que
a tabela está residente com o nome da tabela.

DBF( ), exemplo da função


O exemplo abaixo retorna o nome de uma tabela de sua Área de trabalho e seu alias e retorna a
seqüência vazia após o fechamento de todas as tabelas.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer IN 2 ALIAS mycust
CLEAR
? DBF(2) && Exibe customer.dbf com seu caminho
? DBF('mycust') && Exibe customer.dbf com seu caminho
CLOSE DATABASES
? DBF( ) && Exibe a seqüência vazia

DBUSED( ), função

Retorna verdadeiro (.T.) se o banco de dados especificado estiver aberto.

Sintaxe

DBUSED(cNomeBancoDados)

Tipos de retorno

Lógico

Argumentos

cNomeBancoDados Especifica o nome do banco de dados para o qual DBUSED( ) retorna um


valor lógico que indica se o banco de dados está ou não aberto.

Comentários

A função DBUSED( ) retornará verdadeiro (.T.) se o banco de dados especificado estiver aberto;
caso contrário, retornará falso (.F.).

DBUSED( ), exemplo da função

O exemplo a seguir abre o banco de dados TESTDATA e, em seguida, utiliza DBUSED( ) para
determinar se o banco de dados TESTDATA e um banco de dados definido TEST estão abertos.

CLOSE DATABASES
OPEN DATABASE (SYS(2004) + "samples\data\testdata")

CLEAR
? 'Banco de dados Testdata está aberto? '
?? DBUSED('testdata') && Exibe .T.
? 'Banco de dados Test está aberto? '
?? DBUSED('test') && Exibe .F.
DEACTIVATE MENU, comando

Desativa uma barra de menu definida pelo usuário e remove-a da tela, mas não remove da memória
a definição da barra de menus.

Sintaxe

DEACTIVATE MENU NomeMenu1 [, NomeMenu2 ...] | ALL

Argumentos

NomeMenu1 [, NomeMenu2 ...] Especifica os nomes das barras de menus a serem desativadas. É
possível desativar um conjunto de barras de menus incluindo uma lista de nomes de barras de
menus separados por vírgulas.

ALL Desativa todos os menus ativos.

Comentários

DEACTIVATE MENU remove uma barra de menus ativa ou um conjunto de barras de menus da
janela principal do Visual FoxPro ou de uma janela definida pelo usuário sem remover a definição
da barra de menus da memória. É possível ativar novamente uma barra de menus utilizando
ACTIVATE MENU e o nome da barra de menus.

Dica Ao incluir a barra de menus do sistema (_MSYSMENU) em um aplicativo, não é necessário


defini-la, ativá-la ou desativá-la. Em vez disso, emita SET SYSMENU AUTOMATIC.

Para liberar uma barra de menus específica ou um conjunto de barras de menus da memória, utilize
RELEASE MENUS. Você pode liberar todas as barras de menus da memória com CLEAR
MENUS ou CLEAR ALL.

O controle do programa será retornado à linha do programa imediatamente após à linha que ativou a
barra de menus, a menos que DEFINE MENU BAR seja utilizado para criar a barra de menus ou
que ACTIVATE MENU NOWAIT seja utilizado para ativá-la.

DEACTIVATE MENU, exemplo do comando

O exemplo a seguir utiliza DEACTIVATE MENU para desativar um menu e removê-lo da tela. A
barra de menus do sistema atual é salva na memória com SET SYSMENU SAVE e todos os títulos
de menu do sistema são removidos com SET SYSMENU TO.
Dois títulos de menu são criados com DEFINE PAD, e DEFINE POPUP cria um menu para cada
título de menu. DEFINE BAR cria itens de menu em cada um dos menus. Quando um título de
menu é selecionado, ON PAD utiliza ACTIVATE POPUP para ativar o menu correspondente.
ACTIVATE MENU exibe e ativa a barra de menus.

Quando um item de um menu é selecionado, é executado o procedimento CHOICE. CHOICE exibe


o nome do item selecionado e o nome do menu que contém o item. O controle do programa
continua na linha após ACTIVATE MENU.
Finalmente, o menu é desativado e removido da tela e, em seguida, é liberado da memória com
RELEASE MENUS EXTENDED.

*** Nomeia este programa como DEACMENU.PRG ***


CLEAR
SET SYSMENU SAVE
SET SYSMENU TO
ON KEY LABEL ESC KEYBOARD CHR(13)
DEFINE MENU example BAR AT LINE 1
DEFINE PAD convpad OF example PROMPT '\<Conversões' COLOR SCHEME 3 ;
KEY ALT+C, ''
DEFINE PAD cardpad OF example PROMPT 'Informações \<do cartão' COLOR SCHEME 3 ;
KEY ALT+I, ''
ON PAD convpad OF example ACTIVATE POPUP conversion
ON PAD cardpad OF example ACTIVATE POPUP cardinfo
DEFINE POPUP conversion MARGIN RELATIVE SHADOW COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ár\<ea' ;


KEY CTRL+E, '^E'
DEFINE BAR 2 OF conversion PROMPT '\<Comprimento' ;
KEY CTRL+O, '^O'
DEFINE BAR 3 OF conversion PROMPT 'Ma\<ssa' ;
KEY CTRL+S, '^S'
DEFINE BAR 4 OF conversion PROMPT 'Velo\<cidade' ;
KEY CTRL+V, '^V'
DEFINE BAR 5 OF conversion PROMPT '\<Temperatura' ;
KEY CTRL+T, '^T'
DEFINE BAR 6 OF conversion PROMPT 'Te\<mpo' ;
KEY CTRL+M, '^M'
DEFINE BAR 7 OF conversion PROMPT 'Volu\<me' ;
KEY CTRL+L, '^L'

ON SELECTION POPUP conversion DO choice IN deacmenu WITH PROMPT( ), POPUP( )


DEFINE POPUP cardinfo MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF cardinfo PROMPT '\<Visualizar cobranças' ;
KEY ALT+B, ''
DEFINE BAR 2 OF cardinfo PROMPT 'Visualizar \<pagamentos' ;
KEY ALT+P, ''
DEFINE BAR 3 OF cardinfo PROMPT 'Visualizar\<w usuários' ;
KEY ALT+U, ''
DEFINE BAR 4 OF cardinfo PROMPT '\-'
DEFINE BAR 5 OF cardinfo PROMPT '\<Cobranças'
ON SELECTION POPUP cardinfo;

DO choice IN deacmenu WITH PROMPT( ), POPUP( )


ACTIVATE MENU example
DEACTIVATE MENU example
RELEASE MENU example EXTENDED
SET SYSMENU NOSAVE
SET SYSMENU TO DEFAULT
ON KEY LABEL ESC

PROCEDURE choice
PARAMETERS mprompt, mpopup
WAIT WINDOW 'Você escolheu ' + mprompt + ;
' do popup ' + mpopup NOWAIT

DEACTIVATE WINDOW, comando

Desativa as janelas definidas pelo usuário ou as janelas do sistema do


Visual FoxPro e as remove da tela, mas não da memória.

Sintaxe

DEACTIVATE WINDOW NomeJanela1 [, NomeJanela2 ...] | ALL

Argumentos

NomeJanela1 [, NomeJanela2 ...] Especifica uma ou mais janelas a serem desativadas. É possível
especificar janelas do sistema do Visual FoxPro como a janela Comando ou a janela de pesquisa.

ALL Desativa todas as janelas ativas.

Comentários

Mais de uma janela definida pelo usuário pode ser colocada na janela principal do Visual FoxPro ao
mesmo tempo, mas a saída é direcionada apenas à janela definida pelo usuário mais recentemente
ativada. Quando mais de uma janela definida pelo usuário for exibida, desativar a janela de saída
atual definida pelo usuário limpará o conteúdo da janela, removerá a janela da tela e envia a saída
subseqüente à janela definida pelo usuário anteriormente ativada. Se não houver janela de saída, a
saída será direcionada para a janela principal do Visual FoxPro.

Utilize CLEAR WINDOWS ou RELEASE WINDOWS para remover janelas tanto da tela quanto
da memória.

Para desativar uma janela do sistema e/ou uma barra de ferramentas (no Visual FoxPro), inclua o
nome completo da janela ou barra de ferramentas do sistema entre aspas. Por exemplo, para
desativar a Barra de ferramentas controles de relatório no Visual FoxPro, emita o comando a seguir:
DEACTIVATE WINDOW "Controles de relatório"

DEACTIVATE WINDOW, exemplo do comando

No exemplo a seguir, uma janela denominada wOutput1 é definida e ativada. Depois que um
registro da tabela customer é exibido, o programa espera que o usuário pressione uma tecla e, em
seguida, desativa a janela.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

CLEAR
DEFINE WINDOW wOutput1 FROM 2,1 TO 13,75 TITLE 'Saída' ;
CLOSE FLOAT GROW SHADOW ZOOM
ACTIVATE WINDOW wOutput1

DISPLAY
WAIT WINDOW 'Pressione uma tecla para desativar a janela'
DEACTIVATE WINDOW wOutput1
RELEASE WINDOW wOutput1

DECLARE, comando

Cria uma matriz unidimensional ou bidimensional.

Sintaxe

DECLARE NomeMatriz1 (nLinhas1 [, nColunas1])


[, NomeMatriz2 (nLinhas2 [, nColunas2])] ...

Comentários

DECLARE é idêntico a DIMENSION em termos de operação e sintaxe. Para obter maiores


informações, consulte DIMENSION.

DEFINE MENU, comando

Cria uma barra de menus.

Sintaxe
DEFINE MENU NomeBarraMenus
[BAR [AT LINE nLinha]]
[IN [WINDOW] NomeJanela | IN SCREEN]
[FONT cNomeFonte [, nTamanhoFonte]]
[STYLE cEstiloFonte]
[KEY RótuloTecla]
[MARK cCaractereMarca]
[MESSAGE cTextoMensagem]
[NOMARGIN]
[COLOR SCHEME nNúmeroEsquema
| COLOR ListaParesCores]

Argumentos

NomeBarraMenus Especifica o nome da barra de menus a ser criada. O nome da barra de menus
permite que você faça referência à barra de menus em outros comandos e funções.

BAR [AT LINE nLinha] Cria uma barra de menus que age como a barra de menus do sistema do
Visual FoxPro. A barra de menus possui as características a seguir:

· A barra de menus é desenhada horizontalmente, com uma linha de altura, de um lado a


outro da janela principal do Visual FoxPro ou da janela definida pelo usuário na qual está localizada
· A colocação dos títulos de menus na barra de menus é gerenciada automaticamente.
· Se o tamanho ou número de títulos de menus definidos ultrapassar o tamanho da tela ou
janela na qual a barra de menus está localizada, a barra de menus rola.

O número da linha é especificado com nLinha.

IN [WINDOW] NomeJanela Coloca a barra de menus em uma janela definida pelo usuário.
Especifique o nome da janela na qual você deseja colocar a barra de menus com NomeJanela. Se
você omitir IN WINDOW, a barra de menus será colocada na janela principal do Visual FoxPro
como padrão, a menos que haja uma janela ativa definida pelo usuário. Nesse caso, a barra de
menus será colocada na janela ativa.

IN SCREEN Coloca a barra de menus explicitamente na janela principal do Visual FoxPro.

FONT cNomeFonte [, nTamanhoFonte] Especifica uma fonte padrão para todos os títulos de
menus da barra de menus. Você pode substituir a fonte padrão de um título de menu individual
incluindo a cláusula FONT em DEFINE PAD.

cNomeFonte especifica o nome da fonte e cTamanhoFonte o tamanho em pontos. Por exemplo, o


comando a seguir cria uma barra de menus com títulos de menus na fonte Courier de 12 pontos:

DEFINE MENU mnuExample FONT 'Courier', 12


Se a fonte especificada não estiver disponível, uma fonte similar com características de fontes
similares irá substituí-la. Se você incluir a cláusula FONT, mas omitir o tamanho em pontos de
cTamanhoFonte, será utilizada uma fonte de 10 pontos.

A cláusula FONT será ignorada para títulos de menus acrescentados ao menu do sistema do Visual
FoxPro _MSYSMENU. Observe que o Criador de menus utiliza o menu do sistema do Visual
FoxPro.

STYLE cEstiloFonte Especifica um estilo de fonte padrão para todos os títulos de menus da barra
de menus. Você pode substituir o estilo padrão de títulos de menu individuais incluindo a cláusula
STYLE em DEFINE PAD.

Se você omitir a cláusula STYLE ou se o estilo de fonte especificado não estiver disponível, será
utilizado o estilo de fonte Normal.

Os estilos de fonte que podem ser especificados com cEstiloFonte são os seguintes:

Caractere Estilo de fonte

B Negrito
I Itálico
N Normal
Q Opaco
- Riscado
T Transparente
U Sublinhado
Você pode incluir mais de um caractere para especificar uma combinação de estilos de fonte. Por
exemplo, o comando a seguir especifica Negrito e Itálico:

DEFINE MENU mnuExample STYLE 'BI'


A cláusula STYLE será ignorada para títulos de menu adicionados ao menu _MSYSMENU do
sistema do Visual FoxPro. Observe que o Criador de menus utiliza o menu do sistema do Visual
FoxPro.

KEY RótuloTecla Especifica a tecla ou combinação de teclas utilizada para ativar a barra de
menus. Para obter uma lista de teclas e combinações de teclas disponíveis e seus respectivos nomes
de rótulos de tecla, consulte ” ON KEY LABEL”.

Incluir a cláusula KEY é equivalente a emitir o comando a seguir:

ON KEY LABEL RótuloTecla ACTIVATE MENU NomeMenu

Observação Se uma macro de teclado já estiver definida com o mesmo rótulo de tecla, ela terá
prioridade e a barra de menus não poderá ser ativada com a tecla ou combinação de teclas
especificada.

MARK cCaractereMarca Especifica um caractere de marca exibido à esquerda dos títulos de


menus na barra de menus. MARK pode ser incluído para alterar o caractere de marca padrão por um
caractere especificado com cCaractereMarca. Se cCaractereMarca incluir mais de um caractere,
somente o primeiro caractere será utilizado como o caractere de marca.

O caractere de marca padrão é uma verificação. A cláusula MARK é ignorada e o caractere de


marca padrão será utilizada se a barra de menus for o menu do sistema do Visual FoxPro. Além
disso, a cláusula MARK será ignorada se FoxFont não for a fonte da janela principal do Visual
FoxPro ou da janela definida pelo usuário na qual está localizada a barra de menus.

Observação A especificação de um caractere de marca não marca os nomes de menus em uma barra
de menus. Utilize SET MARK OF para marcar os títulos de menus em uma barra de menus com o
caractere especificado.

Os caracteres de marca especificados com DEFINE PAD têm prioridade sobre os caracteres de
marca especificados com a cláusula MARK em DEFINE MENU. SET MARK OF é utilizado para
ativar ou desativar caracteres de marca, podendo também ser utilizado para especificar um caractere
de marca para um item individual ou todos os itens de menu.

MESSAGE cTextoMensagem Exibe uma mensagem quando você seleciona um título de menu. A
mensagem é colocada na barra de status gráfica. Se a barra de status for desativada com SET
STATUS BAR OFF, a mensagem será centralizada na última linha da janela principal do Visual
FoxPro.

NOMARGIN Como padrão, remove os espaços colocados à esquerda e à direita de cada nome de
menu.

COLOR SCHEME nNúmeroEsquema Especifica as cores para uma barra de menus individual.

COLOR ListaParesCores Especifica as cores para uma barra de menus individual. Por padrão, as
cores dos itens de menu são determinadas pelo esquema de cores 2 do conjunto atual de cores.

Para obter maiores informações sobre esquemas e pares de cores, consulte o tópico ” Visão geral de
cores” .

Comentários

Utilize DEFINE MENU para criar a barra de menus para o sistema de menus de seu aplicativo.
Utilize DEFINE PAD para criar cada um dos títulos de menus (pads) na barra de menus. Utilize
ON PAD ... ACTIVATE para especificar o menu que será exibido embaixo de cada título de menu.
Utilize DEFINE POPUP para criar os menus embaixo de cada título de menu. Utilize ACTIVATE
MENU para ativar todo o sistema de menus.

Se você utilizar o Criador de menus para criar seu menu, talvez não tenha que utilizar nenhum
desses comandos. O Criador de menus cria automaticamente os comandos para seu menu. Ele
utiliza o menu do sistema do Visual FoxPro, que você pode modificar adicionando seus próprios
itens de menu.

Para obter maiores informações sobre a criação de menus, consulte “Criando um sistema de
menus”, no capítulo 11, “Criando menus e barras de ferramentas”, no Guia do Desenvolvedor.
DEFINE MENU, exemplo do comando

O exemplo a seguir utiliza DEFINE MENU para criar um sistema de menus definido pelo usuário.
A barra de menus do sistema atual é salva para memória com SET SYSMENU SAVE e, em
seguida, os títulos de menu do sistema são removidos com SET SYSMENU TO.
DEFINE MENU cria a barra de menus e dois títulos de menu são criados com DEFINE PAD.
DEFINE POPUP cria um menu para cada título de menu. DEFINE BAR cria itens em cada um dos
menus. Quando um título de menu é escolhido, ON PAD utiliza ACTIVATE POPUP para ativar o
menu correspondente. ACTIVATE MENU exibe e ativa a barra de menus.

Quando um item é escolhido a partir de um menu, o procedimento CHOICE é executado. CHOICE


exibe o nome do item escolhido e o nome do menu que contém o item.

*** Nomeie este programa como DEFIMENU.PRG ***


CLEAR
SET SYSMENU SAVE
SET SYSMENU TO
ON KEY LABEL ESC KEYBOARD CHR(13)
DEFINE MENU example BAR AT LINE 1
DEFINE PAD convpad OF example PROMPT '\<Conversões' COLOR SCHEME 3 ;
KEY ALT+C, ''
DEFINE PAD cardpad OF example PROMPT '\<Informações do cartão' COLOR SCHEME 3 ;
KEY ALT+I, ''
ON PAD convpad OF example ACTIVATE POPUP conversion
ON PAD cardpad OF example ACTIVATE POPUP cardinfo
DEFINE POPUP conversion MARGIN RELATIVE COLOR SCHEME 4

DEFINE BAR 1 OF conversion PROMPT 'Ár\<ea' ;


KEY CTRL+E, '^E'
DEFINE BAR 2 OF conversion PROMPT 'C\<omprimento' ;
KEY CTRL+O, '^O'
DEFINE BAR 3 OF conversion PROMPT 'Ma\<ssa' ;
KEY CTRL+S, '^S'
DEFINE BAR 4 OF conversion PROMPT '\<Velocidade' ;
KEY CTRL+V, '^V'
DEFINE BAR 5 OF conversion PROMPT '\<Temperatura' ;
KEY CTRL+T, '^T'
DEFINE BAR 6 OF conversion PROMPT 'Te\<mpo' ;
KEY CTRL+M, '^M'
DEFINE BAR 7 OF conversion PROMPT 'Vo\<lume' ;
KEY CTRL+L, '^L'

ON SELECTION POPUP conversion DO choice IN defimenu WITH PROMPT( ), POPUP( )


DEFINE POPUP cardinfo MARGIN RELATIVE COLOR SCHEME 4
DEFINE BAR 1 OF cardinfo PROMPT 'Visualizar co\<branças' ;
KEY ALT+B, ''
DEFINE BAR 2 OF cardinfo PROMPT 'Visualizar \<Pagamentos' ;
KEY ALT+P, ''
DEFINE BAR 3 OF cardinfo PROMPT 'Visualizar\< Usuários' ;
KEY ALT+U, ''
DEFINE BAR 4 OF cardinfo PROMPT '\-'
DEFINE BAR 5 OF cardinfo PROMPT '\<Cobranças '
ON SELECTION POPUP cardinfo;

DO choice IN defimenu WITH PROMPT( ), POPUP( )

ACTIVATE MENU example


DEACTIVATE MENU example
RELEASE MENU example EXTENDED
SET SYSMENU TO DEFAULT
ON KEY LABEL ESC
PROCEDURE choice
PARAMETERS mprompt, mpopup
WAIT WINDOW 'Você escolheu ' + mprompt + ;
' do popup ' + mpopup NOWAIT

DEFINE PAD, comando

Cria um título de menu (pad) em uma barra de menus definida pelo usuário ou na barra de menus
do sistema do Visual FoxPro.

Sintaxe

DEFINE PAD TítuloMenu1 OF NomeBarraMenus PROMPT cTextoTítuloMenu


[AT nLinha, nColuna]
[BEFORE NomeMenu2 | AFTER NomeMenu3]
[NEGOTIATE LEFT | NEGOTIATE MIDDLE | NEGOTIATE RIGHT]
[FONT cNomeFonte [, nTamanhoFonte]]
[STYLE cEstiloFonte]
[KEY RótuloTecla [, cTextoTecla]]
[MARK cCaractereMarca]
[SKIP [FOR lExpressão]]
[MESSAGE cTextoMensagem]
[COLOR SCHEME nNúmeroEsquema
| COLOR ListaParesCores]

Argumentos

TítuloMenu1 Especifica o título de menu a ser criado. O título de menu permite fazer referência ao
título de menu de outros comandos e funções.

OF NomeBarraMenus Especifica o nome da barra de menus na qual o título de menu está


localizado.

PROMPT cTextoTítuloMenu Especifica o texto exibido no título de menu.

Você pode criar uma tecla de acesso para o título de menu, colocando uma barra invertida e um
sinal de menor que (\<) antes do caractere que você gostaria que fosse a tecla de acesso. No
exemplo a seguir, o usuário pode pressionar a tecla F para escolher Faturas no menu Receber e a
tecla C para escolher Consulta no mesmo menu:

DEFINE MENU mnuReceive


DEFINE PAD padInvoice OF mnureceive PROMPT "\<Faturas"
DEFINE PAD padInquire OF mnureceive PROMPT "\<Estoque"
ACTIVATE MENU mnuReceive

AT nLinha, nColuna Especifica onde o título de menu é exibido na barra de menus. nLinha
, nColuna são as coordenadas do lado esquerdo do título de menu na janela principal do Visual
FoxPro ou em uma janela definida pelo usuário.

Se você omitir a cláusula AT, o lado esquerdo do primeiro título de menu será colocado na linha 0
da janela principal do Visual FoxPro ou da janela definida pelo usuário. O próximo título de menu
será colocado à direita do primeiro nome na linha 0 e assim por diante.

Observação Você não pode incluir AT para especificar uma localização para os títulos de menus
nas barras de menus criadas com a cláusula BAR em DEFINE MENU.

BEFORE NomeMenu2 Coloca o título de menu na barra de menus à esquerda do título de menu
especificado com NomeMenu2.A ordem em que os títulos de menus são acessados pelo teclado
corresponde à localização dos títulos de menus na barra de menus.
AFTER NomeMenu3 Coloca o título de menu na barra de menus à direita do título de menu
especificado com NomeMenu3. A ordem em que os títulos de menus são acessados a partir do
teclado corresponde à localização dos títulos de menus na barra de menus.

Você deve criar primeiro o título de menu especificado na cláusula BEFORE ou AFTER. Se você
não criá-lo primeiro, a colocação do título de menu na barra de menus será determinada pela ordem
na qual ele é criado ou pela localização especificada com a cláusula AT.

Para as barras de menus criadas sem BAR, a ordem em que os títulos de menus são acessados pelo
teclado é determinada por BEFORE ou AFTER. A localização de um título de menu é determinada
pela localização especificada com a cláusula AT.

Execute os dois exemplos a seguir e observe as diferenças na colocação do título de menu e na


ordem de acesso quando os títulos de menus são definidos com e sem a cláusula AT:

*** Exemplo de Programa 1 sem ATs ***


DEFINE MENU mnuBefAft
DEFINE PAD padOne OF mnuBefAft PROMPT '1111'
DEFINE PAD padTwo OF mnuBefAft PROMPT '2222'
DEFINE PAD padThree OF mnuBefAft PROMPT '3333'
DEFINE PAD padFour OF mnuBefAft PROMPT '4444' BEFORE padTwo
ACTIVATE MENU mnuBefAft

*** Exemplo de Programa 2 com ATs ***


DEFINE MENU mnuBefAft
DEFINE PAD padOne OF mnuBefAft PROMPT '1111' AT 1,5
DEFINE PAD padTwo OF mnuBefAft PROMPT '2222' AT 1,15
DEFINE PAD padThree OF mnuBefAft PROMPT '3333' AT 1,25

DEFINE PAD padFour OF mnuBefAft PROMPT '4444' BEFORE padTwo AT 1,35


WAIT WINDOW 'Pressione ESC para apagar o menu' NOWAIT
ACTIVATE MENU mnuBefAft

NEGOTIATE LEFT | NEGOTIATE MIDDLE | NEGOTIATE RIGHT Especifica a localização do


título de menu na barra de menus do
Visual FoxPro quando ocorre a edição visual de OLE.

NEGOTIATE LEFT especifica que o título de menu é colocado à esquerda do Grupo de arquivos.

NEGOTIATE MIDDLE especifica que o título de menu é colocado à esquerda do Grupo de


recipientes, após o menu Editar.

NEGOTIATE RIGHT especifica que o título de menu é colocado à esquerda do Grupo de janelas.

Se você omitir a cláusula NEGOTIATE, o título de menu será removido da barra de menus quando
ocorre a edição visual de OLE.

FONT cNomeFonte [, nTamanhoFonte] Especifica uma fonte para o título de menu. cNomeFonte
especifica o nome da fonte e cTamanhoFonte, o tamanho em pontos. Por exemplo, o comando a
seguir cria um título de menu na fonte Courier de 12 pontos:

DEFINE PAD padPageAccts OF mnuReceive FONT 'Courier', 12

Se a fonte especificada não estiver disponível, uma fonte similar com características de fonte
similares irá substituí-la. Se você incluir a cláusula FONT mas omitir o tamanho em pontos de
cTamanhoFonte, será utilizada uma fonte de 10 pontos.

A cláusula FONT será ignorada para títulos de menus acrescentados ao menu do sistema do Visual
FoxPro _MSYSMENU. Observe que o Criador de menus utiliza o menu do sistema do Visual
FoxPro.

STYLE cEstiloFonte Especifica um estilo de fonte para o item de menu. Se você omitir a cláusula
STYLE ou se o estilo de fonte não estiver disponível, o estilo de fonte Normal será utilizado.

Os estilos de fonte que podem ser especificados com cEstiloFonte são:

Caractere Estilo de fonte

B Negrito
I Itálico
N Normal
Q Opaco
- Riscado
T Transparente
U Sublinhado
Você pode incluir mais de um caractere para especificar uma combinação de estilos de fonte. Por
exemplo, o comando a seguir especifica Negrito e Itálico:

DEFINE PAD padPageAccts OF mnuReceive STYLE 'BI'

A cláusula STYLE será ignorada para os títulos de menus adicionados ao menu _MSYSMENU do
sistema do Visual FoxPro. Observe que o Criador de menus utiliza o menu do sistema do Visual
FoxPro.

KEY RótuloTecla [, cTextoTecla] Especifica uma tecla de acesso ou combinação de teclas para
um título de menu. Para obter uma lista de teclas e combinações de teclas disponíveis e seus
respectivos nomes de rótulos de teclas, consulte ” ON KEY LABEL”.

Observação Se uma macro de teclado já estiver definida com o mesmo rótulo de tecla, ela terá
prioridade e o item de menu não poderá ser escolhido com a tecla ou combinação de teclas
especificada.

O rótulo de tecla é colocado à direita dos títulos de menus nas barras de menus criadas sem a
cláusula BAR. O rótulo de tecla não é exibido nas barras de menus criadas com a cláusula BAR ou
para os títulos de menus da barra de menus do sistema do Visual FoxPro.

Inclua cTextoTecla para substituir o rótulo de tecla pelo seu próprio texto. Você pode utilizar
qualquer caractere no parâmetro cTextoTecla; por exemplo, o texto “^B” pode ser utilizado para
indicar um rótulo de tecla de CTRL+B. A inclusão de KEY CTRL+B coloca o texto CTRL+B no
menu, à direita do nome do título de menu. Ao especificar KEY CTRL+B, “^B”, o texto ^+B será
colocado no menu. Você pode suprimir a exibição de um rótulo de tecla, especificando a seqüência
vazia para cTextoTecla.

MARK cCaractereMarca Especifica um caractere de marca exibido à esquerda do título de menu.


MARK pode ser incluído para alterar o caractere de marca padrão por um caractere especificado
com cCaractereMarca. Se cCaractereMarca incluir mais de um caractere, somente o primeiro
caractere será utilizado como o caractere de marca.

O caractere de marca padrão é uma verificação. A cláusula MARK será ignorada e o caractere de
marca padrão será utilizado se a barra de menus que contém o título de menu for o menu do sistema
do Visual FoxPro. Além disso, a cláusula MARK será ignorada se FoxFont não for a fonte da janela
principal do Visual FoxPro ou da janela definida pelo usuário na qual está localizada a barra de
menus que contém o título de menu.

Os caracteres de marca especificados com DEFINE PAD têm prioridade sobre os caracteres de
marca especificados com a cláusula MARK em DEFINE MENU. SET MARK OF é utilizado para
ativar ou desativar as marcas, podendo ser utilizado também para especificar um caractere de marca
para um título de menu individual ou para todos os títulos de menus.

Observação A especificação de um caractere de marca não marca o título de menu. Utilize SET
MARK OF para marcar um título de menu com o caractere especificado.
SKIP [FOR lExpressão] Especifica uma condição por meio da qual, se lExpressão resultar em
verdadeiro (.T.), o título de menu será desativado, impedindo que o formulário do usuário o escolha.
Se lExpressão resultar em falso (.F.), o título de menu será ativado

Você pode também desativar um item de menu, colocando uma barra invertida (\) antes do texto do
título de menu. Por exemplo:

DEFINE PAD padPageAccts OF mnuReceive PROMPT '\Age Accounts'

O título de menu padPageAccts é exibido escurecido, indicando que não pode ser escolhido.

Um título de menu desativado pode ser exibido, mas não selecionado. Entretanto, uma mensagem
especificada com a cláusula MESSAGE é exibida.

MESSAGE cTextoMensagem Exibe uma mensagem quando você seleciona um título de menu. A
mensagem é colocada na barra de status gráfica. Se a barra de status for desativada com SET
STATUS BAR OFF, a mensagem será centralizada na última linha da janela principal do Visual
FoxPro.

COLOR SCHEME nNúmeroEsquema Especifica as cores para um título de menu individual,


substituindo as cores padrão ou as cores especificadas com DEFINE MENU.

COLOR ListaParesCores Especifica as cores para um título de menu individual, substituindo as


cores padrão ou as cores especificadas com DEFINE MENU.

Como padrão, as cores dos títulos de menus nas barras de menus são determinadas pelo esquema
de cores 2 do conjunto de cores atual.

Para obter maiores informações sobre esquemas e pares de cores, consulte o tópico ” Visão geral de
cores”.

Comentários

Você deve criar cada título de menu localizado na barra de menus com seu próprio comando
DEFINE PAD. A barra de menus deve ser definida com DEFINE MENU antes que se possam
colocar títulos de menus e você deve incluir o nome da barra de menus em DEFINE PAD.

Se você utilizar o Criador de menus para criar seu menu, talvez não precise utilizar esses comandos.
O Criador de menus cria automaticamente os comandos para seu menu. Ele utiliza o menu do
sistema do Visual FoxPro, que você pode modificar adicionando seus próprios itens de menu. Para
obter maiores informações sobre a criação de menus, consulte “Criando um sistema de menus” no
capítulo 11, “Criando menus e barras de ferramentas,” no Guia do Desenvolvedor.

DEFINE PAD, exemplo do comando


O exemplo a seguir utiliza DEFINE PAD para colocar os títulos de menu na barra de menus do
sistema do Visual FoxPro. A barra de menus do sistema atual é salva para memória com SET
SYSMENU SAVE e, em seguida, os títulos de menu do sistema são removidos com SET
SYSMENU TO.
Muitos títulos de menu do sistema são criados com DEFINE PAD. Quando um título de menu é
escolhido, o procedimento CHOICE é executado. CHOICE exibe o nome do título de menu
escolhido e o nome da barra de menus e ativa e desativa o caractere de marca de título de menu. Se
o título de menu Sair é escolhido, o menu do sistema original do Visual FoxPro é restaurado.

*** Nomeie este programa como DEFINPAD.PRG ***


CLEAR
SET TALK OFF
SET SYSMENU SAVE
SET SYSMENU TO
PUBLIC markpad
markpad = .T.
DEFINE PAD syspad OF _MSYSMENU PROMPT '\<Sistema' COLOR SCHEME 3 ;
KEY ALT+S, ''
DEFINE PAD editpad OF _MSYSMENU PROMPT '\<Editar' COLOR SCHEME 3 ;
KEY ALT+E, ''
DEFINE PAD recordpad OF _MSYSMENU PROMPT '\<Registro' COLOR SCHEME 3 KEY
ALT+R, ''

DEFINE PAD windowpad OF _MSYSMENU PROMPT '\<Janela' COLOR SCHEME 3 ;


KEY ALT+J, ''
DEFINE PAD reportpad OF _MSYSMENU PROMPT 'Re\<latórios' COLOR SCHEME 3 ;
KEY ALT+L, ''
DEFINE PAD exitpad OF _MSYSMENU PROMPT 'Sa\<ir' COLOR SCHEME 3 ;
KEY ALT+I, ''
ON SELECTION MENU _MSYSMENU ;
DO choice IN definpad WITH PAD( ), MENU( )
PROCEDURE choice

PARAMETER mpad, mmenu


WAIT WINDOW 'Você escolheu ' + mpad + ;
' do menu ' + mmenu NOWAIT
SET MARK OF PAD (mpad) OF _MSYSMENU TO ;
! MRKPAD('_MSYSMENU', mpad)
markpad = ! markpad
IF mpad = 'EXITPAD'
SET SYSMENU TO DEFAULT
ENDIF
DEFINE POPUP, comando

Cria um menu.

Sintaxe

DEFINE POPUP NomeMenu


[FROM nLinha1, nColuna1]
[TO nLinha2, nColuna2]
[IN [WINDOW] NomeJanela | IN SCREEN]
[FONT cNomeFonte [, nTamanhoFonte]]
[STYLE cEstiloFonte]
[FOOTER cTextoRodapé]
[KEY RótuloTecla]
[MARGIN]
[MARK cCaractereMarca]
[MESSAGE cTextoMensagem]
[MOVER]
[MULTISELECT]
[PROMPT FIELD NomeCampo | PROMPT FILES [LIKE EstruturaArquivo]
| PROMPT STRUCTURE]
[RELATIVE]
[SCROLL]
[SHORTCUT]
[TITLE cTextoTítuloMenu]
[COLOR SCHEME nNúmeroEsquema
| COLOR ListaParesCores]

Argumentos

NomeMenu Especifica o nome do menu a ser criado.

FROM nLinha1, nColuna1 TO nLinha2, nColuna2 Especifica onde o menu é colocado.


nLinha1, nColuna1 especifica coordenadas para o canto superior esquerdo do menu. Se você omitir
a cláusula FROM, o Visual FoxPro colocará o canto superior esquerdo do menu na primeira linha e
coluna da janela principal do Visual FoxPro ou de uma janela definida pelo usuário.

Para criar um menu com um tamanho específico, você pode também incluir TO nLinha2, nColuna2
para especificar a localização do canto inferior direito do menu. Se você incluir FROM nLinha1,
nColuna1 e omitir TO nLinha2, nColuna2, o Visual FoxPro dimensionará automaticamente o menu.
O menu tem a largura do item de menu mais longo contido nele (se os itens forem criados com
DEFINE BAR) e a extensão necessária para exibir todos os itens de menu. O comprimento do menu
é limitado pelo tamanho da janela principal do Visual FoxPro ou da janela definida pelo usuário na
qual o menu está localizado. Se o menu não for grande o suficiente para conter todos os itens de
menu, será exibida uma barra de rolagem para que você possa percorrer os itens de menu.
IN [WINDOW] NomeJanela Coloca o menu em uma janela definida pelo usuário especificada
com NomeJanela. Se você omitir essa cláusula, o menu será colocado na janela principal do Visual
FoxPro como padrão a menos que haja uma janela ativa definida pelo usuário. Se houver uma
janela ativa definida pelo usuário, o menu será colocado na janela ativa.

IN SCREEN Coloca o menu explicitamente na janela principal do Visual FoxPro.

FONT cNomeFonte [, nTamanhoFonte] Especifica uma fonte padrão para o menu. Você pode
substituir a fonte padrão de um item de menu individual, incluindo a cláusula FONT em DEFINE
BAR.

cNomeFonte especifica o nome da fonte e cTamanhoFonte, o tamanho em pontos. Por exemplo, o


comando a seguir cria um menu na fonte Courier de
12 pontos:

DEFINE POPUP popMyPopup FONT 'Courier', 12

Se a fonte especificada não estiver disponível, uma fonte similar com características de fonte
similares irá substituí-la. Se você incluir a cláusula FONT, mas omitir o tamanho em pontos de
cTamanhoFonte, será utilizada uma fonte de 10 pontos.

STYLE cEstiloFonte Especifica um estilo de fonte padrão para o menu. Você pode substituir o
estilo padrão de um item individual incluindo a cláusula FONT em DEFINE BAR.

Se você omitir a cláusula STYLE ou se o estilo de fonte especificado não estiver disponível, o estilo
de fonte Normal será utilizado.

Os estilos de fonte que podem ser especificados com cEstiloFonte são listados na tabela a seguir:

Caractere Estilo de fonte

B Negrito
I Itálico
N Normal
Q Opaco
- Riscado
T Transparente
U Sublinhado
Você pode incluir mais de um caractere para especificar uma combinação de estilos de fonte. Por
exemplo, o comando a seguir especifica Negrito e Itálico:

DEFINE MENU popMyPopup STYLE 'BI'

FOOTER cTextoRodapé Cria um rodapé com o texto especificado, com cTextoRodapé


centralizado na borda inferior do menu.
KEY RótuloTecla Especifica uma tecla de acesso ou combinação de teclas para um menu. Para
obter uma lista de teclas e combinações de teclas disponíveis e seus respectivos nomes de rótulos de
tecla, consulte ON KEY LABEL.

Incluir KEY é equivalente a emitir o comando a seguir:

ON KEY LABEL RótuloTecla ACTIVATE POPUP NomeMenu

Observação Se uma macro de teclado já estiver definida com o mesmo rótulo de tecla, ela terá
prioridade e o menu não poderá ser ativado com a tecla ou combinação de teclas especificada.

MARGIN Coloca um espaço extra à esquerda e à direita de cada item de menu. Os caracteres de
marca são exibidos no espaço à esquerda de um item e setas indicando submenus adicionais em
cascata estão disponíveis, sendo exibidos à direita dos itens de menu. Se você omitir MARGIN, os
caracteres de marca irão sobrescrever o primeiro caractere dos nomes dos itens de menu; setas
hierárquicas irão sobrescrever o último caractere dos itens de menu.

MARK cCaractereMarca Especifica um caractere exibido à esquerda de um item de menu. O


caractere de marca é uma marca de verificação. A cláusula MARK será ignorada e o caractere de
marca padrão será utilizado se o menu estiver integrado dentro do menu do sistema do Visual
FoxPro. Além disso, a cláusula MARK será ignorada se FoxFont não for a fonte da janela principal
do FoxPro ou da janela definida pelo usuário na qual o menu está localizado.

MARK pode ser incluído para alterar o caractere de marca padrão por um caractere especificado
com cCaractereMarca. Se cCaractereMarca incluir mais de um caractere, somente o primeiro
caractere será utilizado como o caractere de marca.

Observação A especificação de um caractere de marca não marca um item de menu. Utilize SET
MARK OF para marcar um item de menu.

A cláusula MARK define o caractere de marca para todos os itens do menu. Os caracteres de marca
especificados com os comandos DEFINE BAR têm prioridade sobre os caracteres de marca
especificados com a cláusula MARK em DEFINE POPUP. SET MARK OF é utilizado para ativar
ou desativar os caracteres de marca, podendo ser utilizado também para especificar um caractere de
marca para um item de menu individual ou para todos os itens de menu.

MESSAGE cTextoMensagem Exibe uma mensagem quando você seleciona um item de menu. A
mensagem é colocada na barra de status gráfica. Se a barra de status baseada em caractere for
ativada com SET STATUS ON, a mensagem será centralizada na última linha da janela principal do
Visual FoxPro.

MOVER Coloca uma seta de duas pontas () na caixa de diálogo Deslocador à esquerda do item
selecionado no menu. Você pode arrastar a seta de duas pontas a fim de mover um item para outra
posição no menu. GETBAR( ) pode ser utilizado para determinar o posicionamento de cada item no
menu.

Não é possível reorganizar itens em menus criados com a cláusula PROMPT.


MULTISELECT Permite que o usuário selecione vários itens de um menu ao mesmo tempo.
Quando o usuário escolhe o item de um menu, o caractere de marca é colocado à esquerda do item.

Não é possível fazer várias seleções a partir de um menu criado com a cláusula PROMPT.

MRKBAR( ) pode ser utilizado para determinar os itens que serão escolhidos a partir do menu.

Se você incluir MULTISELECT em DEFINE POPUP, poderá incluir MARGIN para reservar
espaço em cada item para o caractere de marca.

No exemplo a seguir, é criado um menu denominado popFruits. MULTISELECT é incluído para


criar um menu que permita que vários itens sejam escolhidos.

Cada um dos quatro itens têm um caractere de marca diferente. Quando o usuário escolhe itens do
menu, eles são marcados e uma rotina denominada yourchoice exibe os itens escolhidos.

CLEAR
IF NOT _DOS
MODIFY WINDOW SCREEN FONT 'foxfont', 12
ENDIF
ACTIVATE SCREEN
DEFINE POPUP popFruits FROM 5,5 ;
MULTISELECT MARGIN && Cria um menu que permite
várias escolhas
DEFINE BAR 1 OF popFruits ;
PROMPT '\<Maçãs' MARK CHR(3) && Primeiro item
DEFINE BAR 2 OF popFruits ;
PROMPT '\<Bananas' MARK CHR(4) && Segundo item
DEFINE BAR 3 OF popFruits ;
PROMPT '\<Uvas' MARK CHR(5) && Terceiro item
DEFINE BAR 4 OF popFruits ;
PROMPT '\<Limões' MARK CHR(6) && Quarto item

@ 12,5 SAY 'Suas escolhas:'


ON SELECTION POPUP popFruits DO yourchoice && Rotina de escolha
ACTIVATE POPUP popFruits
PROCEDURE yourchoice && Executada quando a escolha é feita
@ 13,5 CLEAR
FOR gnCount = 1 TO CNTBAR('popFruits') && Loop para n.º de itens
IF MRKBAR('popFruits', gnCount) = .T. && A opção é marcada,
? PRMBAR('popFruits', gnCount) AT 5 && exibe legenda
ENDIF
NEXT

PROMPT FIELD NomeCampo Especifica o nome de campo de uma tabela aberta cujos registros
serão os itens do menu. O menu contém um item para cada registro da tabela. Quando o menu é
ativado, a Área de trabalho da tabela é selecionada.
Dica Você pode beneficiar-se da otimização de Rushmore se definir um filtro no campo
especificado com PROMPT FIELD utilizado no menu.

Para obter maiores informações sobre a otimização de Rushmore, consulte SET OPTIMIZE e
“Compreendendo a tecnologia Rushmore” no capítulo 15, “Otimizando aplicativos”, no Guia do
Desenvolvedor.

NomeCampo pode também conter vários nomes de campos e expressões concatenadas com o
operador de adição (+). NomeCampo pode também ser o nome do campo de uma tabela aberta em
outra Área de trabalho ou uma função definida pelo usuário.

Não há limite para o número de entradas que podem ser exibidas em um menu criado com
PROMPT FIELD.

PROMPT FILES [LIKE EstruturaArquivo] Cria um menu que exibe os nomes dos arquivos
disponíveis no diretório ou pasta atual.

LIKE EstruturaArquivo permite especificar os arquivos a serem exibidos no menu utilizando


curingas. Por exemplo, para criar um menu que exiba os nomes das tabelas na unidade ou diretório
padrão, inclua o comando a seguir:

PROMPT FILES LIKE *.DBF

Você pode criar um menu que exiba os nomes dos arquivos em outras unidades e em outros
diretórios, incluindo uma especificação de unidade, de diretório ou ambas. Por exemplo, para criar
um menu que exiba os nomes dos arquivos de programa em um diretório denominado PROGRAMS
na unidade C, inclua o comando a seguir:

PROMPT FILES LIKE C:\PROGRAMS\*.PRG

PROMPT STRUCTURE Exibe os nomes dos campos da tabela atual no menu, de acordo com a
estrutura dos campos da tabela. Quando o menu é ativado, a Área de trabalho da tabela é
selecionada.

RELATIVE Especifica a ordem de colocação dos itens no menu. Se você criar um menu sem a
cláusula RELATIVE, um item será posicionado no menu na ordem ditada pelo número da barra do
item. O espaço no menu é reservado para itens indefinidos. Por exemplo, se o primeiro e terceiro
itens forem definidos e o menu estiver ativado, uma linha em branco reservada para o segundo item
será colocada no menu.

Se você criar um menu com RELATIVE, os itens serão exibidos no menu na ordem em que foram
definidos. O espaço no menu não é reservado para itens indefinidos.

A definição de um menu com RELATIVE também permite que você utilize as cláusulas BEFORE e
AFTER em DEFINE BAR para posicionar os itens de um menu em relação a outros itens. Se um
menu for criado sem RELATIVE,
a inclusão de BEFORE ou AFTER em DEFINE BAR gerará um erro.
Execute os dois exemplos de programas a seguir e compare a colocação dos itens em cada menu.

*** Exemplo de RELATIVE ***


DEFINE POPUP popRelatYes RELATIVE FROM 1,1
DEFINE BAR 4 OF popRelatYes PROMPT '4444'
DEFINE BAR 3 OF popRelatYes PROMPT '3333'
DEFINE BAR 2 OF popRelatYes PROMPT '2222'
DEFINE BAR 1 OF popRelatYes PROMPT '1111'
DEFINE BAR 6 OF popRelatYes PROMPT '6666' BEFORE 4
ACTIVATE POPUP popRelatYes
*** Exemplo de NON-RELATIVE ***
DEFINE POPUP popRelatNo FROM 1,1
DEFINE BAR 4 OF popRelatNo PROMPT '4444'
DEFINE BAR 3 OF popRelatNo PROMPT '3333'

DEFINE BAR 2 OF popRelatNo PROMPT '2222'


DEFINE BAR 1 OF popRelatNo PROMPT '1111'
DEFINE BAR 6 OF popRelatNo PROMPT '6666'
ACTIVATE POPUP popRelatNo

SCROLL Coloca uma barra de rolagem à direita do menu criado. Essa barra somente é exibida
quando há mais itens do que o menu pode conter ou se o menu for longo demais para a janela
principal do Visual FoxPro ou para uma janela definida pelo usuário na qual está localizado.

SHORTCUT Cria um menu de atalho. Um menu de atalho é exibido tipicamente quando um botão
de seleção, barra de ferramentas ou barra de tarefas é clicado com o botão direito do mouse. O
menu de atalho lista comandos que pertencem à área da tela na qual o mouse foi clicado com o
botão direito.

Você pode incluir MROW( ) e MCOL( ) na cláusula FROM para ativar o popup na localização
onde o mouse é clicado.

TITLE cTextoTítuloMenu Exibe um título no centro da borda superior do menu.


cTextoTítuloMenu especifica o título do menu.

COLOR SCHEME nNúmeroEsquema Especifica as cores de todos os elementos do menu. Como


padrão, as cores dos menus criadas com DEFINE POPUP são controladas pelo esquema de cores 2.

COLOR ListaParesCores Especifica as cores de todos os elementos do menu.

Para obter maiores informações sobre esquemas e pares de cores, consulte o tópico Visão geral de
cores.

Comentários
Para colocar um conjunto de itens definidos no menu, utilize uma série de comandos DEFINE
BAR. Para colocar registros, arquivos ou campos no menu utilize as opções PROMPT FIELD,
PROMPT FILES ou PROMPT STRUCTURE de DEFINE POPUP.

Quando o menu é exibido e ativado com ACTIVATE POPUP, você pode escolher um dos itens do
menu. Dependendo do item escolhido, uma rotina poderá ser executada ou outro menu poderá ser
exibido e ativado. Um menu que exibe outro menu quando um item é escolhido é denominado
submenu em cascata. Para obter maiores informações sobre a criação de submenus, consulte ON
BAR.

Se você utilizar o Criador de menus para criar seu menu, talvez não precise utilizar esses comandos.
O Criador de menus cria automaticamente os comandos para seu menu. Ele utiliza o menu do
sistema do Visual FoxPro, que você pode modificar adicionando seus próprios itens de menu.

Para obter maiores informações sobre a criação de menus, consulte “Criando um sistema de
menus”, no capítulo 11, “Criando menus e barras de ferramentas”, no Guia do Desenvolvedor.

DEFINE POPUP, exemplo do comando

O exemplo a seguir utiliza DEFINE POPUP para criar menus que estão ativos quando um título de
menu na barra de menus é escolhido. A barra de menus do sistema atual é salva para memória com
SET SYSMENU SAVE e, em seguida, os títulos de menu do sistema são removidos com SET
SYSMENU TO.
Dois títulos novos de menu do sistema são criados com DEFINE PAD e DEFINE POPUP cria um
menu suspenso para cada título de menu. DEFINE BAR cria itens em cada um dos menus. Quando
um título de menu é escolhido, ON PAD utiliza ACTIVATE POPUP para ativar o menu
correspondente.

Quando um item é escolhido a partir de um menu, ON SELECTION POPUP utiliza PROMPT( ) e


POPUP( ) para passar o número do item e o nome do menu para o procedimento CHOICE.
CHOICE exibe o texto do item escolhido e o nome do menu que contém o item. Se o item Saída for
escolhido de um menu Informações de cartão, o menu do sistema do Visual FoxPro é restaurado.

*** Nomeie este programa como DEFINPOP.PRG ***


CLEAR
SET SYSMENU SAVE
SET SYSMENU TO
DEFINE PAD convpad OF _MSYSMENU PROMPT '\<Conversões' COLOR SCHEME 3 ;
KEY ALT+C, ''
DEFINE PAD cardpad OF _MSYSMENU PROMPT '\<Informações do Cartão' COLOR SCHEME
3;
KEY ALT+I, ''
ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion
ON PAD cardpad OF _MSYSMENU ACTIVATE POPUP cardinfo
DEFINE POPUP conversion MARGIN RELATIVE COLOR SCHEME 4
DEFINE BAR 1 OF conversion PROMPT 'Ár\<ea' KEY CTRL+E, '^E'

DEFINE BAR 2 OF conversion PROMPT 'C\<omprimento' ;


KEY CTRL+O, '^O'
DEFINE BAR 3 OF conversion PROMPT 'Ma\<ssa' ;
KEY CTRL+S, '^S'
DEFINE BAR 4 OF conversion PROMPT '\<Velocidade' ;
KEY CTRL+V, '^V'
DEFINE BAR 5 OF conversion PROMPT '\<Temperatura' ;
KEY CTRL+T, '^T'
DEFINE BAR 6 OF conversion PROMPT 'Te\<mpo' ;
KEY CTRL+M, '^M'
DEFINE BAR 7 OF conversion PROMPT 'Vo\<lume' ;
KEY CTRL+L, '^L'
ON SELECTION POPUP conversion;
DO choice IN definpop WITH PROMPT( ), POPUP( )

DEFINE POPUP cardinfo MARGIN RELATIVE COLOR SCHEME 4


DEFINE BAR 1 OF cardinfo PROMPT 'Visualizar co\<branças' ;
KEY ALT+B, ''
DEFINE BAR 2 OF cardinfo PROMPT 'Visualizar \<Pagamentos' ;
KEY ALT+P, ''
DEFINE BAR 3 OF cardinfo PROMPT 'Visualizar \<Usuários' ;
KEY ALT+U, ''
DEFINE BAR 4 OF cardinfo PROMPT '\-'
DEFINE BAR 5 OF cardinfo PROMPT '\<Cobranças '
DEFINE BAR 6 OF cardinfo PROMPT '\-'
DEFINE BAR 7 OF cardinfo PROMPT 'Sa\<ir '
ON SELECTION POPUP cardinfo;

DO choice IN definpop WITH PROMPT( ), POPUP( )


PROCEDURE choice
PARAMETERS mprompt, mpopup
WAIT WINDOW 'Você escolheu ' + mprompt + ;
' do popup ' + mpopup NOWAIT
IF mprompt = 'Saída'
SET SYSMENU TO DEFAULT
ENDIF

DEFINE WINDOW, comando

Cria uma janela e especifica seus atributos.

Sintaxe

DEFINE WINDOW NomeJanela1


FROM nLinha1, nColuna1 TO nLinha2, nColuna2
| AT nLinha3, nColuna3 SIZE nLinha4, nColuna4
[IN [WINDOW] NomeJanela2 | IN SCREEN | IN DESKTOP

[NAME ObjectName]
[FONT cFontName [, nFontSize]]
[STYLE cFontStyle]
[FOOTER cFooterText]
[TITLE cTitleText]
[HALFHEIGHT]
[DOUBLE | PANEL | NONE | SYSTEM | cBorderString]
[CLOSE | NOCLOSE]
[FLOAT | NOFLOAT]
[GROW | NOGROW]
[MDI | NOMDI]
[MINIMIZE | NOMINIMIZE]
[ZOOM | NOZOOM]
[ICON FILE FileName1]
[FILL cFillCharacter | FILL FILE FileName2]
[COLOR SCHEME nSchemeNumber
| COLOR ColorPairList]

Argumentos

NomeJanela1 Especifica o nome da janela a ser criada. Os nomes das janelas podem ter até 254
caracteres de extensão no Visual FoxPro (10 caracteres nas versões anteriores do FoxPro). Eles
devem começar com uma letra ou caractere de sublinhado e não podem começar com um número.
Eles podem conter qualquer combinação de letras, números e caracteres de sublinhado.

FROM nLinha1, nColuna1 TO nLinha2, nColuna2 Especifica a posição e o tamanho da janela


definida pelo usuário na janela principal do Visual FoxPro. FROM nLinha1, nColuna1 especifica a
posição do canto superior esquerdo da janela definida pelo usuário na janela principal do Visual
FoxPro. TO nLinha2, nColuna2 especifica a posição do canto inferior direito da janela definida pelo
usuário na janela principal do Visual FoxPro.

Uma janela pode ser definida com as coordenadas que estão fora da borda da janela do Visual
FoxPro e pode ser maior que a janela principal do Visual FoxPro.

A localização e o tamanho da janela são determinados pela fonte da janela pai. A janela pai pode ser
outra janela definida pelo usuário ou a janela principal do Visual FoxPro.

AT nLinha3, nColuna3 SIZE nLinha4, nColuna4 Especifica a posição e o tamanho de uma janela
definida pelo usuário.

AT nLinha3, nColuna3 especifica a posição do canto superior esquerdo da janela definida pelo
usuário na janela principal do Visual FoxPro. Essa posição é determinada pela fonte atual da janela
pai. Como a cláusula AT é idêntica à cláusula FROM em todos os aspectos, as duas cláusulas
podem ser utilizadas de forma intercambiável.

SIZE nLinha4, nColuna4 especifica em linhas e colunas o tamanho da janela definida pelo usuário e
assegura que o texto exibido em uma fonte específica caberá na janela criada.

Você pode especificar uma fonte e um estilo de fonte para uma janela definida pelo usuário,
incluindo as cláusulas FONT e STYLE. Se você especificar uma fonte para a janela e incluir a
cláusula SIZE, o tamanho da fonte será determinado pela largura e altura da fonte da janela. Se você
não especificar a fonte para uma janela, será utilizada a fonte padrão do sistema, a fonte FoxFont de
10 pontos.
IN [WINDOW] NomeJanela2 Coloca uma janela definida pelo usuário em uma janela pai. A
janela definida pelo usuário torna-se a janela filho e não pode ser movida para fora da janela pai. Se
a janela pai for movida, a janela filho será movida junto com ela.

Quando uma janela filho é colocada em uma janela pai, as coordenadas da janela filho especificadas
com as cláusulas FROM e TO ou AT e SIZE terão relação com a janela pai, não com a janela
principal do Visual FoxPro.

No exemplo a seguir, uma janela pai, wParent, é criada. Uma janela filho, wChild, é colocada na
janela pai.

CLEAR
DEFINE WINDOW wParent ;
FROM 1, 1 TO 20, 30 ;
TITLE "Pai" && Janela pai.
ACTIVATE WINDOW wParent
DEFINE WINDOW wChild ;
FROM 1, 1 TO 20, 20 ;
TITLE "Filho" ;
IN WINDOW wParent && Janela filho.
ACTIVATE WINDOW wChild
ACTIVATE SCREEN
WAIT WINDOW 'Pressione uma tecla para limpar as janelas'
RELEASE WINDOW wParent, wChild
CLEAR

IN SCREEN Coloca a janela definida pelo usuário explicitamente na janela principal do Visual
FoxPro. Se você omitir IN SCREEN, a janela definida pelo usuário será colocada na janela
principal do Visual FoxPro, como padrão.

Você pode incluir a cláusula IN WINDOW em ACTIVATE WINDOW para colocar a janela em
outra janela definida pelo usuário e substituir a cláusula IN SCREEN.

IN DESKTOP Coloca uma janela definida pelo usuário na Área de trabalho do Microsoft
Windows, fora da janela principal do Visual FoxPro. A posição da janela está relacionada com a
Área de trabalho do Windows e com a fonte atual da janela principal do Visual FoxPro.

NAME NomeObjeto Cria uma referência de objeto para a janela, permitindo que você manipule a
janela com as propriedades orientadas a objetos disponíveis para o objeto do formulário.

Para obter informações adicionais sobre a programação orientada a objetos no Visual FoxPro,
consulte o capítulo 3, “Programação orientada a objetos”, no Guia do Desenvolvedor. Para obter
informações adicionais sobre as propriedades do objeto do formulário que podem ser especificadas
para uma janela criada com a cláusula NAME, consulte o tópico Form, objeto.

FONT cNomeFonte [, nTamanhoFonte] Especifica uma fonte para o texto colocado na janela.
cNomeFonte especifica o nome da fonte, e cTamanhoFonte, o tamanho em pontos. Se você omitir
nTamanhoFonte, será utilizada uma fonte de 9 pontos.
Por exemplo, este comando cria uma janela que exibe a saída enviada para a janela na fonte Courier
de 16 pontos:

DEFINE WINDOW wDisplayFont FROM 2,2 TO 12,22 FONT 'Courier', 16

Se você omitir a cláusula FONT, será utilizada a fonte FoxFont de 10 pontos. Se a fonte
especificada não estiver disponível, será utilizada uma fonte com características semelhantes em
substituição.

STYLE cEstiloFonte Especifica um estilo de fonte para o texto colocado na janela. cEstiloFonte
especifica a fonte. Se você omitir a cláusula STYLE ou se o estilo de fonte especificado não estiver
disponível, o estilo de fonte Normal será utilizado.

A tabela a seguir lista estilos de fonte e seus caracteres correspondentes.

Caractere Estilo de fonte

B Negrito
I Itálico
N Normal
Q Opaco
- Riscado
T Transparente
U Sublinhado
Você pode incluir mais de um caractere para especificar uma combinação de estilos de fonte. No
Visual FoxPro, os comandos a seguir especificam os estilos Negrito e Itálico:

DEFINE WINDOW wDisplayStyle FROM 2, 2 TO 12, 22 STYLE 'BI'

TITLE cTextoTítulo Atribui um título com a cláusula TITLE. cTextoTítulo especifica o texto do
título e é centralizado na borda superior da janela. Se o título for mais largo do que a janela, será
truncado.

HALFHEIGHT Cria uma janela com uma barra de título de meia altura. Isso fornece
compatibilidade para as janelas criadas nas versões anteriores do FoxPro que são importadas para o
Visual FoxPro.

Quando você utiliza DEFINE WINDOW para criar uma janela, uma barra de título de meia altura é
utilizada, a menos que você inclua a palavra-chave SYSTEM ou uma cláusula FONT.

Se você incluir a palavra-chave HALFHEIGHT, a barra de título de meia altura será utilizada
independentemente da cláusula SYSTEM ou FONT estar incluída.

DOUBLE | PANEL | NONE | SYSTEM | cSeqüênciaBorda Especifica um estilo de borda para


uma janela definida pelo usuário. A borda padrão é uma única linha.
Argumento Descrição

DOUBLE Especifica uma borda com linha dupla em volta da janela.


PANEL Especifica uma borda larga em volta da janela.
NONE Suprime completamente a borda.
SYSTEM Especifica que a janela definida pelo usuário deverá ter a aparência de uma janela
do sistema. Quando certas cláusulas diferentes (GROW, ZOOM etc.) são incluídas, os controles
apropriados da janela são colocados na sua borda.
cSeqüênciaBorda Especifica uma borda personalizada. Para obter maiores informações sobre
a definição de uma borda personalizada, consulte ” SET BORDER”.
A inclusão de DOUBLE ou de uma seqüência de borda personalizada cria uma janela com a borda
PANEL. A inclusão das cláusulas CLOSE, FLOAT, GROW, ZOOM ou MINIMIZE coloca os
controles apropriados na janela, mesmo que a cláusula SYSTEM de definição da janela não seja
incluída.

CLOSE Permite fechar uma janela definida pelo usuário utilizando o teclado ou mouse. Ao fechar
uma janela, ela é removida da janela principal do Visual FoxPro ou de uma janela pai definida pelo
usuário e sua definição é removida da memória. Se omitir CLOSE, você não poderá fechar a janela
utilizando a interface; a janela deverá ser fechada utilizando um comando em um programa ou na
janela Comando.
NOCLOSE Impede que a janela seja fechada exceto ao utilizar um comando em um programa ou
na janela Comando.

FLOAT Permite que a janela seja movida, utilizando o teclado ou mouse. Se omitir FLOAT, você
não poderá mover a janela, a menos que utilize o comando MOVE WINDOW em um programa ou
na janela Comando.
NOFLOAT Impede que a janela seja movida, exceto quando utilizar o comando MOVE
WINDOW em um programa ou na janela Comando.
GROW Permite que você dimensione uma janela definida pelo usuário, utilizando o teclado ou
mouse. Se omitir GROW, você não poderá dimensionar a janela exceto ao utilizar o comando SIZE
WINDOW em um programa ou na janela Comando.

NOGROW Impede que você dimensione uma janela exceto ao utilizar o comando SIZE WINDOW
em um programa ou na janela Comando.
MDI Cria uma janela definida pelo usuário em conformidade com MDI. MDI (interface de
múltiplos documentos) é uma especificação que permite janelas com vários documentos e
determina suas estruturas e procedimentos. Se você omitir MDI, a janela criada não estará em
conformidade com MDI.

Quando uma janela em conformidade com MDI é maximizada:

· A janela considera o tamanho da janela principal do Visual FoxPro. Os controles da janela


desaparecem e a caixa do menu Controle é exibida na barra de menus do sistema do Visual FoxPro.
O botão Restaurar da janela também é colocado na barra de menus do sistema do Visual FoxPro.
· O título da janela é colocado na barra de títulos do Visual FoxPro e é separado do título do
Visual FoxPro por um hífen.
· Se você ativar outra janela em conformidade com MDI, ela será automaticamente
maximizada.
NOMDI Cria uma janela que não está em conformidade com MDI.

MINIMIZE Permite minimizar uma janela definida pelo usuário utilizando o teclado ou mouse.

NOMINIMIZE Impede que as janelas sejam minimizadas.

ZOOM Permite que a janela seja maximizada utilizando o teclado ou mouse. Você pode também
restaurar a janela ao seu tamanho original.

NOZOOM Impede que a janela seja maximizada.

ICON FILE NomeArquivo Especifica o ícone exibido quando a janela é minimizada. É preciso
incluir a palavra-chave MINIMIZE em DEFINE WINDOW. Você pode especificar somente um
arquivo de ícone (.ICO); não é possível especificar um arquivo bitmap (.BMP).

FILL FILE NomeArquivo2 Especifica um papel de parede (o segundo plano) para a janela. A
janela é exibida lado a lado, com o NomeArquivo2 especificado. Você especifica um arquivo
bitmap .BMP.

COLOR SCHEME nNúmeroEsquema Especifica as cores para a janela definida pelo usuário.
Como padrão, as cores das janelas criadas com DEFINE WINDOW são controladas pelo esquema
de cores 1.

COLOR ListaParesCores Especifica as cores para a janela definida pelo usuário.

Para obter maiores informações sobre esquemas e pares de cores, consulte o tópico ” Visão geral de
cores”.

Comentários

Depois que as janelas definidas pelo usuário forem criadas com DEFINE WINDOW, elas poderão
ser exibidas na janela principal do Visual FoxPro com ACTIVATE WINDOW ou SHOW
WINDOW. O número de janelas definidas pelo usuário que podem ser criadas é limitado somente
pela quantidade de memória disponível e pelos recursos do sistema.

As janelas ativadas permanecem na janela principal do Visual FoxPro até que DEACTIVATE
WINDOW ou HIDE WINDOW seja emitido. DEACTIVATE WINDOW e HIDE WINDOW
removem janelas da janela principal do Visual FoxPro, mas não removem as definições das janelas
da memória. As janelas podem ser colocadas de volta na janela principal do Visual FoxPro com
ACTIVATE WINDOW ou SHOW WINDOW.

Utilize CLEAR WINDOWS ou RELEASE WINDOWS para remover janelas da janela principal do
Visual FoxPro e as definições das janelas da memória. As janelas cujas definições foram removidas
da memória devem ser recriadas com DEFINE WINDOW para serem exibidas novamente.

DEFINE WINDOW, exemplo do comando


No exemplo a seguir, uma janela denominada Saída é criada e ativada. O programa espera você
pressionar uma tecla e, em seguida, oculta a janela. O programa espera você pressionar uma tecla
novamente e, em seguida, exibe a janela mais uma vez.

CLEAR
DEFINE WINDOW output FROM 2,1 TO 13,75 TITLE 'Saída' ;
CLOSE FLOAT GROW ZOOM
ACTIVATE WINDOW output
WAIT WINDOW 'pressione qualquer tecla para ocultar a janela Saída'
HIDE WINDOW output
WAIT WINDOW 'pressione qualquer tecla para exibir a janela Saída'
SHOW WINDOW output
WAIT WINDOW 'pressione qualquer tecla para liberar a janela Saída'
RELEASE WINDOW output

DELETE DATABASE, comando

Exclui um banco de dados do disco.

Sintaxe

DELETE DATABASE NomeBancoDados | ?


[DELETETABLES] [RECYCLE]

Argumentos

NomeBancoDados Especifica o nome do banco de dados a ser excluído do disco. O banco de


dados especificado não poderá ser aberto. NomeBancoDados pode incluir o caminho do banco de
dados com o nome dele.

? Exibe a caixa de diálogo Excluir onde você pode especificar o nome do banco de dados a ser
excluído do disco.

DELETETABLES Exclui do disco as tabelas contidas no banco de dados e o banco de dados que
contém as tabelas.

RECYCLE Especifica que o banco de dados não é excluído imediatamente do disco e é colocado
na Lixeira do Windows 95.

Comentários

Utilize sempre DELETE DATABASE para excluir um banco de dados do disco. Ao contrário de
outros utilitários de manipulação do sistema operacional, DELETE DATABASE remove
referências do banco de dados das tabelas do banco de dados.
Caso SET SAFETY esteja ativado (ON), o Visual FoxPro perguntará se você gostaria de excluir o
banco de dados especificado. Caso SET SAFETY esteja desativado (OFF), o banco de dados será
excluído automaticamente do disco.

DELETE DATABASE, exemplo do comando

Este exemplo cria um banco de dados denominado people. Uma tabela denominada friends é criada
e é automaticamente adicionada ao banco de dados. DISPLAY TABLES é utilizado para exibir as
tabelas no banco de dados e DISPLAY DATABASES é utilizado para exibir as informações sobre
as tabelas no banco de dados.
DELETE DATABASE é utilizado com a opção DELETETABLES para remover o banco de dados
e sua tabela friends do disco.

CLOSE ALL
CREATE DATABASE people
CREATE TABLE friends (FirstName C(20), LastName C(20))
CLEAR
DISPLAY TABLES && Exibe as tabelas no banco de dados
DISPLAY DATABASES && Exibe as informações da tabela
CLOSE ALL
DELETE DATABASE people DELETETABLES

DELETE FILE, comando

Exclui um arquivo de um disco.

Sintaxe

DELETE FILE [NomeArquivo | ?] [RECYCLE]

Argumentos

NomeArquivo Especifica o arquivo a ser excluído. NomeArquivo pode conter caracteres curingas
como * e ?. Por exemplo, para excluir os arquivos de backup com a extensão .BAK no diretório ou
pasta atual, emita DELETE FILE *.BAK.

? Exibe a caixa de diálogo Excluir do qual você pode escolher um arquivo a ser excluído.

RECYCLE Especifica que o banco de dados não é excluído imediatamente do disco e é colocado
na Lixeira do Windows 95.

Cuidado Qualquer arquivo excluído com este comando não pode ser recuperado. Mesmo se SET
SAFETY estiver ativado (ON), você não será avisado antes de o arquivo ser excluído.
Comentários

O arquivo que você deseja excluir não pode estar aberto quando DELETE FILE é emitido. O nome
do arquivo deve incluir um caminho se estiver em uma unidade de disco ou volume diferente, ou
em um diretório ou pasta diferente do padrão e a extensão do nome do arquivo deve estar incluída.
O nome do arquivo não pode conter curingas.

Antes de excluir uma tabela de um banco de dados, emita REMOVE TABLE com o nome da tabela
para remover as referências à tabela do banco de dados. Se você excluir uma tabela que tenha um
arquivo memo .FPT associado, certifique-se de excluir o arquivo memo.

DELETE FILE, exemplo do comando

No exemplo a seguir, a estrutura de CUSTOMER.DBF e todos os registros no qual o país é EUA


são copiados para uma tabela denominada backup. Os dados em backup são, em seguida, copiados
para um arquivo de texto, temp, que é aberto e, em seguida, excluído quando é fechado.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

COPY STRUCTURE TO backup


USE backup
APPEND FROM customer FOR country = 'EUA'
COPY TO temp TYPE DELIMITED

WAIT WINDOW 'Pressione Esc para fechar e apaga temp.txt' NOWAIT


MODIFY FILE temp.txt NOEDIT
DELETE FILE temp.txt
? IIF(FILE('temp.txt'),'Arquivo não excluído','Arquivo excluído')
USE
DELETE FILE backup.dbf

DELETE TRIGGER, comando

Remove um disparador de exclusão, inserção ou atualização de uma tabela do banco de dados atual.

Sintaxe

DELETE TRIGGER ON NomeTabela FOR DELETE | INSERT | UPDATE

Argumentos

NomeTabela Especifica o nome da tabela da qual o disparador está excluído.


FOR DELETE | INSERT | UPDATE Especifica o disparador a ser excluído. Inclui FOR DELETE
para remover o Disparador de exclusão, FOR INSERT para remover o Disparador de inserção e
FOR UPDATE para remover o Disparador de atualização.

Comentários

Utilize CREATE TRIGGER para criar um disparador de exclusão, inserção ou atualização de uma
tabela.

DELETE TRIGGER, exemplo do comando

Os exemplos a seguir criam um Disparador de atualização que impede que valores maiores que 50
sejam digitados no campo maxordamt na tabela customer. DISPLAY DATABASE é utilizado para
exibir o Disparador de atualização. Em seguida, DELETE TRIGGER é utilizado para remover o
Disparador de atualização e DISPLAY DATABASE é emitido novamente para verificar a remoção
do Disparador de atualização.

CLOSE DATABASES
OPEN DATABASE SYS(2004) + 'samples\data\testdata' && Abre o banco de dados do testdata
USE CUSTOMER && Abre a tabela Customer

CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50


CLEAR
DISPLAY DATABASE
DELETE TRIGGER ON customer FOR UPDATE
DISPLAY DATABASE

DELETE, comando

Marca registros para exclusão.

Sintaxe

DELETE
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[IN nÁreaTrabalho | cAliasTabela]
[NOOPTIMIZE]

Argumentos

Escopo Especifica um intervalo de registros a serem marcados para exclusão. As cláusulas de


escopo são: ALL, NEXT nRegistros, RECORD nNúmeroRegistro e REST.
Para obter maiores informações sobre as cláusulas de escopo, consulte o tópico Cláusulas de
escopo.

O escopo padrão para DELETE é o registro atual (NEXT 1).

FOR lExpressão1 Especifica uma condição através da qual somente os registros que satisfazem à
condição lógica lExpressão1 são marcados para exclusão.

Rushmore otimizará uma consulta especificada com DELETE ... FOR se lExpressão1 for uma
expressão otimizável e a tabela for indexada em DELETED( ). Para obter um melhor desempenho,
utilize uma expressão otimizável na cláusula FOR.

Para obter informações sobre expressões otimizáveis Rushmore, consulte SET OPTIMIZE
e “Compreendendo a tecnologia Rushmore”, no capítulo 15, “Otimizando aplicativos”, no Guia do
Desenvolvedor.

WHILE lExpressão2 Especifica uma condição através da qual os registros serão marcados para
serem excluídos quando lExpressão2 resultar em verdadeiro (.T.).

IN nÁreaTrabalho Especifica a Área de trabalho da tabela onde os registros são marcados para
exclusão.

IN cAliasTabela Especifica o alias da tabela onde os registros são marcados para exclusão.

Se você omitir nÁreaTrabalho e cAliasTabela, os registros serão marcados para exclusão na tabela
da Área de trabalho atualmente selecionada.

NOOPTIMIZE Desativa a otimização de Rushmore de DELETE.

Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia


Rushmore”, no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

Comentários

Os registros marcados para exclusão não são removidos fisicamente da tabela até que PACK seja
emitido. Os registros marcados para exclusão podem ser reintegrados (desmarcados) com
RECALL.
DELETE, exemplo do comando

O exemplo a seguir abre a tabela customer no banco de dados testdata. DELETE é utilizado para
marcar todos os registros para exclusão onde o campo country contém EUA. Todos os registros
marcados para exclusão são exibidos. RECALL ALL é utilizado para desmarcar todos os registros
marcados para exclusão.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer
DELETE FOR country = 'EUA' && Marca para exclusão
CLEAR
LIST FIELDS company, country FOR DELETED( ) && Lista os registros marcados
RECALL ALL && Desmarca todos os registros marcados para exclusão

DELETED( ), função

Retorna um valor lógico que indica se o registro atual está marcado para exclusão.

Sintaxe

DELETED([cAliasTabela | nÁreaTrabalho])

Tipos de retorno

Lógico

Argumentos

cAliasTabela | nÁreaTrabalho Você pode verificar o status do registro atual de uma tabela aberta
em outra Área de trabalho especificando o número da Área de trabalho com nÁreaTrabalho ou o
alias da tabela com cAliasTabela. Se uma tabela não estiver aberta na Área de trabalho especificada,
DELETED( ) retornará falso.

Se você omitir cAliasTabela e nÁreaTrabalho, o status de exclusão será retornado para o registro
atual da Área de trabalho atual.

Comentários

Se o registro estiver marcado para exclusão, DELETED( ) retornará verdadeiro (.T.); caso contrário,
DELETED( ) retornará falso (.F.).

É possível marcar registros para exclusão com DELETE e DELETE - SQL e desmarcá-los com
RECALL.

Rushmore otimiza consultas que testam o status de exclusão dos registros se a tabela estiver
indexada por DELETED( ).

Para obter informações sobre como utilizar a otimização de Rushmore para consultas, consulte SET
OPTIMIZE e “Compreendendo a tecnologia Rushmore”, no capítulo 15, “Otimizando aplicativos”,
no Guia do Desenvolvedor.

DELETED( ), exemplo da função


O exemplo a seguir abre a tabela customer no banco de dados testdata. DELETE - SQL é utilizado
para marcar todos os registros a serem excluídos, onde o campo country que contém USA.
DELETED( ) é utilizado para exibir todos os registros marcados para exclusão. RECALL ALL é
utilizado para desmarcar todos os registros a serem excluídos.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

DELETE FROM customer WHERE country = 'USA' && Marca para exclusão
CLEAR
LIST FIELDS company, country FOR DELETED( ) && Lista os registros marcados
RECALL ALL && Desmarca todos os registros a serem excluídos

DIFFERENCE( ), função

Retorna um número inteiro de 0 a 4 que representa a diferença fonética relativa entre duas
expressões de caracteres.

Sintaxe

DIFFERENCE(cExpressão1, cExpressão2)

Tipos de retorno

Numérico

Argumentos

cExpressão1, cExpressão2 Especifica as expressões de caracteres que são comparadas por


DIFFERENCE( ).

Comentários

DIFFERENCE( ) é útil para procurar tabelas quando a ortografia exata de uma entrada não é
conhecida.

Quanto mais parecida for a ortografia de duas expressões, maior será o número retornado por
DIFFERENCE( ). Se a ortografia das expressões de caracteres for muito semelhante,
DIFFERENCE( ) retornará 4. Para duas expressões de caracteres com poucas semelhanças
fonéticas, DIFFERENCE( ) retornará 0.
DIFFERENCE( ), exemplo da função

STORE 'Smith' TO gcName1


STORE 'Smythe' TO gcName2
STORE 'Smittie' TO gcName3
STORE '' TO gcName4
CLEAR
? DIFFERENCE(gcName1, gcName2) && Exibe 4
? DIFFERENCE(gcName1, gcName3) && Exibe 4
? DIFFERENCE(gcName1, gcName4) && Exibe 1

DIMENSION, comando

Cria uma matriz uni ou bidimensional de variáveis de memória.

Sintaxe

DIMENSION NomeMatriz1 (nLinhas1 [, nColunas1])


[, NomeMatriz2 (nLinhas2 [, nColunas2])] ...

Argumentos
NomeMatriz1 Especifica o nome da matriz. Podem ser criadas várias matrizes com um único
comando DIMENSION, incluindo nomes de matrizes adicionais (NomeMatriz2, NomeMatriz3
etc.).

nLinhas1 [, nColunas1] Especifica o tamanho da matriz a ser criada. Se você incluir apenas
nLinhas1, será criada uma matriz unidimensional. Esse tipo de matriz apresenta uma coluna e
nLinhas1 linhas. Por exemplo, o comando a seguir cria uma matriz unidimensional denominada
gaArrayOne que contém uma coluna e dez linhas.

DIMENSION gaArrayOne(10)

Para criar uma matriz bidimensional, inclua os argumentos nLinhas1 e nColunas1. nLinhas1
especifica o número de linhas da matriz e nColunas1 especifica o número de colunas. O exemplo a
seguir cria uma matriz bidimensional denominada gaArrayTwo que contém duas linhas e quatro
colunas:

DIMENSION gaArrayTwo(2,4)

É preciso especificar um tamanho para cada matriz criada com DIMENSION. No exemplo a seguir,
são criadas três matrizes: gaArrayOne e gaArrayTwo, a partir dos exemplos anteriores, e uma
terceira matriz denominada gaArrayThree:

DIMENSION gaArrayOne(10), gaArrayTwo(2,4), gaArrayThree(3,3)

Você pode colocar as expressões em DIMENSION ou DECLARE entre colchetes ou parênteses.


Por exemplo, os dois comandos a seguir criam matrizes idênticas:

DIMENSION gaArrayOne(10), gaArrayTwo[2,4], gaArrayThree(3,3)


DIMENSION gaArrayOne[10], gaArrayTwo(2,4), gaArrayThree[3,3]

Comentários

DIMENSION é idêntico, em operação e sintaxe, a DECLARE.

Elementos da matriz…O tamanho de uma matriz determina a quantidade de elementos que ela pode
conter. Cada elemento de uma matriz pode armazenar um único item de informação. Para
determinar quantos elementos uma matriz contém e a quantidade de informações que pode
armazenar, multiplique seu número de linhas (nLinhas1) pelo seu número de colunas (nColunas1).

Os elementos de uma matriz podem conter qualquer tipo de dados e são inicializados com o valor
falso (.F.) na primeira vez que a matriz é criada. Você pode inicializar todos os elementos de uma
matriz com o mesmo valor utilizando STORE se SET COMPATIBLE estiver definido como
FOXPLUS ou OFF (a definição padrão). Por exemplo:
DIMENSION gaArray(10,3)
STORE 'initial' TO gaArray

Índices de matriz…Para se fazer referência aos elementos de uma matriz, empregam-se os


respectivos índices. Cada elemento de matriz possui um índice numérico exclusivo que o identifica.
Se a matriz for unidimensional, o índice de um elemento será igual ao seu número de linha. Por
exemplo, o índice correspondente ao elemento da terceira linha de uma matriz unidimensional é 3.

Para se fazer referência aos elementos de matrizes bidimensionais, utilizam-se dois índices. O
primeiro indica a localização da linha do elemento e o segundo, a localização da coluna. Por
exemplo, os índices correspondentes ao elemento da terceira linha e quarta coluna de uma matriz
bidimensional são 3,4. Para obter uma discussão mais ampla sobre os índices de elementos de
matriz, consulte ASUBSCRIPT( ).

O(s) índice(s) do primeiro elemento de uma matriz sempre começam com 1. Caso uma matriz seja
bidimensional, ela também poderá ser referenciada por um único índice. Utilize AELEMENT( )
para retornar esse índice único a partir de um par de índices de linha e de coluna de uma matriz.
Utilize ASUBSCRIPT( ) para retornar os índices de linha e de coluna a partir de um único índice.

Redimensionando matrizes…Para alterar o tamanho e as dimensões de uma matriz, emita o


comando DIMENSION novamente. O tamanho de uma matriz pode ser aumentado ou diminuído,
matrizes unidimensionais podem ser convertidas em duas dimensões e matrizes bidimensionais
podem ser reduzidas a uma dimensão.

Se o número de elementos de uma matriz for aumentado, o conteúdo de todos os elementos da


matriz original será copiado para a matriz recém-redimensionada. Os elementos adicionais são
inicializados com o valor falso (.F.).

Exemplo de redimensionamento de matrizes

O Exemplo 1 mostra o resultado do aumento do tamanho de uma matriz unidimensional. (Observe


que se você digitar esses comandos na janela Comando, a matriz será pública (PUBLIC), mas se
copiá-los para um programa e executá-lo, a matriz será privada (PRIVATE)).
Se o número de elementos em uma matriz estiver reduzido, os elementos e qualquer dos dados
contidos neles serão excluídos. Quando uma matriz unidimensional é remanejada para duas
dimensões, o conteúdo da matriz original é copiado para a nova matriz em uma ordem elemento
para linha.

No Exemplo 2, uma matriz unidimensional é convertida em uma matriz bidimensional. O conteúdo


dos elementos da matriz unidimensional é copiado para a primeira linha da nova matriz, seguido da
segundo linha e, assim, sucessivamente. Os elementos adicionais são inicializados com o valor falso
(.F.).
Quando uma matriz bidimensional é convertida em uma dimensão, seu conteúdo é copiado para a
nova matriz em uma ordem linha-para-elemento. O primeiro elemento da primeira linha torna-se o
primeiro elemento da matriz unidimensional, o segundo elemento da primeira linha torna-se o
segundo elemento e, assim, sucessivamente.
Utilize ADEL( ) ou AINS( ) para excluir ou inserir elementos de matriz, linhas e colunas. Utilize
APPEND FROM ARRAY, COPY TO ARRAY, SCATTER e GATHER para transferir dados entre
registros e matrizes da tabela.
No Exemplo 3, uma matriz bidimensional é criada e carregada com os dados. Os elementos de
matriz e os dados contidos neles são exibidos.

* Exemplo 1
DIMENSION marray(2)
STORE 'A' TO marray(1)
STORE 'B' TO marray(2)
CLEAR
DISPLAY MEMORY LIKE marray
DIMENSION marray(4)
DISPLAY MEMORY LIKE marray
WAIT WINDOW

* Exemplo 2
DIMENSION marrayone(4)
STORE 'E' TO marrayone(1)
STORE 'F' TO marrayone(2)
STORE 'G' TO marrayone(3)
STORE 'H' TO marrayone(4)
CLEAR
DISPLAY MEMORY LIKE marrayone
DIMENSION marrayone(2,3)
DISPLAY MEMORY LIKE marrayone
WAIT WINDOW

* Exemplo 3
DIMENSION sample(2,3)

STORE 'Goodbye' TO sample(1,2)


STORE 'Hello' TO sample(2,2)
STORE 99 TO sample(6)
STORE .T. TO sample(1)
CLEAR
DISPLAY MEMORY LIKE sample
DIR ou DIRECTORY, comando

Exibe informações sobre arquivos em um diretório ou pasta.

Sintaxe

DIR | DIRECTORY [ON Unidade]


[[LIKE] [Caminho] [EstruturaArquivo]]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]

Argumentos

ON Unidade Especifica o nome da unidade de disco ou do volume onde está localizado o diretório
ou pasta.

[LIKE] [Caminho] [EstruturaArquivo] Especifica o caminho para o diretório ou pasta que contém
os arquivos. O caminho poderá incluir o nome da unidade de disco ou do volume se você omitir ON
Unidade.

Inclua EstruturaArquivo para exibir informações sobre tipos de arquivo que não as tabelas.
EstruturaArquivo é uma estrutura de especificação de arquivo que aceita curingas. Por exemplo,
para listar todos os arquivos de programa no diretório ou pasta atual, emita o comando a seguir:

DIR *.PRG

No Visual FoxPro, você pode emitir o comando a seguir para listar todos os arquivos sem as
extensões:

DIR *.
TO PRINTER [PROMPT] Envia a saída de DIRECTORY para uma impressora.

No Visual FoxPro, você pode incluir a cláusula PROMPT opcional para exibir uma caixa de
diálogo de impressão antes do início da impressão. Nessa caixa de diálogo, você pode ajustar as
definições da impressora, incluindo o número de cópias e de páginas a serem impressas. As
definições da impressora que podem ser ajustadas dependem do driver de impressora instalado no
momento. Coloque a palavra-chave PROMPT logo após TO PRINTER.

TO FILE NomeArquivo Envia a saída de DIR para o arquivo especificado com NomeArquivo. Se
o arquivo já existir e SET SAFETY estiver ativado (ON), será exibida uma pergunta para saber se
você deseja ou não sobrescrever o arquivo..

Comentários

Use DIR para exibir informações sobre arquivos.

DIR sem a cláusula LIKE ou uma estrutura exibe o seguinte:

· Nomes de todas as tabelas do diretório ou pasta.


· O número de registros em cada tabela.
· A data em que cada tabela foi atualizada pela última vez.
· O tamanho de cada tabela em bytes (as tabelas no formato FoxBASE original são assim
registradas).
· Se cada tabela faz parte de um banco de dados.
· O tamanho total em bytes ocupado pelas tabelas no disco (não incluindo arquivos de memo
.FPT associados).
· O número de tabelas exibidas.

· O número total de bytes restantes no disco.

As informações da tabela para a unidade de disco padrão ou volume e o diretório ou pasta são
exibidas, a menos que sejam especificadas de forma diferente com Unidade, Caminho ou ambos.

DIR ou DIRECTORY, exemplo de comando

CLEAR
DIR && Exibe as tabelas no diretório ou pasta atual
DIR *.CDX && Exibe os arquivos de índice no diretório ou pasta atual
DIR A*.DBF && Exibe as tabelas que começam com A
DIR *.* && Exibe todos os arquivos, incluindo aqueles sem extensões
DIRECTORY( ) , função

Retorna verdadeiro (.T.) se o diretório especificado for encontrado em disco.

Sintaxe

DIRECTORY(cNomeDiretório)

Tipos de retorno

Lógico

Argumentos

cNomeDiretório Especifica o nome do diretório a ser localizado. Se você não incluir um caminho
absoluto para o diretório especificado, o Visual FoxPro irá procurar aquele em relação ao diretório
padrão do Visual FoxPro.

Comentários

O diretório padrão do Visual FoxPro é especificado com SET DEFAULT.

DISKSPACE( ), função

Retorna o número de bytes disponível na unidade ou volume de disco padrões ou especificados.

Sintaxe

DISKSPACE([cNomeVolume])
Tipos de retorno

Numérico

Argumentos

cNomeVolume Especifica o nome da unidade de disco ou do volume para o qual o espaço


disponível é retornado. Se cNomeVolume for omitido, o espaço disponível será retornado para o
volume ou unidade de disco padrão.

Comentários

Esta função é útil para determinar se há espaço suficiente em disco para fazer cópias de reserva de
arquivos ou executar comandos, como SORT, que precisam de espaço adicional em disco para
arquivos de trabalho temporário.

A unidade de disco ou o volume padrão são especificados com SET DEFAULT.

DISKSPACE( ) retorna -1 se houver um erro na leitura da unidade de disco ou volume. Em algumas


redes, o valor retornado por DISKSPACE( ) pode não ser exato para grandes unidades de rede.

DISKSPACE( ), exemplo de função

O exemplo a seguir utiliza DISKSPACE( ) para determinar se há espaço suficiente em disco


disponível para executar uma classificação.

*** Check DISKSPACE before sort ***


CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

*** Get size of table header ***


gnTableHead = HEADER( )

*** Calculate size of table ***


gnFileSize = gnTableHead + (RECSIZE( ) * RECCOUNT( ) + 1)
IF DISKSPACE( ) > (gnFileSize * 3)
WAIT WINDOW 'Espaço suficiente em disco para classificação.'
ELSE
WAIT WINDOW 'Espaço insuficiente em disco. A classificação não pode ser feita.'

ENDIF
DISPLAY DATABASE, comando

Exibe informações sobre bancos de dados ou campos atuais, conexões definidas, tabelas ou
visualizações do banco de dados atual.

Sintaxe

DISPLAY DATABASE
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
[NOCONSOLE]

Argumentos

TO PRINTER [PROMPT] Direciona a saída de DISPLAY DATABASE para uma impressora.

No Visual FoxPro, você pode incluir a cláusula opcional PROMPT para exibir a caixa de diálogo
Imprimir antes do início da impressão. Coloque PROMPT logo depois de TO PRINTER.

TO FILE NomeArquivo Direciona a saída de DISPLAY DATABASE para o arquivo especificado


com NomeArquivo. Caso o arquivo já exista e SET SAFETY esteja ativado (ON), o Visual FoxPro
exibirá um aviso perguntando se você deseja sobrescrever o arquivo.

NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela ativa
definida pelo usuário.

Comentários

Utilize DBGETPROP( ) para retornar maiores informações sobre o banco de dados atual.

DISPLAY DATABASE, exemplo de comando

O exemplo a seguir cria um banco de dados denominado people. Uma tabela denominada friends é
criada, sendo automaticamente acrescentada ao banco de dados. DISPLAY TABLES é utilizado
para exibir as tabelas do banco de dados e DISPLAY DATABASES é usado para exibir
informações sobre essas tabelas.

CREATE DATABASE people


CREATE TABLE friends (FirstName C(20), LastName C(20))
CLEAR
DISPLAY TABLES && Exibe as tabelas do banco de dados
DISPLAY DATABASES && Exibe informações sobre as tabelas
DISPLAY FILES, comando

Exibe informações sobre arquivos.

Sintaxe

DISPLAY FILES
[ON Unidade]
[LIKE EstruturaArquivo]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]

Argumentos

ON Unidade Especifica a unidade ou volume onde residem os arquivos.

LIKE EstruturaArquivo Especifica uma condição que faz com que o Visual FoxPro exiba
informações apenas sobre arquivos com padrão correspondentes à da estrutura EstruturaArquivo. O
padrão da estrutura pode conter curingas como ? e *.

TO PRINTER [PROMPT] Inclua TO PRINTER para enviar a saída de DISPLAY FILES para a
impressora.

No Visual FoxPro, você pode incluir a cláusula opcional PROMPT para exibir uma caixa de
diálogo antes do início da impressão. Nela, você pode ajustar as definições da impressora, incluindo
o número de cópias e de páginas a serem impressas. As definições da impressora que podem ser
ajustadas dependem do driver de impressora instalado atualmente. Coloque a palavra-chave
PROMPT logo após TO PRINTER.

TO FILE NomeArquivo Inclua TO FILE NomeArquivo para enviar a saída de DISPLAY FILES
para o arquivo especificado com NomeArquivo. Se o arquivo já existir e SET SAFETY estiver
ativado (ON), será exibida uma pergunta para saber se você deseja ou não substituí-lo.
Comentários

Utilize DISPLAY FILES para exibir informações sobre arquivos em um disco. Você pode exibir
informações sobre todos os arquivos de uma determinada unidade de disco, volume, diretório ou
pasta, ou apenas arquivos que correspondam a um padrão de estrutura que contenha curingas como
? e *.

A emissão de DISPLAY FILES sem qualquer argumento exibe informações sobre as tabelas do
diretório atual. As informações exibidas incluem :

· O nome da tabela.
· O número de registros na tabela.
· Data e hora da última atualização da tabela.
· O tamanho de cada tabela em bytes.
· Se cada tabela faz parte de um banco de dados.

DISPLAY FILES, exemplo de comando

O exemplo a seguir exibe os nomes dos bancos de dados do diretório EXEMPLOS\DADOS.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')

CLEAR
DISPLAY FILES LIKE *.DBC
DISPLAY MEMORY, comando

Exibe o conteúdo atual das matrizes e variáveis de memória.

Sintaxe

DISPLAY MEMORY
[LIKE EstruturaArquivo]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
[NOCONSOLE]

Argumentos

LIKE EstruturaArquivo Exibe informações sobre variáveis e matrizes que correspondem a


EstruturaArquivo do padrão de estrutura. Se você incluir LIKE EstruturaArquivo, o Visual FoxPro
exibirá apenas o conteúdo das matrizes e variáveis de memória que correspondam a
EstruturaArquivo. EstruturaArquivo aceita curingas como ? e *. Por exemplo, para exibir todas as
variáveis de memória que comecem com a letra A, emita:

DISPLAY MEMORY LIKE A*

TO PRINTER [PROMPT] Direciona a saída de DISPLAY MEMORY para a impressora.

Você pode incluir a cláusula PROMPT opcional para exibir uma caixa de diálogo antes do início da
impressão. Nessa caixa de diálogo, você pode ajustar as definições da impressora, incluindo o
número de cópias e de páginas a serem impressas. As definições da impressora a serem ajustadas
dependem do driver de impressora atualmente instalado. Coloque a palavra-chave PROMPT logo
após TO PRINTER.

TO FILE NomeArquivo Direciona a saída de DISPLAY MEMORY para o arquivo especificado


com NomeArquivo. Se o arquivo já existir e SET SAFETY estiver ativado, será exibida uma
pergunta para saber se você deseja ou não sobrescrever o arquivo.

NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela definida
pelo usuário que está ativa.
Comentários

DISPLAY MEMORY exibe o nome, tipo, conteúdo e status de todas as matrizes de variáveis e
variáveis definidas atualmente. Além disso, exibe o número de variáveis definidas, o número de
bytes utilizados e o número de variáveis adicionais disponíveis. Observe que o número de bytes
utilizados representa a memória utilizada por variáveis do tipo caractere. As variáveis do tipo de
caractere são o único tipo de variáveis que precisam de memória adicional, além daquela alocada
pela contagem de variáveis especificada com o item de configuração MVCOUNT.

Também são exibidas informações sobre variáveis do sistema, menus, barras de menus, títulos de
menus e janelas.

DISPLAY MEMORY, exemplo do comando

No exemplo a seguir, muitas variáveis são criadas e atribuídas a valores. DISPLAY MEMORY
exibe primeiro todas as variáveis que começam com “sam” e, em seguida, exibe todas as variáveis
que contêm cinco letras e terminam com “exit”.

STORE 'Adeus' TO sample1


STORE 'Alô' TO sample2
STORE .T. TO texit
STORE .F. TO mexit

CLEAR
DISPLAY MEMORY LIKE sam*
DISPLAY MEMORY LIKE ?exit
DISPLAY STATUS, comando

Exibe o status do ambiente do Visual FoxPro.

Sintaxe

DISPLAY STATUS
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
[NOCONSOLE]

Argumentos

TO PRINTER [PROMPT] Direciona a saída de DISPLAY STATUS para uma impressora.

Você pode incluir a cláusula PROMPT opcional para exibir uma caixa de diálogo de impressão
antes do início da impressão. Nessa caixa de diálogo, você pode ajustar as definições da impressora,
incluindo o número de cópias e de páginas a serem impressas. As definições da impressora que
podem ser ajustadas dependem do driver de impressora atualmente instalado. Coloque a palavra-
chave PROMPT logo após TO PRINTER.

TO FILE NomeArquivo Direciona a saída de DISPLAY STATUS para o arquivo especificado


com NomeArquivo. Se o arquivo já existir e SET SAFETY estiver ativado, será exibida uma
pergunta para saber se você deseja ou não sobrescrever o arquivo.

NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela ativa
definida pelo usuário.

Comentários

Esse formulário de DISPLAY lista informações sobre o ambiente atual do Visual FoxPro. As
categorias de informações e as informações sobre cada categoria são as seguintes.

Informações sobre arquivos de índice e tabelas:

· Tabelas abertas
· Arquivos memo abertos
· Aliases de tabela
· Páginas de código de tabela
· Relacionamentos de tabela
· Índices ativos
· Chaves de arquivos de índice
· A marca ou arquivo de índice controlador
· Arquivos compostos estruturais abertos
· Marcas de índice compostas abertas
· O status do atributo compartilhado de cada tabela aberta
· Os registros bloqueados atualmente em cada tabela

· A definição EXCLUSIVE de uso


· A definição LOCK
· A definição MULTILOCKS
· O valor SET REFRESH
· O valor SET REPROCESS

Informações sobre o arquivo de baixo nível aberto:

· Arquivos de baixo nível abertos


· O número do identificador de arquivo para cada arquivo de baixo nível
· A posição do ponteiro de arquivo para cada arquivo de baixo nível
· Atributos de leitura e gravação para cada arquivo de baixo nível

Informações adicionais sobre o ambiente do Visual FoxPro:

· O arquivo de procedimentos em uso


· O tipo de processador
· O caminho do Visual FoxPro
· O diretório ou pasta padrão do Visual FoxPro
· O destino da impressão
· A definição das margens
· A Área de trabalho atual
· Definições do comando SET
· Módulos binários carregados atualmente
· Informações de DDE no Visual FoxPro
· Página de código atual
· Seqüência de ordenação atual

· Página de código do compilador


· Formato de data atual
· Combinação de teclas da macro de teclado
· Modo como os parâmetros UDF são passados
· Opções de MesclagemTexto
· Funções registradas da biblioteca compartilhada, como aquelas das bibliotecas de vínculo
dinâmico (DLLs, Dynamic-Link Libraries) do Windows ou das bibliotecas Apple Shared Library
Manager (ASLM) ou Code Fragment Manager (CFM) do Macintosh.

DISPLAY STRUCTURE, comando


Exibe a estrutura de um arquivo de tabela.

Sintaxe

DISPLAY STRUCTURE
[IN nÁreaTrabalho| cAliasTabela]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
[NOCONSOLE]

Argumentos

IN nÁreaTrabalho| cAliasTabela Exibe a estrutura da tabela em uma Área de trabalho diferente


das áreas de trabalho atuais. nÁreaTrabalho especifica o número da Área de trabalho e
cAliasTabela, o alias da tabela.

TO PRINTER [PROMPT] Direciona a saída de DISPLAY STRUCTURE para a impressora.

Você pode incluir a cláusula PROMPT opcional para exibir uma caixa de diálogo antes do início da
impressão. Nessa caixa de diálogo, você pode ajustar as definições da impressora, incluindo o
número de cópias e de páginas a serem impressas. As definições da impressora que podem ser
ajustadas dependem do driver de impressora instalado atualmente. Coloque a palavra-chave
PROMPT logo após TO PRINTER.

TO FILE NomeArquivo Direciona a saída de DISPLAY STRUCTURE para o arquivo


especificado com NomeArquivo. Se o arquivo já existir e SET SAFETY estiver ativado, será
exibida uma pergunta para saber se você deseja ou não sobrescrever o arquivo.

NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela ativa
definida pelo usuário.

Comentários

Utilize DISPLAY STRUCTURE para exibir a estrutura dos campos de uma tabela. O nome de cada
campo da tabela é exibido junto com seu tipo e comprimento. Se um campo for do tipo Numérico,
Duplo ou Flutuante, será exibido o número de casas decimais do campo. Também será exibido o
valor nulo aceito em cada campo.

DISPLAY STRUCTURE também exibe o número atual de registros na tabela e a data de sua última
atualização. Se a tabela tiver um campo Memo associado, será exibido o tamanho de bloco do
campo Memo. O comprimento total de todos os campos também será exibido, assim como a página
de código da tabela.

A tabela pode ter um índice composto estrutural que é aberto com a tabela. Se uma marca desse
índice tiver o mesmo nome que um campo da tabela, a ordem da marca (ascendente ou
descendente) e a seqüência de ordenação da marca serão exibidas próximas ao nome do campo.
Se SET FIELDS for utilizado para limitar o acesso aos campos da tabela, um colchete (>) será
exibido ao lado dos nomes dos campos que podem ser acessados.

DISPLAY STRUCTURE, exemplo do comando

No exemplo a seguir, a tabela customer no banco de dados testdata é aberta. DISPLAY


STRUCTURE é utilizado para exibir a estrutura da tabela.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

CLEAR
DISPLAY STRUCTURE

DISPLAY TABLES, comando

Exibe nomes e informações sobre todas as tabelas contidas no banco de dados atual.

Sintaxe

DISPLAY TABLES
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
[NOCONSOLE]
Argumentos

TO PRINTER [PROMPT] Direciona a saída de DISPLAY TABLES para uma impressora.

Você pode incluir PROMPT para exibir a caixa de diálogo Imprimir antes do início da impressão.
Coloque a palavra-chave PROMPT logo após TO PRINTER.

TO FILE NomeArquivo Direciona a saída de DISPLAY TABLES para o arquivo em disco


especificado com NomeArquivo. Caso o arquivo já exista e SET SAFETY esteja ativado (ON), o
Visual FoxPro exibirá um aviso perguntando se você deseja sobrescrever o arquivo.

NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela ativa
definida pelo usuário.

Comentários

As informações retornadas formam um subconjunto de informações exibidas com DISPLAY


STATUS. No entanto, as informações exibidas com DISPLAY TABLES contêm apenas
informações relacionadas a tabelas, exibindo as informações, independente de as tabelas estarem ou
não abertas.

As seguintes informações são exibidas:

· Nome da tabela
· Caminho da tabela

DISPLAY TABLES, exemplo do comando

O exemplo a seguir abre a tabela customer no banco de dados testdata. DISPLAY TABLES é
utilizado para exibir informações sobre as tabelas do banco de dados.

CLOSE DATABASES
SET PATH TO (SYS(2004) + 'samples\data\') && Define o caminho para o banco de dados
OPEN DATABASE testdata && Abre o banco de dados testdata

CLEAR
DISPLAY TABLES && Exibe informações sobre as tabelas no banco de dados
DISPLAY, comando

Exibe informações sobre a tabela atual na janela principal do Visual FoxPro ou em uma janela
definida pelo usuário.

Sintaxe

DISPLAY
[[FIELDS] ListaCampos]
[Escopo] [FOR lExpressão1] [WHILE Expressão2]
[OFF]
[NOCONSOLE]
[NOOPTIMIZE]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]

Argumentos

FIELDS ListaCampos Especifica os campos a serem exibidos. Se você omitir FIELDS


ListaCampos, todos os campos da tabela serão exibidos, como padrão.

O conteúdo do campo Memo não é exibido, a menos que o nome deste campo esteja explicitamente
incluído na lista de campos. Sua largura apresentada é determinada por SET MEMOWIDTH

Escopo Especifica o intervalo de registros a serem exibidos. Apenas os registros dentro do


intervalo serão exibidos. As cláusulas de escopo são: ALL, NEXT nRegistros, RECORD
nNúmeroRegistro e REST. Os comandos que incluem Escopo operam apenas na tabela da Área de
trabalho ativa.

Para obter maiores informações sobre as cláusulas de escopo, consulte o tópico Cláusulas de
escopo.

O escopo-padrão para DISPLAY é o registro atual (NEXT 1).

FOR lExpressão1 Especifica que apenas os registros que satisfazem a condição lógica lExpressão1
serão exibidos. Isso permite que você extraia os registros não desejados.

Rushmore otimiza consultas criadas com DISPLAY ... FOR se lExpressão1 for uma expressão
otimizável. Para obter o melhor desempenho, utilize uma expressão otimizável na cláusula FOR.

Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia


Rushmore” no capítulo 15, “Otimizando aplicativos”, do Guia do Desenvolvedor.

WHILE lExpressão2 Especifica uma condição através da qual os registros serão exibidos quando a
expressão lógica lExpressão2 resultar em verdadeiro (.T.).

OFF Suprime a exibição dos números de registro. Se você omitir OFF, o número de registro será
exibido antes de cada registro.
NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela ativa
definida pelo usuário.

NOOPTIMIZE Desativa a otimização Rushmore de DISPLAY.

Para maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia Rushmore”


no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

TO PRINTER [PROMPT] Envia a saída de DISPLAY para a impressora

No Visual FoxPro, , você pode incluir a cláusula PROMPT opcional para exibir uma caixa de
diálogo antes do início da impressão. Nela, você pode ajustar as definições da impressora, incluindo
o número de cópias e de páginas a serem impressas. As definições da impressora que podem ser
ajustadas dependem do driver de impressora instalado no momento. Coloque PROMPT logo após
TO PRINTER.

TO FILE NomeArquivo Envia a saída de DISPLAY para o arquivo especificado com


NomeArquivo. Se o arquivo já existir e SET SAFETY estiver ativado (ON), será exibida uma
pergunta para saber se você deseja ou não sobrescrever o arquivo.

Comentários

DISPLAY exibe o conteúdo dos registros e os resultados de expressões para a tabela atual. Se
houver mais informações do que podem ser exibidas na janela, a primeira tela de informações será
exibida e o Visual FoxPro, colocado em pausa. Pressione qualquer tecla ou clique sobre qualquer
local para ver a próxima tela de informações. DISPLAY é semelhante a LIST, com exceção de que
LIST exibe as mesmas informações em um fluxo contínuo sem ser colocado em pausa.

DISPLAY também pode ser utilizado para exibir os resultados de expressões, que podem consistir
em combinações de literais, variáveis de memória, elementos de matriz, campos e campos Memo.
Os nomes de campos e as expressões serão exibidas se SET HEADINGS estiver ativado (ON).

DISPLAY, exemplo de comando

O exemplo a seguir abre a tabela customer do banco de dados testdata. O conteúdo do primeiro
registro é exibido.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer

CLEAR
DISPLAY FIELD cust_id, company, contact OFF NEXT 10
DMY( ), função

Retorna uma expressão de caractere no formato dia-mês-ano(por exemplo, 31 Maio 1996) a partir
de uma expressão de data ou data e hora. O nome do mês não é abreviado.

Sintaxe

DMY(dExpressão | tExpressão)

Tipos de retorno

Caractere

Argumentos

dExpressão Especifica a expressão de data a partir da qual a função DMY( ) retorna uma
seqüência de caracteres no formato dia-mês-ano.

tExpressão Especifica a expressão de data e hora a partir da qual a função DMY( ) retorna uma
seqüência de caracteres no formato dia-mês-ano.

Comentários
Se SET CENTURY estiver desativado (OFF), DMY( ) retornará uma seqüência de caracteres no
formato dd mês yy ano (por exemplo, 16 Fevereiro 96). Se SET CENTURY estiver ativado (ON), o
formato será dd-mês-aaaa (por exemplo, 16 Fevereiro 1996).

DMY( ), exemplo da função

CLEAR
SET CENTURY OFF
? DMY(DATE( ))
SET CENTURY ON
? DMY(DATE( ))

DO CASE ... ENDCASE, comando

Executa o primeiro conjunto de comandos cuja expressão condicional resulta em verdadeiro (.T.).

Sintaxe

DO CASE
CASE lExpressão1
Comandos
[CASE lExpressão2
Comandos
...
CASE lExpressãoN
Comandos]
[OTHERWISE
Comandos]
ENDCASE

Argumentos

CASE lExpressão1 Comandos ... Quando a primeira expressão CASE verdadeira (.T.) é localizada,
o conjunto de comandos que a acompanha é executado. A execução do conjunto de comandos
continua até que a próxima cláusula CASE ou ENDCASE seja localizada. A execução é retomada,
então, pelo primeiro comando seguinte a ENDCASE.

Se uma expressão CASE for falsa (.F.), o conjunto de comandos seguintes a ela até a próxima
cláusula CASE será ignorado.

Apenas um conjunto de comandos é executado. É o primeiro conjunto de comandos cuja expressão


CASE resulta em verdadeiro (.T.). Qualquer expressão CASE verdadeira (.T.) posterior será
ignorada.

OTHERWISE Comandos Se todas as expressões CASE resultarem em falso (.F.), OTHERWISE


determinará se um conjunto de comandos adicionais será executado.

· Se você incluir OTHERWISE, os comandos que acompanham OTHERWISE serão


executados e a execução saltará para o primeiro comando que acompanha ENDCASE.
· Se você omitir OTHERWISE, a execução saltará para o primeiro comando que acompanha
ENDCASE.

Comentários

DO CASE é utilizado para executar um conjunto de comandos do Visual FoxPro, baseado no valor
de uma expressão lógica. Quando DO CASE é executado, as expressões lógicas sucessivas são
avaliadas; os valores das expressões determinam o conjunto de comandos que será executado.

Podem ser colocados comentários na mesma linha, após DO CASE e ENDCASE. Os comentários
são ignorados durante a compilação e execução do programa.

DO CASE ... ENDCASE, exemplo de comando

Neste exemplo, o Visual FoxPro avalia cada cláusula CASE até que a variável MONTH seja
encontrada em uma das listas. A seqüência apropriada é armazenada na variável rpt_title e a
estrutura DO CASE é fechada.

STORE CMONTH(DATE( )) TO month && O mês atual

DO CASE && Começa o loop


CASE INLIST(month,'Janeiro','Fevereiro','Março')
STORE 'Ganhos no primeiro trimestre' TO rpt_title

CASE INLIST(month,'Abril','Maio','Junho')
STORE 'Ganhos no segundo trimestre' TO rpt_title

CASE INLIST(month,'Julho','Agosto','Setembro')
STORE 'Ganhos no terceiro trimestre' TO rpt_title

OTHERWISE
STORE 'Ganhos no quarto trimestre' TO rpt_title

ENDCASE && Finaliza o loop


WAIT WINDOW rpt_title NOWAIT

DO WHILE ... ENDDO, comando

Executa um conjunto de comandos em um loop condicional.

Sintaxe

DO WHILE lExpressão
Comandos
[LOOP]
[EXIT]
ENDDO

Argumentos

lExpressão Especifica uma expressão lógica cujo valor determina se os comandos entre DO
WHILE e ENDDO são executados. Se lExpressão for verdadeiro (.T.), o conjunto de comandos será
executado.
Comandos Especifica o conjunto de comandos do Visual FoxPro a ser executado se lExpressão for
verdadeiro (.T.).

LOOP Retorna o controle do programa diretamente para DO WHILE. LOOP pode ser colocado
em qualquer lugar entre DO WHILE e ENDDO.

EXIT Transfere o controle do programa de dentro do loop DO WHILE para o primeiro comando
após ENDDO. EXIT pode ser colocado em qualquer lugar entre DO WHILE e ENDDO.

Comentários

Os comandos entre DO WHILE e ENDDO são executados enquanto a expressão lógica lExpressão
permanecer como verdadeira (.T.). Cada instrução DO WHILE deve ter uma instrução ENDDO
correspondente.

Os comentários podem ser colocados depois de DO WHILE e ENDDO na mesma linha. Os


comentários serão ignorados durante a compilação e execução do programa.

DO WHILE ... ENDDO, exemplo do comando

No exemplo a seguir, o número de produtos em estoque com preços acima de $20 é totalizado no
loop DO WHILE até que seja encontrado o final do arquivo (EOF). O loop DO WHILE é executado
e o total é exibido.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela Products
SET TALK OFF
gnStockTot = 0

DO WHILE .T. && Inicia o loop


IF EOF( )
EXIT
ENDIF
IF unit_price < 20
SKIP
LOOP
ENDIF
gnStockTot = gnStockTot + in_stock
SKIP
ENDDO && Finaliza o loop

CLEAR
? 'O total de itens em estoque são avaliados em aproximadamente 20 dólares:'
?? gnStockTot
DO, comando

Executa um procedimento ou programa do Visual FoxPro.

Sintaxe

DO NomePrograma1 | NomeProcedimento
[IN NomePrograma2]
[WITH ListaParâmetros]

Argumentos

NomePrograma1 Especifica o nome do programa a ser executado.

Se você não incluir uma extensão com o programa que executar, o Visual FoxPro procurará e
executará essas versões do programa na seguinte ordem:

· .EXE (versão executável)


· .APP (um aplicativo)
· .FXP (versão compilada)
· .PRG (programa)

Para utilizar DO, a fim de executar um programa de menu, um programa de formulário ou uma
consulta específica, você deve incluir as respectivas extensões (.MPR, .SPR ou .QPR).

NomeProcedimento Especifica o nome de um procedimento a ser executado. O Visual FoxPro


primeiro procura o procedimento no programa atualmente em execução. Se o procedimento não
estiver localizado nesse programa, o Visual FoxPro procurará o procedimento em um arquivo de
procedimentos aberto com SET PROCEDURE.

Você pode incluir a cláusula IN NomePrograma2, avisando ao Visual FoxPro para procurar o
procedimento no arquivo que você especificar.

Os procedimentos múltiplos, dentro de uma versão executável (.EXE) ou de um aplicativo (.APP),


podem ter o mesmo nome. Quando você utiliza DO para iniciar um procedimento em uma versão
executável ou em um aplicativo, o Visual FoxPro procura apenas o programa principal do aplicativo
ou versão executável do procedimento especificado.

IN NomePrograma2 Executa um procedimento no arquivo de programa especificado com


NomePrograma2.

Quando o arquivo é localizado, o procedimento é executado. Se o arquivo de programa não puder


ser localizado, será exibida a mensagem “Arquivo inexistente”. Se o arquivo de programa for
localizado mas o procedimento especificado não estiver nesse arquivo, será exibida a mensagem
“Procedimento não localizado”.

WITH ListaParâmetros Especifica os parâmetros a serem passados ao programa ou procedimento.


Os parâmetros listados em ListaParâmetros são expressões, variáveis de memória, literais, campos
ou funções definidas pelo usuário. Como padrão, os parâmetros são passados aos programas e
procedimentos por referência. Você pode passar um parâmetro por valor, colocando-o entre
parênteses.

Consulte SET UDFPARMS para obter informações sobre como passar parâmetros por valor ou
referência. O número máximo de parâmetros, que podem ser passados a um programa ou
procedimento é 27. Para obter maiores informações sobre como passar parâmetros, consulte
LPARAMETERS e PARAMETERS.

Comentários

DO executa um procedimento ou programa do Visual FoxPro em um programa ou arquivo de


procedimentos. O próprio arquivo de programa pode conter comandos DO adicionais, permitindo
que você aninhe os comandos DO em até 128 níveis.

Quando você utiliza DO para executar um programa, os comandos contidos no arquivo de programa
são executados até que ocorra uma das opções a seguir:

· RETURN é encontrado.
· CANCEL é executado.
· Outro comando DO é emitido.
· O fim do arquivo é atingido.
· QUIT é executado.

Quando a execução do programa for concluída, o controle será retornado para um dos locais a
seguir:

· O programa de chamada.
· A janela Comando.
· O sistema operacional.

Se você escolher Executar no menu Programa e executar um programa em um diretório em uma


unidade de disco diferente do diretório ou unidade de disco atual, o Visual FoxPro alterará
automaticamente a unidade de disco e o diretório padrão para o diretório e unidade de disco que
contêm o programa.
DOW( ), função

Retorna um valor numérico de dia da semana a partir de uma expressão de Data ou DataHora.

Sintaxe

DOW(dExpressão | tExpressão [, nPrimeiroDiaSemana])

Tipos de retorno

Numérico

Argumentos

dExpressão Especifica a expressão de Data da qual DOW( ) retorna o número do dia.

tExpressão Especifica a expressão de DataHora da qual DOW( ) retorna o número do dia.

nPrimeiroDiaSemana Especifica o primeiro dia da semana.

nPrimeiroDiaSemana pode ser um dos valores a seguir.

NPrimeiroDiaSemana Descrição

0 DOW( ) utiliza qualquer dia atualmente selecionado na caixa de listagem Começar semana
em, exibida na guia Regional da caixa de diálogo Opções.
1 Domingo. Esse é o padrão quando nPrimeiroDiaSemana é omitido, além de ser o primeiro
dia da semana utilizado nas versões anteriores do FoxPro.
2 Segunda-feira
3 Terça-feira
4 Quarta-feira
5 Quinta-feira
6 Sexta-feira
7 Sábado

DOW( ), exemplo da função

STORE DATE( ) TO gdDayNum


CLEAR
? DOW(gdDayNum)
? CDOW(gdDayNum)
DROP TABLE, comando

Remove uma tabela do banco de dados atual e a exclui do disco.

Sintaxe

DROP TABLE NomeTabela | NomeArquivo | ? [RECYCLE]

Definições

NomeTabela Especifica a tabela a ser removida do banco de dados atual e excluída do disco.

NomeArquivo Especifica uma tabela livre a ser excluída do disco.

? Exibe a caixa de diálogo Remover da qual você pode selecionar uma tabela a ser removida do
banco de dados atual e excluída do disco.

RECYCLE Especifica que a tabela não seja imediatamente excluída do disco e seja colocada na
Lixeira do Windows 95.

Comentários

Quando DROP TABLE é emitido, todos os índices principais, valores padrão e regras de validação
associados à tabela também são removidos. DROP TABLE também afeta outras tabelas no banco
de dados atual se as tabelas possuírem regras ou relações associadas à tabela sendo removidas. As
regras e relações não estarão mais válidas quando a tabela for removida do banco de dados.

Qualquer tabela excluída com esse comando não pode ser recuperada. Mesmo que SET SAFETY
esteja ativado (ON), você não será avisado quando a tabela for excluída.
DTOC( ), função

Retorna uma data tipo Caractere a partir de uma expressão Data ou DataHora.

Sintaxe

DTOC(dExpressão | tExpressão [, 1])

Tipos de retorno

Caractere

Argumentos

dExpressão Especifica uma variável de Data, elemento de matriz ou campo para os quais a função
DTOC( ) retorna uma data tipo Caractere.

tExpressão Especifica uma variável de DataHora, elemento de matriz ou campo para os quais a
função DTOC( ) retorna uma data do tipo Caractere.
1 Retorna a data em formato adequado para indexação. Isto é útil para manter os registros de
tabelas em seqüência cronológica.

Por exemplo, para ordenar os registros da tabela em uma seqüência de entrada, você pode emitir
este comando:

INDEX ON DTOC(gdInvDate, 1) + gnInvTime TAG Timeindx

gdInvDate e gnInvTime são campos que contêm a data e a hora em que os dados foram inseridos no
registro.

Comentários

DTOC( ) retorna uma seqüência de caracteres que corresponde à expressão Data ou DataHora. O
formato de data é determinado por SET CENTURY e SET DATE.

DTOC( ), exemplo da função

STORE CTOD('10/31/95') TO gdThisDate


CLEAR
? DTOC(gdThisDate)
STORE DTOC({10/31/95}+90) TO gcExpireDate
? 'Sua garantia de 90 dias expirou ', gcExpireDate
? DTOC({10/31/95},1)

DTOR( ), função

Converte graus em radianos.

Sintaxe
DTOR(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica a expressão numérica cujo valor você deseja converter em radianos. Um
ângulo expresso no formato grau:minuto:segundo deve ser convertido no seu equivalente decimal.

Comentários

DTOR( ) converte o valor de uma expressão numérica determinada em graus em um valor


equivalente em radianos. DTOR( ) é útil para trabalhar com estas funções trigonométricas do Visual
FoxPro: ACOS( ), ASIN( ), COS( ), SIN( ) e TAN( ).

Utilize RTOD( ) para converter radianos em graus.

DTOR( ), exemplo da função

CLEAR
? DTOR(0) && Exibe 0.00
? DTOR(45) && Exibe 0.79
? DTOR(90) && Exibe 1.57
? DTOR(180) && Exibe 3.14
? COS(DTOR(90)) && Exibe 0.00
DTOS( ), função

Retorna uma data de seqüência de caracteres no formato aaaammdd a partir de uma expressão Data
ou DataHora especificada.

Sintaxe

DTOS(dExpressão | tExpressão)

Tipos de retorno

Caractere

Argumentos

dExpressão Especifica a expressão Data que DTOS( ) converte em uma seqüência de caracteres de
oito dígitos.

tExpressão Especifica a expressão DataHora que DTOS( ) converte em uma seqüência de


caracteres de oito dígitos.

Comentários

Essa função é útil para indexar tabelas em um campo Data ou DataHora. É equivalente a DTOC( )
quando o argumento opcional 1 é incluído.

A seqüência de caracteres retornada por DTOS( ) não é afetada por SET DATE ou SET
CENTURY.

DTOS( ), exemplo da função

CLEAR
? DTOS(DATE( ))
DTOT( ), função

Retorna um valor de DataHora a partir de uma expressão Data.

Sintaxe

DTOT(dExpressãoData)

Tipos de retorno

DataHora

Argumentos

dExpressãoData Especifica a expressão Data da qual é retornado um valor de DataHora.

Comentários

O formato do valor de DataHora retornado por DTOT( ) depende das definições atuais de SET
DATE e SET MARK. Se não for dado um século, será utilizado o século vinte.
DTOT( ) adiciona uma hora padrão de meia-noite (12:00:00 A.M.) à data para produzir um valor de
DataHora válido.

DTOT( ), exemplo da função

? DTOT({02/16/95}) && Exibe 02/16/95 12:00:00am

EDIT, comando

Exibe campos para edição.

Sintaxe

EDIT
[FIELDS ListaCampos]
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[FONT cNomeFonte [, nTamanhoFonte]]
[STYLE cEstiloFonte]
[FREEZE NomeCampo]
[KEY eExpressão1 [, eExpressão2]]
[LAST | NOINIT]
[LPARTITION]
[NAME NomeObjeto]
[NOAPPEND]
[NODELETE]
[NOEDIT | NOMODIFY]
[NOLINK]
[NOMENU]
[NOOPTIMIZE]
[NORMAL]
[NOWAIT]
[PARTITION nNúmeroColuna [LEDIT] [REDIT]]
[PREFERENCE NomePreferência]
[REST]
[SAVE]
[TIMEOUT nSegundos]
[TITLE cTextoTitulo]
[VALID [:F] lExpressão3 [ERROR cTextoMensagem]]
[WHEN lExpressão4]
[WIDTH nLarguraCampo]
[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]
[COLOR SCHEME nNúmeroEsquema]

Argumentos
FIELDS ListaCampos Especifica os campos que irão aparecer na janela Editar. Os campos são
exibidos na ordem especificada na ListaCampos. Você pode incluir campos de outras tabelas
relacionadas na lista de campos. Ao incluir um campo de uma tabela relacionada, coloque o alias da
tabela e um ponto antes do nome do campo.

Se você omitir FIELDS, todos os campos da tabela serão exibidos na ordem em que aparecem na
estrutura da tabela.

A lista de campos pode especificar qualquer combinação de campos ou campos calculados,


incluindo campos de tabelas abertas em outras áreas de trabalho. A sintaxe da lista de campos é:

NomeCampo1
[:R]
[:nLarguraColuna]
[:V = lExpressão1 [:F] [:E = cTextoMensagem]]
[:P = cCódigosFormato]
[:B = eLimiteInferior, eLimiteSuperior [:F]]
[:H = cTextoCabeçalho]
[:W = lExpressao2]
[, NomeCampo2 [:R]...]

Campos calculados

A lista de campos pode conter instruções para a criação de campos calculados. Um campo calculado
contém dados somente para leitura criados com uma expressão. Essa expressão pode assumir
qualquer forma, mas precisa ser uma expressão válida do Visual FoxPro.

A sintaxe da instrução utilizada para criar um campo calculado é:

NomeCampoCalculado = eExpressão

Este exemplo cria um campo calculado chamado location:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
EDIT FIELDS location = ALLTRIM(city) + ', ' + country

A lista de campos da cláusula FIELDS inclui oito opções, o que permite um gerenciamento especial
dos campos exibidos na janela Editar.

:nLarguraColuna Especifica o tamanho para exibição de um campo em colunas. O valor de :


nLarguraColuna não afeta o tamanho do campo na tabela; ele só altera a forma de exibição do
campo na janela Editar
:R No exemplo a seguir, a janela Editar é aberta com os campos cust_id e company. O campo
cust_id é somente para leitura, não podendo ser alterado.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
EDIT FIELDS cust_id:R, company

:V = lExpressão1 Especifica uma opção de verificação que executa validação de dados em nível de
campos na janela Editar. Se lExpressão1 retornar verdadeiro (.T.) quando você mover o cursor para
fora do campo, a entrada de dados no campo será considerada correta e o cursor passará para o
próximo campo.

Se lExpressão1 retornar falso (.F.), a entrada de dados será considerada incorreta, o cursor
permanecerá no campo e será exibida uma mensagem. Se lExpressão1 retornar 0, a entrada de
dados será considerada incorreta e o cursor permanecerá no campo, mas não será exibida uma
mensagem de erro.

Como padrão, lExpressão1 só é avaliada quando o campo é modificado. Para forçar uma
verificação, inclua a opção :F.

Você pode exibir sua própria mensagem de erro incluindo a opção :E.

A opção de verificação não é executada para campos Memo.

:F Especifica uma opção de validação forçada que determina se a expressão na opção de


verificação (lExpressão1) será avaliada quando você mover o cursor para fora de um campo. Se :F
não for incluído, lExpressão1 só será avaliada se forem feitas alterações no campo. Se :F for
incluído, lExpressão1 será avaliada, mesmo que o campo não seja modificado

:E = cTextoMensagem Exibe uma mensagem de erro especificada com cTextoMensagem em vez


da mensagem padrão do sistema.

Se a expressão de validação :V = lExpressão1 for verdadeira (.T.), o cursor sairá normalmente do


campo. Se a expressão for falsa (.F.), o cursor permanecerá no campo e uma mensagem de erro será
exibida.

Se a expressão de validação :V = lExpressão1 for 0, não será exibida uma mensagem de erro e o
cursor permanecerá no campo que está sendo validado, permitindo que você exiba suas próprias
mensagens de erro em rotinas de validação.

A mensagem de erro só será exibida se SET NOTIFY estiver ativado (ON). Uma campainha será
ouvida se SET BELL estiver ativado (ON).

O exemplo a seguir abre a tabela products e exibe os campos product_id e prod_name. Digite um
valor superior a 100 no campo product_id para executar a validação do campo.
:V especifica o critério de validação. :F força a verificação da validação, quer os dados sejam ou
não alterados. :E substitui a mensagem de erro do sistema do Visual FoxPro por uma mensagem de
erro definida pelo usuário.

No Visual FoxPro, a mensagem de erro é exibida na barra de status, na parte inferior da janela
principal do Visual FoxPro.

Pressione ESC para fechar a janela Editar.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
IF _WINDOWS OR _MAC
SET STATUS BAR ON
ENDIF
USE products
EDIT FIELDS in_stock :V = in_stock < 100 ;
:F ;
:E = 'The stock amount must be less than 100'

:P = cCódigosFormato Especifica uma opção de figura que permite criar um modelo de edição
especificado com cCódigosFormato, que controla a exibição e entrada de dados para cada campo
em uma janela Editar.

Para obter maiores informações sobre a utilização de códigos de edição de figuras, consulte as
propriedades Format e InputMask.

O exemplo a seguir utiliza a opção de figura para permitir que somente dados numéricos em um
formato específico sejam digitados no campo unit_price:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
EDIT FIELDS unit_price :P = '99,999.99'

:B = eLimiteInferior, eLimiteSuperior [:F] Especifica um conjunto de limites entre os quais os


dados precisam estar. As expressões de limite eLimiteInferior e eLimiteSuperior precisam
corresponder ao tipo de dados do campo e não podem ser nomes de funções definidas pelo usuário.
Se os dados digitados não estiverem entre eLimiteInferior e eLimiteSuperior, uma mensagem do
sistema será exibida, indicando o intervalo entre o qual os dados precisam estar.

Como padrão, os dados digitados só serão comparados com os valores dos limites se você alterar o
conteúdo do campo. Para forçar uma comparação com os valores dos limites, inclua a opção de
validação forçada (:F).

O exemplo a seguir garante que o valor do campo in_stock fique entre 1 e 100. Pressione ESC para
fechar a janela Editar.
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
EDIT FIELDS in_stock :B = 1, 100 :F

:H = cTextoCabeçalho Especifica uma opção de cabeçalho (:H) que permite a substituição dos
nomes de campo padrão por seus próprios cabeçalhos, especificados com cTextoCabeçalho. Como
padrão, os nomes de campos são posicionados do lado esquerdo dos campos na janela Editar.

O exemplo a seguir fornece cabeçalhos definidos pelo usuário para os campos exibidos.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela products
EDIT FIELDS prod_name :H = 'Nome Produto:', ;
unit_price :H = 'Preço por Unidade:'

:W = lExpressão2 Especifica uma opção WHEN que permite impedir, condicionalmente, que o
cursor seja movido para um campo baseado no valor da expressão lógica lExpressão
. (:W) avalia lExpressão. Se lExpressão2 retornar um valor falso, (.F.), você não poderá mover o
cursor para o campo. Se lExpressão2 retornar um valor verdadeiro (.T.), você poderá mover o
cursor para o campo. Funções definidas pelo usuário são aceitas em lExpressão2.

É proibido mover o cursor em todos os campos se o campo atual estiver marcado como somente
para leitura. Isso ocorre somente quando todos os campos contêm uma cláusula WHEN cujo retorno
é falso.

Escopo Especifica um intervalo de registros exibido na janela Editar. As cláusulas de escopo são:
ALL, NEXT nRegistros, RECORD nNúmeroRegistro e REST. Comandos que incluem Escopo
funcionam somente na tabela da Área de trabalho ativa. O escopo padrão para EDIT é ALL, isto é,
todos os registros.

Para obter maiores informações, consulte Cláusulas de escopo.

FOR lExpressão1 Especifica que somente os registros que satisfazem a condição lógica
lExpressão1 são exibidos na janela Editar. Isso permite que você exclua os registros indesejados.

Rushmore otimizará uma consulta EDIT FOR se lExpressão1 for uma expressão otimizável. Para
obter melhor desempenho, utilize uma expressão otimizável na cláusula FOR.

Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia


Rushmore” no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

WHILE lExpressão2 Especifica uma condição em que os registros são exibidos na janela Editar
enquanto a expressão lógica lExpressão2 retorna um valor verdadeiro (.T.).
FONT cNomeFonte [, nTamanhoFonte] Especifica o nome e o tamanho da fonte da janela Editar.
A expressão de caracteres cNomeFonte especifica o nome da fonte e a expressão numérica
nTamanhoFonte especifica o tamanho da fonte. Por exemplo, a cláusula a seguir especifica a fonte
Courier de 16 pontos para os campos exibidos na janela Editar:

FONT 'Courier',16

Se você incluir a cláusula FONT, mas omitir o tamanho da fonte nTamanhoFonte, uma fonte de 10
pontos será utilizada na janela Editar.

Se você omitir a cláusula FONT, a fonte MS Sans Serif de 8 pontos será utilizada. Se a fonte
especificada não estiver disponível, uma fonte com características semelhantes será utilizada em seu
lugar.

STYLE cEstiloFonte Especifica o estilo da fonte da janela Editar no Visual FoxPro. Se você omitir
a cláusula STYLE, o estilo de fonte normal será utilizado.

Se o estilo da fonte especificado não estiver disponível, um estilo de fonte com características
semelhantes será utilizado em seu lugar.

Caractere Estilo da fonte

B Negrito
I Itálico
N Normal
O Contorno
Q Opaco
S Sombra
- Riscado
T Transparente
U Sublinhado
Você pode incluir mais de um caractere para especificar uma combinação de estilos de fonte. O
exemplo a seguir abre a janela Editar e utiliza uma fonte sublinhada:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
IF _WINDOWS
EDIT FIELDS contact FONT 'System', 15 STYLE 'NU'
ENDIF
IF _MAC
EDIT FIELDS contact FONT 'Geneva', 14 STYLE 'NU'
ENDIF

FREEZE NomeCampo Permite que alterações sejam feitas somente em um campo especificado
com NomeCampo na janela Editar. Os campos restantes são exibidos, mas não podem ser editados.
KEY eExpressão1 [, eExpressão2] Limita o escopo dos registros exibidos na janela Editar. Com
KEY, você pode especificar um valor-chave de índice (eExpressão1) ou um intervalo de valores-
chave (eExpressão1, eExpressão2) para os registros exibidos na janela Editar. A tabela tem que ser
indexada e o valor ou valores-chave de índice incluídos na cláusula KEY devem ter o mesmo tipo
de dados que a expressão de índice do arquivo de índice mestre ou marca mestre.

No exemplo a seguir, somente registros com códigos postais entre 10.000 e 30.000 são exibidos na
janela Editar:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
SET ORDER TO postalcode
EDIT KEY '10000', '30000'

LAST | NOINIT Salva qualquer alteração de configuração feita na aparência de uma janela Editar.
As alterações são salvas no arquivo FOXUSER e podem incluir alterações feitas na lista de campos,
no tamanho de cada campo e na localização e tamanho da janela Editar. Para obter maiores
informações sobre este arquivo, consulte SET RESOURCE.

Se você emitir EDIT com a cláusula LAST, a janela Editar será aberta com a mesma configuração
que foi salva pela última vez no arquivo FOXUSER. Isso restaura a janela Editar anterior, criada
com o último EDIT. Se o último comando EDIT emitido na janela Comando tiver incluído uma
longa lista de cláusulas, emita EDIT LAST para não precisar digitar o comando novamente.

Alterações na configuração da janela Editar feitas na sessão atual não serão salvas se você sair de
EDIT pressionando CTRL+Q.

LPARTITION Coloca o cursor no primeiro campo da partição esquerda da janela Editar. Pode-se
dividir a janela Editar nas partições esquerda e direita, incluindo-se a cláusula PARTITION. Como
padrão, o cursor será colocado no primeiro campo da partição direita quando a janela Editar for
aberta.

O cursor será posicionado na partição direita da janela Editar se você incluir LPARTITION sem a
cláusula PARTITION.

NAME NomeObjeto Cria uma referência de objeto para a janela Editar, permitindo a você
manipular a janela Editar com propriedades orientadas a objetos disponíveis para o controle Grid.

Para obter informações adicionais sobre programação orientada a objetos no Visual FoxPro,
consulte o capítulo 3, “Programação orientada a objetos”, no Guia do Desenvolvedor. Para obter
maiores informações sobre as propriedades do controle Grid que podem ser especificadas para uma
janela Editar criada com a cláusula NAME, consulte o tópico Controle Grid.

NOAPPEND Impede que o usuário adicione registros à tabela pressionando CTRL+Y ou


escolhendo Modo de inclusão no menu Exibir.

Importante A inclusão de NOAPPEND não impede que você inclua o registro de uma rotina
(criada com VALID, WHEN ou ON KEY LABEL) enquanto estiver na janela Editar.
NODELETE Impede que registros sejam marcados para exclusão na janela Editar. Como padrão,
um registro pode ser marcado para exclusão quando você pressiona CTRL+T, escolhe Alternar
marca de exclusão ou clica na coluna mais à esquerda do registro a ser excluído.

Importante A inclusão de NODELETE não impede que você marque um registro para exclusão em
uma rotina (criada com VALID, WHEN ou ON KEY LABEL) enquanto estiver na janela Editar.

NOEDIT | NOMODIFY Impede que um usuário modifique a tabela. NOEDIT e NOMODIFY são
idênticos. Se você incluir uma dessas cláusulas, poderá pesquisar ou procurar registros na tabela,
mas não poderá editá-la. No entanto, poderá incluir e excluir registros.

NOLINK Desvincula partições na janela Editar. Como padrão, as partições esquerda e direita da
janela Editar estão vinculadas; quando você rola uma partição, a outra partição também é rolada.

NOMENU Remove da barra de menus do sistema o título de menu Tabela do Visual FoxPro,
impedindo o acesso ao menu Editar.

NOOPTIMIZE Desativa a otimização Rushmore de EDIT.

Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia


Rushmore” na Ajuda ou o capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

NORMAL Abre a janela Editar com suas definições padrão normais, como cores, tamanho,
posição, título e opções de controle (GROW, FLOAT, ZOOM e assim por diante). Se você omitir
NORMAL e a janela de saída atual for uma janela definida pelo usuário com suas próprias
definições, a janela Editar também assumirá as definições feitas pelo usuário.

NOWAIT Continua a execução do programa quando a janela Editar é aberta. O programa não
espera que a janela Editar seja fechada, mas continua executando na linha do programa,
imediatamente após a linha do programa que contém EDIT NOWAIT. Se você omitir NOWAIT,
quando EDIT for emitido em um programa, uma janela Editar será aberta e a execução do programa
será interrompida até que ela seja fechada.

NOWAIT só pode ser acessado a partir de um programa. A inclusão de NOWAIT ao emitir EDIT
na janela Comando não tem efeito.

PARTITION nNúmeroColuna Divide uma janela Editar nas partições esquerda e direita com
nNúmeroColuna especificando o número da coluna da barra de divisão. Por exemplo, se
nNúmeroColuna for 20, a barra de divisão será posicionada na coluna 20 da janela Editar.

LEDIT Especifica que a partição esquerda da janela Editar aparece no modo Pesquisa.

REDIT Especifica que a partição direita da janela Editar aparece no modo Pesquisa. O exemplo a
seguir abre uma janela Editar, com a barra de divisão posicionada na coluna 20 e a partição direita
aberta no modo Pesquisa.

Inclua as duas palavras-chave para abrir ambas as partições no modo Pesquisa.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer

EDIT PARTITION 30 REDIT

PREFERENCE NomePreferência Salva os atributos e opções de uma janela Editar para utilização
posterior. Ao contrário de LAST, que restaura a janela Editar da maneira como apareceu na sessão
anterior, PREFERENCE salva os atributos de uma janela Editar indefinidamente, no arquivo de
recursos FOXUSER. As preferências podem ser recuperadas sempre que desejado. Para obter
maiores informações sobre o arquivo de recursos FOXUSER, consulte SET RESOURCE.

Se você emitir EDIT pela primeira vez com o nome de preferência NomePreferência especificado,
será criada uma entrada no arquivo FOXUSER que salva a configuração da janela Editar. Se você
emitir EDIT posteriormente, com o mesmo nome de preferência, a janela Editar retornará àquele
estado de preferência. Quando a janela Editar for fechada, o estado de preferência será atualizado.

Os nomes das preferências podem ter até 10 caracteres, têm que começar com uma letra ou um
caractere de sublinhado e podem conter qualquer combinação de letras, números e caracteres de
sublinhado.

Quando você conseguir estabelecer uma preferência, poderá impedir que ela seja alterada. Feche a
janela Editar, emita SET RESOURCE OFF, abra o arquivo FOXUSER como uma tabela e altere o
arquivo que contém a preferência para somente para leitura, mudando o valor do campo lógico
READONLY para verdadeiro (.T.).

Para obter maiores informações sobre o arquivo de recursos FOXUSER, consulte SET
RESOURCE.

REST Impede que o ponteiro do registro seja movido de sua posição atual para o topo da tabela.
Como padrão, EDIT posiciona o ponteiro do registro no topo da tabela.

SAVE Mantém ativa e visível (aberta) a janela Editar e qualquer de suas janelas de edição de texto
de campos Memo. Você pode, então, retornar para a janela Editar após percorrer outras janelas
abertas com o teclado ou mouse.

SAVE só pode ser acessado a partir de um programa. SAVE não tem efeito quando incluído com
EDIT na janela Comando, pois EDIT SAVE é sempre o padrão no modo interativo.

TIMEOUT nSegundos Especifica o tempo que uma janela Editar espera por entrada. A expressão
numérica nSegundos especifica quantos segundos podem se passar sem entrada antes que a janela
Editar se feche automaticamente.

TIMEOUT só pode ser acessado a partir de um programa; não tem efeito quando EDIT é emitido a
partir da janela Comando. No exemplo a seguir, a janela Editar será fechada se não houver entrada
em 10 segundos.

DEFINE WINDOW wEdit FROM 1,1 TO 24,40 ;


CLOSE ;
GROW ;
COLOR SCHEME 10
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
EDIT WINDOW wEdit ;
FIELDS phone :H = 'Número Telefone:' , ;
company :H = 'Empresa:' ;
TIMEOUT 10
RELEASE WINDOW wEdit

TITLE cTextoTitulo Substitui o nome ou alias padrão da tabela, exibido na barra de título da
janela Editar pelo título especificado com cTextoTitulo. Do contrário, o nome ou alias da tabela que
está sendo pesquisada aparece na barra de título.

Se você emitir EDIT WINDOW para colocar a janela Editar em uma janela definida pelo usuário, o
título da janela Editar substituirá o título da janela definida pelo usuário.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer
EDIT;
TITLE 'Minha Janela Editar' ;
FIELDS phone :H = 'Número Telefone' , ;
company :H = 'Empresa:'

VALID lExpressão3 Executa a validação no nível de registros na janela Editar. A cláusula VALID
só será executada se uma alteração for feita no registro e você mover o cursor para outro registro. A
cláusula VALID não será executada se forem feitas alterações somente em um campo Memo.

Se VALID retornar verdadeiro (.T.), você poderá mover o cursor para outro registro. Se VALID
retornar falso (.F.), o cursor permanecerá no campo atual e o Visual FoxPro exibirá uma mensagem
de erro. Você poderá exibir sua própria mensagem de erro quando VALID retornar falso, incluindo
a cláusula ERROR. A expressão de caracteres cTextoMensagem é exibida como mensagem de erro.
Se VALID retornar 0, o cursor permanecerá no campo atual e não será exibida uma mensagem de
erro.

A cláusula VALID não deve ser confundida com a opção de verificação (:V), que permite validação
dos campos.

:F Faz com que a cláusula VALID seja executada antes que o usuário mova o cursor para o
registro seguinte. Nesse caso, VALID será executada mesmo que o registro não seja alterado.

ERROR cTextoMensagem Especifica uma mensagem de erro que substitui o padrão do sistema e
cujo conteúdo é especificado por cTextoMensagem. O Visual FoxPro exibe sua mensagem de erro
quando VALID retorna falso (.F.).
WHEN lExpressão4 Avalia uma condição quando o usuário move o cursor para outro registro. Se
lExpressão4 retornar verdadeiro (.T.), o usuário poderá modificar o registro para onde foi movido.
Se lExpressão4 retornar falso (.F.) ou 0, o registro em que o usuário estiver passará a ser somente
para leitura e não poderá ser modificado.

A cláusula WHEN não será executada quando outra janela estiver ativada.

WIDTH nLarguraCampo Limita o número de caracteres exibidos para todos os campos em uma
partição da janela editar a nLarguraCampo. A inclusão da cláusula WIDTH não altera o tamanho
dos campos na tabela em si, apenas a forma de exibição dos campos na janela Editar. Se uma
largura tiver sido especificada para um único campo com a cláusula FIELDS, ela substituirá a
largura especificada com a cláusula WIDTH para aquele campo.

WINDOW NomeJanela1 Especifica uma janela definida pelo usuário cujas características são
assumidas pela janela Editar. Por exemplo, se a janela definida pelo usuário for criada com a
cláusula FLOAT, a janela Editar poderá ser movida. A janela especificada não precisa estar ativa ou
visível, mas precisa estar definida.

IN [WINDOW] NomeJanela2 Especifica a janela pai NomeJanela2 na qual a janela Editar é


aberta. A janela Editar não assume as características da janela pai. Uma janela Editar ativada dentro
de uma janela pai não pode ser movida para fora desta. Se a janela pai for movida, a janela Editar
será movida junto com ela.

Para acessar a janela Editar, a janela pai tem que ser definida como DEFINE WINDOW e estar
ativa e visível.

IN SCREEN Posiciona uma janela Editar de forma explícita na janela principal do Visual FoxPro
quando uma janela definida pelo usuário está ativa.

COLOR SCHEME nNúmeroEsquema Especifica o número de um esquema de cores utilizado para


as cores da janela Editar. No Visual FoxPro, a janela Editar assume o esquema de cores definido
utilizando o Painel de controle de cores.

Comentários

EDIT possibilita a edição da tabela selecionada em uma janela. EDIT funciona de forma idêntica a
CHANGE.

Se você pressionar ESC para sair da janela Editar, as alterações feitas no último campo modificado
são descartadas. No entanto, se você mover outro registro após modificar um campo, as alterações
feitas no campo serão salvas.

Em um programa, utilize DEACTIVATE WINDOW para salvar suas alterações e fechar uma janela
Editar. Inclua o nome da janela Editar em DEACTIVATE WINDOW. Para obter maiores
informações sobre os nomes da janela Editar, consulte WTITLE( ).

Suporte SET SKIP

SET SKIP permite que você estabeleça um relacionamento um-para-n entre duas tabelas (veja o
exemplo). Para cada registro da tabela pai, podem existir diversos registros relacionados na tabela
filho. Se você criar um relacionamento um-para-n, poderá utilizar EDIT para visualizar registros
das tabelas pai e filho.

O registro pai aparece uma vez, juntamente com o primeiro registro correspondente da tabela filho.
Qualquer registro correspondente subseqüente é exibido nas linhas que vêm após o registro pai e o
primeiro registro filho correspondente. No FoxPro para MS-DOS, blocos sombreados são exibidos
em qualquer coluna que contenha informações da tabela pai além do primeiro registro
correspondente. No Visual FoxPro, caractere de preenchimento para informações pai repetidas
depende da atual fonte da janela Editar.

Para obter maiores informações, consulte SET SKIP.

Suporte COL( ) e ROW( )

Utilize COL( ) e ROW( ) para retornar a linha da tela e posição da coluna em que se encontra o
cursor em uma janela Editar. Se uma janela Editar estiver aberta na janela principal do Visual
FoxPro, a posição do cursor retornada será relativa à janela principal do Visual FoxPro, não à janela
Editar em si. Se uma janela Editar estiver aberta em uma janela definida pelo usuário, COL( ) e
ROW( ) retornarão a posição do cursor em relação à janela definida pelo usuário.

EJECT PAGE, comando

Envia um comando de avanço de página condicional para a impressora.

Sintaxe

EJECT PAGE
Comentários

Utilize EJECT PAGE para avançar o fluxo de saída. O avanço depende do valor de _PADVANCE
e se uma rotina ON PAGE está em andamento.

Se _PADVANCE estiver configurada para FORMFEED e uma rotina ON PAGE não estiver em
andamento, EJECT PAGE fará o seguinte:

· Enviará um comando de alimentação de página para a impressora, se ela estiver on-line.


· Enviará comandos de alimentação de linha, como foi determinado pelas variáveis de
memória do sistema _PLENGTH e _PLINENO, para a tela, um arquivo alternativo ou ambos.
· Incrementará _PAGENO em 1.
· Configurará _PLINENO para 0.
· Se a variável de memória do sistema _PADVANCE estiver configurada para INEFEEDS e
uma rotina ON PAGE estiver em andamento e _PLINENO for menor do que o número da linha da
página especificado na rotina ON PAGE, EJECT PAGE enviará para a impressora, para a janela
principal do Visual FoxPro ou para um arquivo alternativo (ou ambos) tantos comandos de
alimentação de linha quantos forem necessários para avançar até o início da página seguinte.

Se uma rotina ON PAGE não estiver em andamento ou se _PADVANCE estiver configurada para
LINEFEEDS e _PLINENO for maior do que o número da linha da página especificado com ON
PAGE, EJECT PAGE fará o seguinte:

· Enviará comandos de alimentação de linha, conforme determinado pelas variáveis de


memória do sistema _PLENGTH e _PLINENO, para a impressora, para a janela principal do Visual
FoxPro ou para um arquivo alternativo (ou ambos).
· Incrementará _PAGENO em 1.
· Configurará _PLINENO para 0.
EJECT, comando

Envia um comando de alimentação de página para a impressora.

Sintaxe

EJECT

Comentários

EJECT faz com que a impressora avance para o início da página seguinte. EJECT enviará um
comando de alimentação de página para a impressora se a variável de memória do sistema
_PADVANCE estiver configurada para FORMFEED. Se _PADVANCE estiver configurada para
LINEFEEDS, EJECT enviará comandos de alimentação de linha para avançar até o início da página
seguinte.

EJECT redefine os valores PCOL( ) e PROW( ) para a posição atual de coluna e de linha do
cabeçote de impressão da impressora, mas não afeta o valor das variáveis do sistema _PAGENO e
_PLINENO.

EJECT, exemplo do comando

No exemplo a seguir, os campos company e phone na tabela customer serão impressos. (Certifique-
se de que há uma impressora anexada e ligada para esse exemplo.) Quando o número de linhas
impressas for maios do que 62, a página será ejetada.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer

SET DEVICE TO PRINTER


SET PRINT ON
DO WHILE NOT EOF( )
@ PROW( )+1,10 SAY 'Company: ' + company
@ PROW( )+1,10 SAY 'Phone: ' + phone
@ PROW( )+1,1 SAY ''
IF PROW( ) > 62
EJECT
ENDIF
SKIP
ENDDO
SET PRINT OFF
SET DEVICE TO SCREEN
EMPTY( ), função

Determina se uma expressão retorna um valor vazio.

Sintaxe

EMPTY(eExpressão)

Tipos de Retorno

Lógico

Argumentos

eExpressão Especifica a expressão retornada pela função EMPTY( ).

A expressão incluída pode ser de caracteres, data, numérica ou lógica, bem como o nome de um
campo Memo ou geral de uma tabela aberta. EMPTY( ) retorna verdadeiro (.T.) quando as
expressões retornam um dos valores a seguir:

Tipo de expressão Retorna este valor

Caractere Seqüência vazia, espaços, tabulações, retornos de carro, alimentações de linha ou


qualquer combinação dos mesmos.
Numérica 0
Moeda 0
Flutuante 0
Número inteiro 0
Dupla 0
Data Vazio (e.g. CTOD(''))
DataHora Vazio (e.g. CTOT(''))
Lógica Falso (.F.)
Memo Vazio (sem conteúdo)
Geral Vazio (sem objeto OLE)
Figura Vazio (nenhuma figura)
EMPTY( ) não pode ser utilizada para determinar se uma referência a um objeto de variável de
memória é vazia. Por exemplo, uma variável de memória pode conter uma referência de objeto para
um formulário. Se o formulário for fechado a partir da caixa de menu Controle do formulário ou
com CLEAR WINDOWS, a variável de memória conterá o valor nulo.
O exemplo de programa a seguir mostra como utilizar TYPE( ) e ISNULL( ) para determinar se
uma referência a um objeto de variável de memória é válida.

goMyForm = CREATEOBJECT('Form')
WAIT WINDOW IIF(TYPE('goMyForm') = 'O' AND !ISNULL(goMyForm), ;
'goMyForm has valid object reference',;
'goMyForm does not have valid object reference')

Comentários

EMPTY( ) retornará verdadeiro (.T.) se a expressão eExpressão retornar um valor vazio; caso
contrário, EMPTY( ) retornará falso (.F.).

EMPTY( ), exemplo da função

O exemplo a seguir abre a tabela customer do banco de dados testdata. FOR ... ENDFOR é utilizado
para criar um loop em que EMPTY( ) é utilizado para determinar se TAG( ) retorna a seqüência
vazia. O nome de cada marca de índice estrutural é exibida com seu status de candidato.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer

FOR nCount = 1 TO 254


IF !EMPTY(TAG(nCount)) && Verifica se há uma seqüência vazia
? TAG(nCount) && Exibe o nome da marca
? CANDIDATE(nCount) && Exibe o status de candidato
ELSE
EXIT && Sai do loop quando mais nenhuma marca for encontrada
ENDIF
ENDFOR
EOF( ), função

Determina se o ponteiro do registro está posicionado após o último registro na tabela atual ou
especificada.

Sintaxe

EOF([nÁreaTrabalho | cAliasTabela])

Tipos de Retorno

Lógico

Argumentos

nÁreaTrabalho Especifica o número da Área de trabalho da tabela.

cAliasTabela Especifica o alias da tabela.

EOF( ) retornará falso (.F.) se uma tabela não estiver aberta na Área de trabalho que você
especificou.

Se você não especificar uma Área de trabalho ou alias, a tabela que estiver aberta na Área de
trabalho selecionada no momento será testada para o final da condição de tabela.

Comentários

EOF( ) retornará verdadeiro (.T.) se o ponteiro do registro alcançar o final do arquivo de tabela
(EOF). O final da tabela é alcançado quando o ponteiro do registro passa pelo último registro da
tabela. Por exemplo, quando os comandos FIND, LOCATE ou SEEK não têm êxito, o Visual
FoxPro move o ponteiro do registro para depois do último registro e EOF( ) retorna verdadeiro
(.T.). EOF( ) retornará falso (.F.) se o ponteiro do registro não estiver no final da tabela.

EOF( ), exemplo da função


O exemplo a seguir abre a tabela customer e lista o nome da empresa, uma página de cada vez até o
final do arquivo ser alcançado ou até você selecionar Cancelar.

CLOSE DATABASES
CLEAR
OPEN DATABASE (HOME() + "samples\data\testdata")
USE customer
GO TOP
local recCtr, btnValue
recCtr = 0
btnValue = 1
DO WHILE btnValue = 1 AND NOT EOF()
? "Empresa : " + company
recCtr = recCtr + 1
if (recCtr % 20) = 0 then
btnValue =MESSAGEBOX ("Click OK to continue, ;
Cancel to quit.",33)
clear
endif
Skip 1 && Move um registro para baixo
ENDDO
=MESSAGEBOX("Listing complete.",48)
ERASE, comando

Apaga um arquivo do disco.

Sintaxe

ERASE NomeArquivo | ? [RECYCLE]

Argumentos

NomeArquivo Especifica o arquivo a ser apagado. Inclua o caminho com o nome do arquivo se o
arquivo estiver em uma unidade de disco ou diretório diferente da unidade de disco ou diretório
atual.

NomeArquivo pode conter caracteres curinga como * e ?. Por exemplo, para excluir arquivos de
backup com ERASE *.BAK.

? Exibe a caixa de diálogo Excluir, a partir da qual você pode escolher um arquivo a ser apagado.

RECYCLE Especifica que o arquivo não seja imediatamente excluído do disco e seja colocado na
Lixeira do Windows 95.
Cuidado Atenção ao utilizar ERASE. Os arquivos apagados com esse comando não poderão ser
recuperados. Você não será avisado antes do arquivo ser apagado, mesmo que SET SAFETY esteja
ativado (ON).

ERASE, exemplo do comando

No exemplo a seguir, a estrutura de CUSTOMER.DBF e todos os registros nos quais o país é


Estados Unidos são copiados para uma tabela denominada backup. Os dados em backup são, então,
copiados para um arquivo texto, temp, que é aberto e, em seguida, excluído ao ser fechado.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela customer

COPY STRUCTURE TO backup


USE backup
APPEND FROM customer FOR country = 'USA'
COPY TO temp TYPE DELIMITED

WAIT WINDOW 'Press Esc to close and erase temp.txt' NOWAIT


MODIFY FILE temp.txt NOEDIT
ERASE temp.txt
? IIF(FILE('temp.txt'),'File not deleted','File deleted')
USE
ERASE backup.dbf

ERROR( ), função

Retorna o número do erro que disparou uma rotina ON ERROR.

Sintaxe

ERROR( )

Tipos de retorno
Numérico

Comentários

ERROR( ) retorna o número do erro mais recente. Uma rotina ON ERROR deve estar ativa para
que ERROR( ) retorne um valor diferente de 0.

Quando um erro é interceptado durante a execução de um programa, o tipo de erro pode ser
retornado por ERROR( ) em uma rotina ON ERROR. A mensagem de erro correspondente pode ser
retornada por MESSAGE( ).

O valor retornado por ERROR( ) é redefinido por RETURN ou RETRY.

Para obter uma listagem numérica de todos os números de erro e as mensagens de erro
correspondentes, consulte “Mensagens de erro” na seção “Referência técnica”.

ERROR( ), exemplo da função

O exemplo a seguir demonstra uma rotina de gerenciamento de erro simples que exibe uma
mensagem quando ocorre um erro.

CLEAR
ON ERROR DO errhand WITH ERROR( ), MESSAGE( )

*** The next line generates an error - there is no BRWSE command

BRWSE
ON ERROR
RETURN

*** Error handler ***

PROCEDURE errhand
PARAMETER errnum,message
? Message
? 'Error number: '+ ALLTRIM(STR(Errnum))
RETURN
ERROR, comando

Gera um erro do Visual FoxPro.

Sintaxe

ERROR nNúmeroErro
| nNúmeroErro, cTextoMensagem1
| [cTextoMensagem2]

Argumentos

nNúmeroErro Especifica o número do erro a ser gerado. A mensagem de erro padrão do Visual
FoxPro será utilizada quando um número de erro for especificado.

Para obter uma lista de mensagens de erro do Visual FoxPro e os respectivos números de erro,
consulte “Mensagens de erro”.

cTextoMensagem1 Especifica o texto a ser exibido em mensagens de erro que fornecem


informações adicionais sobre o erro. Por exemplo, se você fizer referência a uma variável de
memória que não existe, o Visual FoxPro fornecerá o nome da variável de memória na mensagem
de erro.

cTextoMensagem2 Especifica o texto exibido na mensagem de erro. Quando cTextoMensagem2


for especificado em vez de nNúmeroErro, o número de erro 1098 (erro definido pelo usuário) do
Visual FoxPro será gerado. Utilize um retorno de carro (CHR(13)) em cTextoMensagem2 para
mover uma parte da mensagem de erro para a próxima linha.

Comentários

ERROR pode ser utilizado para testar rotinas de gerenciamento de erro ou para exibir mensagens de
erro personalizadas.

Se uma rotina de gerenciamento de erro ON ERROR estiver ativa quando ERROR for emitido, o
Visual FoxPro executará a rotina ON ERROR. Se ocorrer um erro para um objeto, o evento Error
desse objeto será executado.

Se você emitir ERROR a partir da janela Comando e uma rotina de gerenciamento de erro ON
ERROR não estiver ativa, o Visual FoxPro exibirá a mensagem de erro. Se ERROR for emitido em
um programa e uma rotina de gerenciamento de erro ON ERROR não estiver ativa, o Visual FoxPro
exibirá a mensagem de erro e permitirá que você cancele ou suspenda o programa ou ignore o erro.
ERROR, exemplo do comando

O exemplo a seguir gera três mensagens de erro. A primeira mensagem de erro é “Variável não
encontrada” do Visual FoxPro (número de erro 12). A segunda mensagem de erro torna a gerar o
erro 12, incluindo o nome de variável Myvariable. A última mensagem de erro é definida pelo
usuário (número de erro 1089) “Minha mensagem de erro”.

ERROR 12 && Gera o erro do Visual FoxPro "Variável não encontrada"


ERROR 12, 'Myvariable' && Erro variável 'Myvariable' não encontrada
ERROR 'My error message' && Gera o erro 'Minha mensagem de erro'

EVALUATE( ), função

Avalia uma expressão de caracteres e retorna o resultado.

Sintaxe
EVALUATE(cExpressão)

Tipos de retorno

Caractere, Numérico, Moeda, Data, DataHora, Lógico ou Memo

Argumentos

cExpressão Especifica a expressão a ser avaliada. cExpressão pode ser uma seqüência de
caracteres literal ou uma expressão, uma variável de memória, um elemento de matriz ou campo de
qualquer tipo de dados válidos do Visual FoxPro incluídos entre delimitadores de seqüência de
caracteres. cExpressão não pode exceder 255 caracteres.

Sempre que possível, utilize EVALUATE( ) ou uma expressão de nome para trocar uma
substituição de macro utilizando &. EVALUATE e expressões de nome são executadas mais
rapidamente do que a substituição de macro.

Comentários

EVALUATE( ) é semelhante a TYPE( ), mas retorna o resultado de uma expressão em vez do tipo
da expressão. Uma expressão que contenha EVALUATE( ) não pode ser otimizada por Rushmore.
EXIT, comando

Sai de um loop DO WHILE, FOR ou SCAN.

Sintaxe

EXIT

Comentários

EXIT transfere o controle de dentro de um loop DO WHILE ... ENDDO, FOR ... ENDFOR ou
SCAN ... ENDSCAN para o comando imediatamente após ENDDO, ENDFOR ou ENDSCAN.

EXIT, exemplo do comando

No exemplo a seguir, o número de produtos em estoque com preço acima de 20 dólares é totalizado
no loop DO WHILE até que o final do arquivo (EOF) seja encontrado. O loop DO WHILE é
fechado e o total, exibido.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela Products
SET TALK OFF
gnStockTot = 0

DO WHILE .T. && Início do loop


IF EOF( )
EXIT
ENDIF
IF unit_price < 20
SKIP
LOOP
ENDIF
gnStockTot = gnStockTot + in_stock
SKIP
ENDDO && Fim do loop

CLEAR
? 'Total dos items em estoque com preço acima de 20 dólares:'
?? gnStockTot

EXP( ), função

Retorna o valor de e^x onde x é uma expressão numérica especificada.

Sintaxe

EXP(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica o expoente, x, na expressão exponencial e^x.

Comentários

O valor de e, a base de logaritmos naturais, é aproximadamente 2,71828. O número de casas


decimais retornadas por EXP( ) é especificado com SET DECIMALS.
EXP( ), exemplo da função

? EXP(0) && Exibe 1.00


? EXP(1) && Exibe 2.72

EXPORT, comando

Copia dados de uma tabela do Visual FoxPro para um arquivo em um formato diferente.

Sintaxe

EXPORT TO NomeArquivo
[TYPE] DIF | MOD | SYLK | WK1 | WKS | WR1 | WRK | XLS | XL5
[FIELDS ListaCampos]
[Escopo]
[FOR lExpressão1]
[WHILE lExpressão2]
[NOOPTIMIZE]
[AS nPáginaCódigo]

Argumentos

NomeArquivo Especifica o nome do arquivo para o qual o Visual FoxPro exporta dados. Se você
não incluir uma extensão com o nome do arquivo, será atribuída a extensão padrão para o tipo de
arquivo especificado.

TYPE Especifica o tipo de arquivo a ser criado. A palavra-chave TYPE é opcional, mas é preciso
especificar um dos tipos a seguir.

Tipo de arquivo Descrição

DIF Cada campo de uma tabela do Visual FoxPro torna-se um vetor (coluna) e cada registro
torna-se uma tupla (linha) em um arquivo DIF (Data Interchange Format) utilizado por VisiCalc.
Será atribuída uma extensão .DIF ao nome do novo arquivo se não for incluída uma extensão em
NomeArquivo.
MOD Utilize a cláusula MOD para exportar para um arquivo do Microsoft Multiplan versão 4.01
formato MOD. Será atribuída uma extensão .MOD se não for incluída uma extensão em
NomeArquivo.
SYLK Um formato de intercâmbio Symbolic Link (utilizado pelo Microsoft Multiplan) no qual
cada campo de uma tabela do Visual FoxPro torna-se uma coluna da planilha e cada registro torna-
se uma linha. Como padrão, nomes de arquivos SYLK não possuem extensão.
WK1 Inclua essa opção para criar uma planilha eletrônica do Lotus 1-2-3 a partir de uma tabela
do Visual FoxPro. É atribuída uma extensão .WK1 ao nome do arquivo de planilha eletrônica para
ser utilizado com o Lotus 1-2-3 revisão 2.x. Cada campo da tabela torna-se uma coluna na nova
planilha eletrônica e cada registro da tabela torna-se uma linha na planilha.
WKS Inclua essa opção para criar uma planilha eletrônica do Lotus 1-2-3 a partir de uma tabela
do Visual FoxPro. É atribuída uma extensão .WKS ao nome do arquivo de planilha eletrônica para
ser utilizado com o Lotus 1-2-3 revisão 1-A. Cada campo da tabela torna-se uma coluna na nova
planilha eletrônica e cada registro torna-se uma linha na planilha.
WR1 Inclua essa opção para criar uma planilha eletrônica do Lotus Symphony a partir de uma
tabela do Visual FoxPro. Uma extensão .WR1 é atribuída à planilha para ser utilizada com o
Symphony versão 1.01. Cada campo da tabela torna-se uma coluna na nova planilha eletrônica e
cada registro torna-se uma linha na planilha.
WRK Inclua essa opção para criar uma planilha eletrônica do Lotus Symphony a partir de uma
tabela do Visual FoxPro. Uma extensão WRK é atribuída ao nome do arquivo de planilha eletrônica
para ser utilizado com o Symphony versão 1.10. Cada campo da tabela torna-se uma coluna na nova
planilha eletrônica e cada registro torna-se uma linha na planilha.
XLS Inclua essa opção para criar uma planilha eletrônica do Microsoft Excel a partir de uma
tabela do Visual FoxPro. Cada campo da tabela selecionada torna-se uma coluna da planilha
eletrônica e cada registro torna-se uma linha. Será atribuída uma extensão de nome de arquivo .XLS
ao último arquivo de planilha criado, a não ser que você especifique uma extensão diferente.
XL5 Inclua essa opção para criar um arquivo de planilha do Microsoft Excel versão 5.0 a partir
de uma tabela do Visual FoxPro. Cada campo da tabela selecionada torna-se uma coluna na planilha
eletrônica e cada registro torna-se uma linha. Será atribuída uma extensão .XLS à nova planilha se
você não incluir uma extensão de arquivo.

FIELDS ListaCampos Especifica os campos copiados para o novo arquivo. Se você omitir a
cláusula FIELDS, todos os campos serão copiados para o novo arquivo. Campos Memo e Geral não
são copiados para o novo arquivo, mesmo que seus nomes estejam incluídos na lista de campos.
Escopo Especifica um intervalo de registros a serem copiados para o novo arquivo. Escopo
Especifica um intervalo de registros a serem copiados para o novo arquivo. Apenas os registros
que estejam no intervalo são copiados para o novo arquivo. As cláusulas de escopo são: ALL,
NEXT nRegistros, RECORD nNúmeroRegistro e REST.

Para obter maiores informações sobre cláusulas de escopo, consulte Cláusulas de escopo
. Os comandos que incluem Escopo operam somente na tabela da Área de trabalho ativa.
O escopo padrão para EXPORT são todos os registros.

FOR lExpressão1 Especifica que somente os registros que satisfazem à condição lógica
lExpressão1 são copiados para o novo arquivo. Isso permite extrair os registros não desejados.

Um comando EXPORT ... FOR lExpressão1 terá otimização Rushmore se a lExpressão1 for uma
expressão otimizável. Para obter um melhor desempenho, utilize uma expressão otimizável na
cláusula FOR..
Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia
Rushmore”, no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor
.

WHILE lExpressão2 Especifica uma condição de acordo com a qual os registros são copiados para
o novo arquivo enquanto a expressão lógica lExpressão2 retornar um valor verdadeiro (.T.).
NOOPTIMIZE Desativa a otimização Rushmore de EXPORT.

Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia


Rushmore”, no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

AS nPáginaCódigo Especifica a página de código do arquivo criada por EXPORT. O Visual


FoxPro copia o conteúdo da tabela atualmente selecionada e, à medida que copia os dados,
converte-os automaticamente na página de código especificada para o novo arquivo. Se possível, o
Visual FoxPro marcará o arquivo recém-criado com a página de código especificada.

Caso você especifique um valor para nPáginaCódigo que não seja suportado, o Visual FoxPro irá
gerar uma mensagem de erro. É possível utilizar GETCP( ) para nPáginaCódigo a fim de exibir a
caixa de diálogo Página de código, que permite especificar uma página de código para o arquivo
criado pelo Visual FoxPro.
Caso AS nPáginaCódigo for omitida, não ocorrerá a conversão de página de código. Se possível, o
Visual FoxPro marcará o arquivo recém-criado com a página de código da tabela da qual os dados
são copiados.

Se nPáginaCódigo for 0, não ocorrerá conversão de página e o arquivo recém-criado não será
marcado com uma página de código.
Comentários

Utilize EXPORT para empregar os dados do Visual FoxPro em outros pacotes de software.
Se a tabela da qual você está exportando estiver indexada, o novo arquivo será criado na ordem
indexada.

FCHSIZE( ), função

Altera o tamanho de um arquivo aberto com uma função de arquivo de nível inferior.

Sintaxe

FCHSIZE(nIdentificadorArquivo, nNovoTamanhoArquivo)

Tipos de retorno

Numérico

Argumentos

nIdentificadorArquivo Especifica o identificador do arquivo cujo tamanho você deseja alterar. O


identificador de arquivo é retornado por FOPEN( ) quando você abre o arquivo ou por FCREATE( )
quando você cria o arquivo. Caso um arquivo seja aberto com FOPEN( ), ele deve ser aberto com
permissão para gravação ou para leitura e gravação para que o seu tamanho possa ser alterado.
nNovoTamanhoArquivo Especifica o novo tamanho do arquivo em bytes. Se
nNovoTamanhoArquivo for menor do que o tamanho do arquivo original, o arquivo será truncado.
Se nNovoTamanhoArquivo for maior do que o tamanho do arquivo original, o tamanho do arquivo
será aumentado.

Comentários

Utilize a função FCHSIZE( ) para aumentar o tamanho do arquivo ou para truncá-lo após um byte
especificado.

Quando aumenta-se o tamanho de um arquivo, o Visual FoxPro aloca setores para este arquivo na
unidade em que ele está aberto. Visto que FCHSIZE( ) não inicializa o novo espaço do arquivo, este
espaço poderá conter dados anteriores. Certifique-se de gerenciar o novo espaço do arquivo.

É retornado o tamanho final do arquivo em bytes. O Visual FoxPro retornará –1 caso FCHSIZE( )
não consiga alterar o tamanho do arquivo se, por exemplo, for especificado um identificador de
arquivo inválido por causa de espaço insuficiente no disco ou se o arquivo for somente para leitura.

Dica Pode-se utilizar esta função para truncar um arquivo para o comprimento 0.

FCLOSE( ), função

Descarrega e fecha um arquivo ou uma porta de comunicação aberta com uma função de arquivo de
nível inferior.

Sintaxe

FCLOSE(nIdentificadorArquivo)
Tipos de retorno

Lógico

Argumentos

nIdentificadorArquivo Especifica o identificador do arquivo de nível inferior a ser fechado. O


identificador de arquivo numérico é retornado quando você cria o arquivo com FCREATE( ) ou
abre o arquivo com FOPEN( ).

Comentários

Caso o fechamento do arquivo seja bem-sucedido, FCLOSE( ) retornará verdadeiro (.T.) e liberará
o identificador de arquivo. Caso não seja possível fechar o arquivo, FCLOSE( ) retornará falso (.F.).

A função CLOSE ALL também fecha arquivos de nível inferior.


FCOUNT( ), função

Retorna o número de campos em uma tabela.

Sintaxe

FCOUNT([nÁreaTrabalho| cAliasTabela])

Tipos de retorno

Numérico

Argumentos

nÁreaTrabalho Especifica a Área de trabalho da tabela para a qual FCOUNT( ) retorna o número
de campos.

A função FCOUNT( ) retornará 0 caso não esteja aberta nenhuma tabela na Área de trabalho
especificada.

cAliasTabela Especifica o alias da tabela para a qual FCOUNT( ) retorna o número de campos.

O Visual FoxPro gerará uma mensagem de erro se você especificar um alias de tabela inexistente.

Comentários

Se você omitir os argumentos opcionais, FCOUNT( ) retornará o número de campos da tabela


aberta na Área de trabalho atualmente selecionada.

FCOUNT( ), exemplo da função

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer
SELECT 0
USE employee && Abre a tabela employee

CLEAR
? FCOUNT('CUSTOMER') && Exibe 13, número de campos na tabela Customer
? FCOUNT('EMPLOYEE') && Exibe 22, número de campos na tabela Employee

FCREATE( ), função

Cria e abre um arquivo de nível inferior.

Sintaxe

FCREATE(cNomeArquivo [, nAtributoArquivo])

Tipos de retorno

Numérico

Argumentos

cNomeArquivo Especifica o nome do arquivo a ser criado. Pode-se incluir um designador de


unidade e um caminho com o nome do arquivo. Caso não seja incluído um designador de unidade
ou um caminho, o arquivo será criado no diretório padrão.

Observação O Visual FoxPro não reconhecerá um nome de caminho de maneira apropriada se um


nome de diretório ou disco contiver um ponto de exclamação (!).

nAtributoArquivo Especifica os atributos do arquivo criado. A tabela a seguir lista os atributos de


arquivo que podem ser especificados.

nAtributoArquivo Atributos de arquivo


0 (Padrão) Leitura e gravação
1 Somente para leitura
2 Oculto
3 Somente para leitura/Oculto
4 Sistema
5 Somente para leitura /Sistema
6 Sistema/Oculto
7 Somente para leitura /Oculto/Sistema

Observe que um arquivo criado com um nAtributoArquivo diferente de 0 não poderá ser gravado
com FPUTS( ) ou FWRITE( ) até que o arquivo seja fechado e aberto novamente.
Utilize DISPLAY STATUS ou LIST STATUS para exibir ou imprimir informações sobre arquivos
criados e abertos com FCREATE( ). DISPLAY STATUS e LIST STATUS fornecem as
informações a seguir sobre cada arquivo aberto ou criado com uma função de arquivo de nível
inferior:

· A unidade, o diretório e o nome do arquivo


· O número do identificador de arquivo
· A posição do ponteiro do arquivo
· Os atributos de leitura e gravação

Comentários

Caso já exista um arquivo com o nome especificado, ele será sobrescrito sem aviso.

A função FCREATE( ) atribui ao arquivo um número de identificador de arquivo que pode ser
utilizado para identificá-lo em outras funções de arquivo de nível inferior do Visual FoxPro.
FCREATE( ) retorna o número do identificador de arquivo quando o arquivo é criado ou retorna –1
caso não seja possível criar o arquivo.

Dica Atribua o número do identificador de arquivo a uma variável de memória para que você
possa acessar o arquivo pela variável de memória em outras funções de arquivo de nível inferior.

Você não pode abrir uma porta de comunicação com FCREATE( ). Para tal, utilize FOPEN( ).

FCREATE( ), exemplo da função

IF FILE('errors.txt') && O arquivo existe?


gnErrFile = FOPEN('errors.txt',12) && Caso exista, abra leitura e gravação
ELSE
gnErrFile = FCREATE('errors.txt') && Caso contrário, crie um
ENDIF
IF gnErrFile < 0 && Verifica erros no arquivo de abertura
WAIT 'não é possível abrir ou criar um arquivo de saída' WINDOW NOWAIT
ELSE && Se não houver erros, grave no arquivo
=FWRITE(gnErrFile , 'Informação de erro a ser gravada aqui')
ENDIF
=FCLOSE(gnErrFile ) && Fecha o arquivo

IF gnErrFile > 0
MODIFY FILE errors.txt NOWAIT && Abre o arquivo na janela de edição
ENDIF

FDATE( ), função

Retorna a data da última modificação de um arquivo.


Sintaxe

FDATE(cNomeArquivo)

Tipos de retorno

Data

Argumentos

cNomeArquivo Especifica o nome do arquivo cuja data da última modificação é retornada por
FDATE( ). cNomeArquivo pode incluir um caminho com o nome do arquivo. Se não houver
nenhum caminho incluído com o nome do arquivo, o Visual FoxPro irá procurar o arquivo no
diretório e pasta padrão e nos diretórios e pastas especificados por SET PATH.

Comentários

A data retornada por FDATE( ) é atribuída ao arquivo pelo sistema operacional. O formato do valor
retornado por FDATE( ) é determinado pelas definições atuais de SET DATE, SET MARK e SET
CENTURY.

Utilize LUPDATE( ) para determinar a data da última modificação para uma tabela aberta.

FDATE( ), exemplo da função

O exemplo a seguir utiliza FDATE( ) para exibir a data da última modificação em FOXUSER.DBF,
arquivo de recursos do Visual FoxPro.

? FDATE('FOXUSER.DBF') && Exibe a data da última modificação


FEOF( ), função

Determina se o ponteiro do arquivo está ou não posicionado no fim de um arquivo.

Sintaxe

FEOF(nIdentificadorArquivo)

Tipos de retorno

Lógico

Argumentos

nIdentificadorArquivo Especifica o número do identificador do arquivo no qual deve ser verificada


a condição de fim de arquivo. FEOF( ) sempre retornará verdadeiro (.T.) se você especificar um
número de identificador de arquivo de uma porta de comunicação aberta com FOPEN( ).

Comentários

Esta função de arquivo de nível inferior retornará verdadeiro (.T.) se o ponteiro do arquivo estiver
posicionado no fim de um arquivo aberto com uma função de arquivo de nível inferior. FEOF( )
retornará falso (.F.) se o ponteiro não estiver no fim do arquivo.

FEOF( ), exemplo da função

*** Abre o arquivo test.txt ***

gnFileHandle = FOPEN('test.txt')

*** Move o ponteiro do arquivo para BOF ***

gnPosition = FSEEK(gnFileHandle, 0)

*** Se o ponteiro do arquivo estiver em BOF e EOF, o arquivo estará vazio ***
*** Caso contrário o arquivo deve conter alguma coisa ***
IF FEOF(gnFileHandle)
WAIT WINDOW 'Este arquivo está vazio!' NOWAIT
ELSE
WAIT WINDOW 'Este arquivo contém alguma coisa!' NOWAIT
ENDIF
= FCLOSE(gnFileHandle)

FERROR( ), função

Retorna um número correspondente ao erro na função de arquivo de nível inferior mais recente.

Sintaxe

FERROR( )

Tipos de retorno

Numérico

Comentários

A função FERROR( ) retornará 0 caso a função de arquivo de nível inferior seja executada com
sucesso. Um valor positivo será retornado caso a execução da função seja mal-sucedida. A tabela a
seguir lista o número de cada erro retornado por FERROR( ) e a causa do erro.

Número do erro Causa do erro

2 Arquivo não localizado


4 Número excessivo de arquivos abertos (identificadores de arquivo esgotados)
5 Acesso negado
6 Identificador de arquivo inválido fornecido
8 Memória esgotada
25 Erro na pesquisa (impossível pesquisar antes do início de um arquivo)
29 Disco cheio
31 Erro na abertura do arquivo

FFLUSH( ), função

Descarrega no disco um arquivo aberto com uma função de nível inferior.

Sintaxe

FFLUSH(nIdentificadorArquivo)

Tipos de retorno

Lógico

Argumentos
nIdentificadorArquivo Especifica o identificador do arquivo a ser descarregado no disco.

Comentários

A função FFLUSH( ) também libera a memória utilizada pelo buffer do arquivo.

A função FLUSH é diferente de FFLUSH( ). FLUSH não opera em arquivos de nível inferior, mas
em tabelas e índices.

FFLUSH( ), exemplo da função

O exemplo a seguir abre e grava um arquivo denominado INPUT.DAT. Depois de gravar as


primeiras duas seqüências, o programa descarrega os buffers para garantir que as seqüências sejam
gravadas no disco. Em seguida, ele grava as duas próximas seqüências, descarrega os buffers
novamente e fecha o arquivo.

IF FILE('input.dat')
gnTestFile = FOPEN('input.dat',2)
ELSE
gnTestFile = FCREATE('input.dat')
ENDIF
gnIOBytes = FWRITE(gnTestFile,'Testar saída')
gnIOBytes = FWRITE(gnTestFile,' para arquivo E/S de nível inferior')
glFlushOk = FFLUSH(gnTestFile)
gnIOBytes = FWRITE(gnTestFile,'Testar saída2')
gnIOBytes = FWRITE(gnTestFile,' para arquivo E/S de nível inferior')
glFlushOk = FFLUSH(gnTestFile)
glCloseOk = FCLOSE(gnTestFile)
MODIFY FILE input.dat NOWAIT NOEDIT

FGETS( ), função
Retorna uma série de bytes de um arquivo ou de uma porta de comunicação aberta com uma função
de arquivo de nível inferior até localizar um retorno de carro.

Sintaxe

FGETS(nIdentificadorArquivo [, nBytes])

Tipos de retorno

Caractere

Argumentos

nIdentificadorArquivo Especifica o identificador de arquivo numérico da porta de comunicação ou


do arquivo a partir do qual FGETS( ) retorna dados.

nBytes Especifica o número de bytes que FGETS( ) retorna. FGETS( ) retornará nBytes bytes, a
menos que antes seja localizado um retorno de carro. FGETS( ) retornará os dados entre a posição
inicial do ponteiro do arquivo e o retorno de carro, caso seja localizado um retorno de carro dentro
dos nBytes bytes.

Se você omitir nBytes, FGETS( ) retornará um máximo de 254 bytes como padrão.

Comentários

Você pode ler linha por linha de um arquivo emitindo-se uma série de FGETS( ).

A função FGETS( ) retorna uma série de bytes como uma seqüência de caracteres. O retorno dos
dados é feito a partir da posição atual do ponteiro do arquivo e continua até localizar um retorno de
carro. Em seguida, o ponteiro do arquivo é posicionado no byte seguinte ao retorno de carro. O
retorno de carro não é retornado como parte da seqüência e as alimentações de linha são ignoradas.

FGETS( ), exemplo da função

*** TEST.TXT deve existir ***


STORE FOPEN('test.txt') TO gnFileHandle && Abre o arquivo
STORE FSEEK(gnFileHandle, 0, 2) TO gnEnd && Move o ponteiro a EOF
STORE FSEEK(gnFileHandle, 0) TO gnTop && Move o ponteiro a BOF
IF gnEnd <= 0 && O arquivo está vazio?
WAIT WINDOW 'Este arquivo está vazio!' NOWAIT
ELSE && Caso não esteja
gcString = FGETS(gnFileHandle, gnEnd) && Armazene o conteúdo
? gcString
ENDIF
= FCLOSE(gnFileHandle) && Fecha o arquivo
FIELD( ), função

Retorna o nome de um campo de uma tabela ao qual é feita referência pelo número.

Sintaxe

FIELD(nNúmeroCampo [, nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Caractere

Argumentos

nNúmeroCampo Especifica o número do campo. Caso nNúmeroCampo seja 1, será retornado o


nome do primeiro campo da tabela; caso nNúmeroCampo seja 2, será retornado o nome do segundo
campo, e assim sucessivamente. A seqüência vazia será retornada se nNúmeroCampo for maior do
que o número de campos. Os nomes dos campos são retornados em letras maiúsculas.

nÁreaTrabalho Especifica a Área de trabalho da tabela para a qual FIELD( ) retorna os nomes dos
campos.

A função FIELD( ) retornará a seqüência vazia caso não esteja aberta nenhuma tabela na Área de
trabalho especificada.

cAliasTabela Especifica o alias da tabela para a qual FIELD( ) retorna os nomes dos campos.

O Visual FoxPro gerará uma mensagem de erro se você especificar um alias de tabela inexistente.

Comentários

Se você omitir os argumentos opcionais, FIELD( ) retornará os nomes dos campos da tabela aberta
na Área de trabalho atualmente selecionada.

FIELD( ), exemplo da função

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer
CLEAR
FOR gnCount = 1 TO FCOUNT( ) && Realiza um loop para números de campos
? FIELD(gnCount) && Exibe cada campo
NEXT
?
? 'Número de campos: ' + ALLTRIM(STR(gnCount -1))

FILE( ), função

Retorna verdadeiro (.T.), se o arquivo especificado for encontrado em disco.

Sintaxe

FILE(cNomeArquivo)

Tipos de retorno

Lógico

Argumentos

cNomeArquivo Especifica o nome do arquivo a ser localizado. cNomeArquivo deve incluir a


extensão do arquivo. O Visual FoxPro procura no diretório ou pasta padrão pelo arquivo. Se o
arquivo não for encontrado nestes locais, o Visual FoxPro procura pelo próprio caminho
estabelecido com SET PATH.

Você pode incluir um caminho ao nome do arquivo para procurar por um arquivo em um diretório
ou em uma unidade diferentes dos atuais.

Comentários

Utilize FILE( ) para localizar um arquivo em disco. FILE( ) retorna (.T.) se o arquivo puder ser
localizado; caso contrário FILE( ) retorna (.F.) falso.
FILE( ), exemplo da função

O exemplo a seguir exibe uma mensagem indicando se o arquivo de recursos do Visual FoxPro está
presente na pasta ou diretório de inicialização do Visual FoxPro.

SET PATH TO HOME( )


CLEAR
IF FILE('foxuser.dbf')
WAIT WINDOW 'Arquivo de recursos do Visual FoxPro presente'
ELSE
WAIT WINDOW 'Arquivo de recursos do Visual FoxPro não presente'
ENDIF

FILTER( ), função

Retorna a expressão de filtragem de tabela especificada em SET FILTER.

Sintaxe

FILTER([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Caractere

Argumentos

nÁreaTrabalho Especifica a Área de trabalho da tabela para a qual FILTER( ) retorna a expressão
de filtragem.

FILTER( ) retornará a seqüência vazia caso nenhuma tabela esteja aberta na Área de trabalho
especificada.
cAliasTabela Especifica o alias da tabela para a qual FILTER( ) retorna a expressão de filtragem.

O Visual FoxPro irá gerar uma mensagem de erro se você especificar um alias de tabela inexistente.

Comentários

Se você omitir os argumentos opcionais, FILTER( ) retornará a expressão de filtragem da tabela


aberta na Área de trabalho atualmente selecionada. Para obter maiores informações sobre como
criar um filtro, consulte ” SET FILTER”.

FILTER( ), exemplo da função

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer
SET TALK ON
SET FILTER TO SUBSTR(cust_id,1) = 'B'

CLEAR
? FILTER( ) && Exibe a expressão de filtro
STORE FILTER('customer') TO gcOldFilter && Grava a expressão de filtro
SET FILTER TO country = 'USA'
? FILTER( ) && Exibe a expressão de filtro
SET FILTER TO &gcOldFilter && Restaura a expressão de filtro
? FILTER( ) && Exibe a expressão de filtro

LIST FIELDS cust_id, contact && Demonstra a condição de filtro

FKLABEL( ), função

Retorna o nome da tecla de função (F1, F2, F3 ...) a partir do número da tecla de função
correspondente.

Sintaxe

FKLABEL(nNúmeroTeclaFunção)
Tipos de retorno

Caractere

Argumentos

nNúmeroTeclaFunção Especifica o número da tecla de função. O valor de nNúmeroTeclaFunção


deve estar entre 0 e o número de teclas de função menos 1. FKLABEL( ) retornará a seqüência
vazia se nNúmeroTeclaFunção for maior do que o número de teclas de função menos 1. O número
de teclas de função pode ser determinado com FKMAX( ).

Comentários

Pode-se programar teclas de função com SET FUNCTION.

O valor retornado por FKLABEL( ) é afetado por SET COMPATIBLE. Quando COMPATIBLE
for definido para FOXPLUS (padrão), FKLABEL( ) retorna as teclas de função. Quando
COMPATIBLE for definido para DB4, FKLABEL( ) retorna a tecla de função e as combinações de
teclas de função (F1, CTRL+F1, SHIFT+F1, F2, CTRL+F2, SHIFT+F2, ...).

FKLABEL( ), exemplo da função

CLEAR
SET COMPATIBLE OFF
? 'COMPATIBLE OFF'
?
FOR nCount = 1 TO FKMAX( ) && Loop para No de teclas de função
? FKLABEL(nCount) && Exibe as teclas programáveis de função
ENDFOR
SET COMPATIBLE ON

?
? 'COMPATIBLE ON'
?
FOR nCount = 1 TO FKMAX( ) && Loop para No de teclas de função
? FKLABEL(nCount) && Exibe as teclas programáveis de função
ENDFOR
FKMAX( ), função

Retorna o número de teclas de função ou combinações de teclas de função programáveis em seu


teclado.

Sintaxe

FKMAX( )

Tipos de retorno

Numérico

Comentários

O valor retornado por FKMAX( ) é afetado por SET COMPATIBLE. Quando SET COMPATIBLE
é definido para FOXPLUS (padrão), FKMAX( ) retorna o número de teclas de função. Quando SET
COMPATIBLE é definido para DB4, FKMAX( ) retorna o número de teclas de função e
combinações de teclas de função (F1, CTRL+F1, SHIFT+F1, F2, CTRL+F2, SHIFT+F2, ...).

FKMAX( ), exemplo da função

CLEAR
SET COMPATIBLE OFF
? 'COMPATIBLE OFF'
?
FOR nCount = 1 TO FKMAX( ) && Loop para No de teclas de função
? FKLABEL(nCount) && Exibe as teclas programáveis de função
ENDFOR
SET COMPATIBLE ON

?
? 'COMPATIBLE ON'
?
FOR nCount = 1 TO FKMAX( ) && Loop para No de teclas de função
? FKLABEL(nCount) && Exibe as teclas programáveis de função
ENDFOR
FLOCK ( ), função

Tenta bloquear a tabela atual ou a tabela especificada.

Sintaxe

FLOCK([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Lógico

Argumentos

nÁreaTrabalho Especifica a área de trabalho da tabela que FLOCK( ) tenta bloquear.

A função FLOCK( ) retornará falso (.F.) caso nenhuma tabela esteja aberta na área de trabalho
especificada.

cAliasTabela Especifica o alias da tabela que FLOCK( ) tenta bloquear.

O Visual FoxPro irá gerar uma mensagem de erro se você especificar um alias de tabela
inexistente.

Comentários

A função FLOCK( ) retornará verdadeiro (.T.) se o bloqueio da tabela for bem-sucedido e retornará
falso (.F.) se a tabela ou um registro da tabela já estiver bloqueado por outro usuário.

Se você omitir os argumentos opcionais, FLOCK( ) tentará bloquear a tabela aberta na área de
trabalho atualmente selecionada.
Observação Caso a função FLOCK( ) não consiga bloquear uma tabela, ela retornará falso (.F.) e
não irá gerar um erro. Como resultado, não será possível utilizar FLOCK( ) para disparar uma rotina
ON ERROR.

Quando uma tabela está bloqueada, o usuário que a bloqueou tem acesso a ela para leitura e
gravação. Os outros usuários da rede têm acesso à tabela somente para leitura. Para obter
informações sobre como bloquear uma tabela e impedir que outros usuários tenham acesso a ela,
consulte SET EXCLUSIVE e USE.

A tabela permanece bloqueada até que o usuário altere isto. É possível desbloquear a tabela
emitindo UNLOCK, fechando-a ou saindo do Visual FoxPro. As tabelas podem ser fechadas com
USE, CLEAR ALL ou CLOSE DATABASES.

Como padrão, a função, FLOCK( ) tenta bloquear a tabela uma vez. Utilize SET REPROCESS para
repetir automaticamente o bloqueio de uma tabela caso a primeira tentativa falhe. SET
REPROCESS determina o número de tentativas de bloqueio ou o período de tempo durante o qual
são feitas essas tentativas, caso a inicial seja malsucedida. Para obter maiores informações, consulte
SET REPROCESS.

É possível estabelecer relações entre duas ou mais tabelas com SET RELATION. A colocação de
um bloqueio de arquivo em uma tabela relacionada a uma ou mais tabelas não coloca um bloqueio
de arquivo nas tabelas relacionadas. Você deve colocar os bloqueios nelas e removê-los
explicitamente.

Para obter maiores informações sobre bloqueio de registro e arquivo e sobre como compartilhar
tabelas em uma rede, consulte o capítulo 17, “Programando para acesso compartilhado,” no Guia do
desenvolvedor.

FLOCK( ), exemplo de função

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE produtos && Abre tabelas de produtos
SET REPROCESS TO 3 SECONDS
SELECT * FROM produtos INTO TABLE novoproduto

IF FLOCK( )
*** Inicilização de produto novo ***
REPLACE ALL in_stock WITH 0.00
REPLACE ALL on_order WITH 0.00
WAIT 'Inicialização completa' WINDOW NOWAIT
ELSE
*** Arquivos estão bloqueados, avisar usuário ***
WAIT WINDOW 'Impossível abrir arquivos de produtos; tente novamente mais tarde!'
NOWAIT

ENDIF
BROWSE FIELDS in_stock, on_order && Exibe tabela newprods
USE
ERASE novoprods.dbf

FLOOR( ), função

Retorna o número inteiro mais próximo que seja menor ou igual à expressão numérica especificada.

Sintaxe

FLOOR(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica a expressão numérica para a qual FLOOR( ) retorna o número inteiro mais
próximo que seja menor ou igual à expressão numérica.

FLOOR( ), exemplo de função

STORE 10.9 TO gnNumber1


STORE -10.1 TO gnNumber2

CLEAR
? FLOOR(gnNumber1) && Exibe 10
? FLOOR(gnNumber2) && Exibe -11
? FLOOR(10.0) && Exibe 10
? FLOOR(-10.0) && Exibe -10
FLUSH, comando

Salva no disco as modificações feitas em um índice ou em uma tabela.

Sintaxe

FLUSH
Comentários

O comando FLUSH assegura que as modificações feitas em todas as tabelas e índices abertos serão
salvas no disco.

O Visual FoxPro salva automaticamente as alterações no disco quando:

· Você fecha uma tabela com USE, CLOSE ALL ou CLOSE DATABASES. Apenas as
informações do arquivo ou arquivos fechados serão descarregadas no disco.
· Você desbloqueia um registro ou um arquivo. Apenas as informações do registro ou do
arquivo desbloqueado serão descarregadas no disco.

FONTMETRIC( ), função

Retorna os atributos das fontes do sistema operacional atualmente instaladas.

Sintaxe

FONTMETRIC(nAtributo [, cNomeFonte, nTamanhoFonte [, cEstiloFonte]])

Tipos de retorno

Numérico

Argumentos

nAtributo Determina atributo de fonte que FONTMETRIC( ) retorna. Se você omitir cNomeFonte,
nTamanhoFonte e cEstiloFonte, FONTMETRIC( ) retornará o atributo da fonte atual da janela de
saída ativa.

A tabela a seguir lista valores para nAtributo e os atributos de fonte correspondentes retornados.

NAtributo Atributo

1 Altura do caractere em pixels


2 Sinal ascendente de caractere (unidades acima da linha de base) em pixels
3 Sinal descendente de caractere (unidades abaixo da linha de base) em pixels
4 Espaços (entre linhas) em pixels
5 Espaços extras em pixels
6 Largura média do caractere em pixels
7 Largura máxima do caractere em pixels
8 Peso da fonte.
9 Itálico (0 =não, diferente de zero =sim)
10 Sublinhado (0 = não, diferente de zero = sim)
11 Riscado (0 = não, diferente de zero = sim)
12 Primeiro caractere definido na fonte
13 Último caractere definido na fonte
14 Caractere padrão (substituído por caracteres não contidos na fonte)
15 Caractere de quebra de texto.
16 Pitch e família
17 Conjunto de caracteres
18 Projeção(largura extra adicionada)
19 Aspecto horizontal para dispositivo de fonte
20 Aspecto vertical para dispositivo de fonte

* Estes atributos não estão disponíveis no Visual FoxPro para Macintosh e retornam sempre 0.
Para obter maiores informações sobre os valores numéricos retornados por FONTMETRIC( ),
consulte a função TEXTMETRIC no Guia de Referência do Programador do Microsoft Windows.

cNomeFonte Especifica o nome de uma fonte instalada.


nTamanhoFonte Especifica o tamanho em pontos de uma fonte especificada com cNomeFonte.
cEstiloFonte Especifica um código de estilo de fonte para a fonte especificada com cNomeFonte.
Se você omitir cEstiloFonte, FONTMETRIC( ) retornará o atributo do estilo de fonte Normal.

cEstiloFonte pode ser um caractere ou uma combinação de caracteres listados na tabela de estilos de
fonte abaixo. Por exemplo, a combinação BI especifica o estilo de fonte Negrito Itálico.

Caractere Estilo de fonte

B Negrito
I Itálico
N Normal
O Delineado
Q Opaco
S Sombreado
- Riscado
T Transparente
U Sublinhado
Comentários

A função FONTMETRIC( ) retorna atributos da fonte atual da janela de saída ativa. Pode-se
utilizar. WFONT( ) para determinar a fonte da janela atual.
Para obter maiores informações sobre como instalar ou remover fontes, consulte o capítulo “Painel
de Controle” no Guia do Usuário do Microsoft Windows.
FOPEN( ), função

Abre um arquivo ou porta de comunicação para uso com funções de arquivo de baixo nível.

Sintaxe

FOPEN(cNomeArquivo [, nAtributo])

Tipos de retorno

Numérico

Argumentos

cNomeArquivo Especifica o nome do arquivo ou porta de comunicação a ser aberta. Se


cNomeArquivo é um nome de arquivo, pode incluir um caminho para arquivos abertos nos
diretórios, pastas, unidades de disco ou volumes atualmente inexistentes no caminho de procura do
Visual FoxPro. Se o caminho não está incluído, o Visual FoxPro procura pelo arquivo nos locais
abaixo:

· Diretório ou pasta padrão


· Caminho estabelecido com SET PATH

Observação O Visual FoxPro poderá não reconhecer o caminho ou nome da propriedade se o disco
ou nome do diretório contiver um ponto de exclamação (!).

nAtributo Especifica privilégios de leitura e gravação ou um esquema de utilização de buffer para


o arquivo que você abriu. A tabela a seguir lista cada número incluído em nAtributo e os privilégios
de leitura e gravação do arquivo e esquema de utilização de buffer que ele estabelece.

nAtributo Privilégio de leitura e gravação Utilizando buffer/não utilizando buffer

0 (Padrão) Somente para leitura Utilizando buffer


1 Somente para gravação Utilizando buffer
2 Leitura e gravação Utilizando buffer
10 Somente para leitura Não utilizando buffer
11 Somente para gravação Não utilizando buffer
12 Leitura e gravação Não utilizando buffer

Se nAtributo não estiver incluído ou se nAtributo resultar em 0, o arquivo será aberto somente para
leitura e utilizará buffer. As portas de comunicação devem estar sempre abertas sem uso do buffer.
Observação O Visual FoxPro não reconhecerá apropriadamente um caminho se um nome de disco
ou diretório contiver um ponto de exclamação (!).

Comentários

Se FOPEN( ) conseguir abrir o arquivo ou a porta de comunicação, o número do identificador do


arquivo ou da porta será retornado. Caso contrário, FOPEN( ) retornará o valor –1.

Dica Atribua o número do identificador de arquivo a uma variável de memória para que você
possa acessar o arquivo ou a porta de comunicação pela variável de memória em outras funções de
arquivo de baixo nível.

As informações abaixo sobre arquivos abertos com FOPEN( ) podem ser exibidas ou enviadas para
uma impressora utilizando-se DISPLAY STATUS ou LIST STATUS.

· Unidade de disco e diretório, ou volume e pasta e nome de arquivo


· Número do identificador de arquivo
· Posição do ponteiro do arquivo
· Atributos de leitura e gravação

FOPEN( ), exemplo da função

IF FILE('errors.txt') && Existe o arquivo?


gnErrFile = FOPEN('errors.txt',12) && Caso sim, abrir leitura e gravação
ELSE
gnErrFile = FCREATE('errors.txt') && Caso não, criá-lo
ENDIF
IF gnErrFile < 0 && Verificar erros na abertura de arquivos
WAIT 'Impossível abrir ou criar arquivo de saída' WINDOW NOWAIT
ELSE && Caso não haja erro, gravar o arquivo
=FWRITE(gnErrFile, 'Informação de erro a ser gravada aqui')
ENDIF
=FCLOSE(gnErrFile) && Fechar arquivo

MODIFY FILE errors.txt NOWAIT && Abrir arquivo na janela editar


FOR ... ENDFOR, comando
Executa um conjunto de comandos, um determinado número de vezes.

Sintaxe

FOR Var = nValorInicial TO nValorFinal [STEP nIncremento]


Comandos
[EXIT]
[LOOP]
ENDFOR | NEXT

Argumentos

Var Especifica uma variável ou um elemento de matriz que atue como contador. Não é necessário
que a variável ou o elemento de matriz já exista antes da execução de FOR ... ENDFOR.

nValorInicial TO nValorFinal nValorInicial é o valor inicial do contador e nValorFinal é o valor


final do contador.

STEP nIncremento nIncremento é o valor incrementado ou decrementado do contador. Caso


nIncremento seja negativo, o contador será decrementado. Se você omitir STEP, o contador será
incrementado de 1.

Comandos Especifica os comando do Visual FoxPro a serem executados. Comandos pode incluir
qualquer número de comandos.

EXIT Transfere o controle do loop FOR ... ENDFOR para o comando logo depois de ENDFOR.
EXIT pode ser colocado em qualquer parte entre FOR e ENDFOR.

LOOP Retorna o controle diretamente para a cláusula FOR sem executar as instruções entre LOOP
e ENDFOR. O contador é incrementado ou decrementado como se ENDFOR tivesse sido atingido.
LOOP pode ser colocado em qualquer parte entre FOR e ENDFOR.

Comentários

Utiliza-se uma variável de memória ou um elemento de matriz como um contador para especificar
quantas vezes os comandos do Visual FoxPro dentro do loop FOR ... ENDFOR são executados.

Os comandos do Visual FoxPro depois de FOR são executados até ENDFOR ou NEXT ser
atingido. Em seguida, o contador NomeVarMem é incrementado do valor de nIncremento. Se você
omitir a cláusula STEP, o contador será incrementado em 1. Em seguida, o contador é comparado
ao nValorFinal. Se ele for menor ou igual ao nValorFinal, os comandos depois da cláusula FOR
serão executados novamente. Se for maior que o nValorFinal, o loop FOR ... ENDFOR será
abandonado e a execução do programa continuará com o primeiro comando depois de ENDFOR ou
NEXT.
Observação Os valores de nValorInicial, nValorFinal e nIncremento são, inicialmente, somente
para leitura. No entanto, uma alteração no valor do contador NomeVarMem dentro do loop afeta o
número de vezes que o loop é executado.

Se o valor de nIncremento for negativo e o valor inicial nValorInicial for maior que o valor final
nValorFinal, o contador será decrementado a cada execução do loop.

FOR ... ENDFOR, exemplos do comando

No exemplo 1, os números de 1 a 10 são exibidos.


P exemplo 2 utiliza variáveis de memória para valores os inicial, final e STEP para exibir tudo,
inclusive registros pares de 2 a 10 em customer.

* Exemplo 1
CLEAR
FOR gnCount = 1 TO 10
? gnCount
ENDFOR

* Example 2
SET TALK OFF
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre tabela Customer
STORE 2 TO gnI && Valor inicial
STORE 10 TO gnJ && Valor final
STORE 2 TO K && Valor Step
FOR gnCount = gnI TO gnJ STEP K
GOTO gnCount && Move o ponteiro do registro
DISPLAY company && Exibe o nome da empresa
ENDFOR

FOR EACH … ENDFOR, comando

Executa um conjunto de comandos para cada elemento em uma matriz ou coleção do Visual
FoxPro.

Sintaxe

FOR EACH Var IN Group


Comandos
[EXIT]
[LOOP]
ENDFOR | NEXT [Var]

Definição

Var Uma variável ou elemento de matriz utilizado para interagir por meio dos elementos de
Grupo.

Grupo Uma matriz do Visual FoxPro, uma matriz OLE, uma coleção do Visual FoxPro ou uma
coleção OLE.

Comandos Especifica os comandos Visual FoxPro a serem executados para cada elemento em
Grupo. Comandos pode incluir qualquer quantidade de comandos.

EXIT Transfere o controle do loop FOR EACH ... ENDFOR para o comando imediatamente após
ENDFOR. Pode-se colocar EXIT em qualquer parte entre FOR EACH e ENDFOR.

LOOP Retorna o controle diretamente para a cláusula FOR EACH sem executar as instruções
entre LOOP e ENDFOR. LOOP pode ser colocado em qualquer parte entre FOR EACH e
ENDFOR.
Exemplos

O exemplos a seguir demonstram como FOR EACH é utilizado para enumerar elementos em uma
matriz do Visual FoxPro, matriz OLE e um conjunto de botões de comando atribuídos em uma
matriz de objeto.
No exemplo a seguir, uma matriz variável do Visual FoxPro é criada e FOR EACH é utilizado para
exibir conteúdos para cada elemento da matriz.

DIMENSION cMyArray(3)
cMyArray[1] = ‘A’
cMyArray[2] = ‘B’
cMyArray[3] = ‘C’

FOR EACH cMyVar IN cMyArray


? cMyVar
ENDFOR

No exemplo a seguir, uma instância do Microsoft Excel é criada e um novo livro é adicionado. FOR
EACH é utilizado para exibir o nome de cada planilha na pasta de trabalho. Este exemplo requer
que o Microsoft Excel seja instalado corretamente na máquina onde o exemplo está sendo
executado.

oExcel = CREATE("Excel.Application")
oExcel.Workbooks.ADD

FOR EACH oMyVar IN oExcel.sheets


? oMyVar.name
NEXT oMyVar

No exemplo a seguir, cinco botões de comando são colocados em um formulário. FOR EACH é
utilizado para exibir os botões em formulários e especifica legendas, estilos de fontes e posições de
cada botão.

PUBLIC oMyObject
oMyObject = CREATEOBJECT("frmTest")
oMyObject.SHOW

DEFINE CLASS frmTest AS FORM


Height = 200
DIMENSION MyArray[5]
PROCEDURE Init

FOR i = 1 to 5
THIS.AddObject('THIS.MyArray[i]',;
'COMMANDBUTTON')
ENDFOR

****** FOR EACH - NEXT ******


FOR EACH oButton IN THIS.MyArray
oButton.Visible = .T.
NEXT

****** elemento FOR EACH - NEXT ******


FOR EACH oButton IN THIS.MyArray
oButton.FontBold = .T.

NEXT obutton

j=1
****** FOR EACH - ENDFOR ******
FOR EACH oButton IN THIS.MyArray
oButton.top = j * 30
j=j+1
ENDFOR

****** elemento FOR EACH - ENDFOR ******


FOR EACH oButton IN THIS.MyArray
oButton.FontItalic = .T.
ENDFOR obutton

j=1
****** EXIT ******
FOR EACH oButton IN THIS.MyArray
oButton.Caption = "teste" + str(j)
j = j+1
IF j > 3
EXIT
ENDIF

NEXT

j=1
****** LOOP ******
FOR EACH oButton IN THIS.MyArray
IF j > 3
LOOP
ENDIF
j=j+1
oButton.Left = 25
NEXT
ENDPROC
ENDDEFINE

FOR( ), função

Retorna a expressão de filtragem de índice de um arquivo de índice de entrada única (.IDX) aberto
ou uma marca de índice.

Sintaxe

FOR([nNúmeroÍndice [, nÁreaTrabalho | cAliasTabela]])

Tipos de retorno

Caractere

Argumentos

Se você não incluir nenhum dos argumentos opcionais, FOR( ) retornará a expressão de filtragem
de índice para a marca de índice ou o arquivo de índice mestre. Se uma marca de índice ou um
arquivo de índice mestre não estiver em andamento (por exemplo, você emitiu SET ORDER TO
para colocar a tabela na ordem de registro natural), FOR( ) retornará a seqüência vazia.

nNúmeroÍndice Especifica o arquivo ou a marca de índice para o qual a expressão de filtragem é


retornada. FOR( ) retorna expressões de filtragem na ordem a seguir, visto que nNúmeroÍndice
aumenta de 1 ao número total de marcas de índice composto independente e estrutural e de arquivos
de entrada única abertos:
1. Primeiramente, são retornadas as expressões de filtragem de arquivos de índice de entrada
única (caso algum esteja aberto). A ordem em que os arquivos de índice de entrada única são
incluídos em USE ou SET INDEX determinará a ordem de retorno das expressões de filtragem.
2. Em seguida, são retornadas as expressões de filtragem para cada marca no índice composto
estrutural (caso haja algum). As expressões de filtragem são retornadas das marcas na ordem em
que estas são criadas no índice estrutural.

3. Por último, são retornadas as expressões de filtragem para cada marca em qualquer índice
composto independente aberto. As expressões de filtragem são retornadas das marcas na ordem em
que estas são criadas nos índices compostos independentes.

A seqüência vazia será retornada se uma marca de índice ou um índice for criado sem a cláusula
FOR ou se nNúmeroÍndice for maior do que o número total de marcas de índice composto
independente e estrutural e de arquivos de entrada única abertos.

nÁreaTrabalho Especifica a Área de trabalho da tabela para a qual FOR( ) retorna as expressões de
filtragem de índice.

A função FOR( ) retornará a seqüência vazia caso nenhuma tabela esteja aberta na Área de trabalho
especificada.

cAliasTabela Especifica o alias da tabela para a qual FOR( ) retorna as expressões de filtragem de
índice.

O Visual FoxPro irá gerar uma mensagem de erro se você especificar um alias de tabela
inexistente.

Comentários

É possível criar índices filtrados no Visual FoxPro. Se você incluir a cláusula opcional FOR
lExpressão em INDEX, o arquivo de índice atuará como um filtro na tabela. Somente os registros
correspondentes à expressão de filtragem lExpressão estarão disponíveis para exibição e acesso.
São criadas chaves de índice no arquivo de índice apenas para os registros correspondentes à
expressão de filtragem.

USE e SET INDEX suportam uma lista de nomes de arquivo de índice, permitindo que se abra
vários arquivos de índice para uma tabela. Qualquer combinação de nomes de arquivo de índice de
entrada única e de nomes de arquivo de índice composto independente ou estrutural pode ser
incluída na lista de nomes de arquivo de índice. A função FOR( ) é idêntica a SYS(2021), sendo
fornecida para manter a compatibilidade com o dBASE IV.
FOUND( ), função

Retornará verdadeiro (.T.) se CONTINUE, FIND, LOCATE ou SEEK obtiver êxito.

Sintaxe

FOUND([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Lógico

Argumentos

nÁreaTrabalho Especifica a Área de trabalho da tabela para a qual FOUND( ) retorna um valor
indicando o êxito do último CONTINUE, FIND, LOCATE ou SEEK.

FOUND( ) retornará falso (.F.) se uma tabela não for aberta na Área de trabalho especificada.

cAliasTabela Especifica o alias da tabela para a qual FOUND( ) retorna um valor indicando o êxito
do último CONTINUE, FIND, LOCATE ou SEEK.

O Visual FoxPro gera uma mensagem de erro se for especificado um alias de tabela que não existe.

Comentários

FOUND( ) retorna um valor lógico que indica se o CONTINUE, FIND, LOCATE ou SEEK
executado mais recentemente obteve êxito ou se o ponteiro do registro foi movido em uma tabela
relacionada. FOUND( ) retornará verdadeiro (.T.) se a procura obtiver êxito; caso contrário,
FOUND( ) retornará falso (.F.).
Se você omitir os argumentos opcionais, FOUND( ) retornará um valor indicando o êxito do último
CONTINUE, FIND, LOCATE ou SEEK para a tabela aberta na Área de trabalho selecionada
atualmente.

Dica Esta função pode ser utilizada para determinar se uma tabela filho tem algum registro
correspondente ao registro pai.

FOUND( ), exemplo da função

No exemplo a seguir, todos os clientes da GERMANY foram contados.

SET TALK OFF


CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abrir tabela Customer

STORE 0 TO gnCount
LOCATE FOR UPPER(country) = 'GERMANY'
DO WHILE FOUND( )
gnCount = gnCount + 1
CONTINUE
ENDDO
WAIT WINDOW 'Total de clientes da Alemanha: ' ;
+ LTRIM(STR(gnCount)) NOWAIT
FPUTS( ), função

Grava uma seqüência de caracteres, um retorno de carro e uma alimentação de linha em um arquivo
ou em uma porta de comunicação aberta com uma função de arquivo de baixo nível.

Sintaxe

FPUTS(nIdentificadorArquivo, cExpressão [, nCaracteresGravados])

Tipos de retorno

Numérico

Argumentos

nIdentificadorArquivo Especifica o número do identificador do arquivo ou da porta de


comunicação em que FPUTS( ) grava dados.

cExpressão Especifica a expressão de caracteres que FPUTS( ) grava no arquivo ou na porta.

nCaracteresGravados Especifica o número de caracteres em cExpressão para gravar no arquivo ou


na porta.

FPUTS( ) grava toda a expressão de caracteres cExpressão para o arquivo ou porta se


nCaracteresGravados for omitido. Se você incluir nCaracteresGravados, os caracteres de
nCaracteresGravados serão gravados em um arquivo ou porta. Se nCaracteresGravados for menor
que o número de caracteres em cExpressão, somente os caracteres de nCaracteresGravados serão
gravados no arquivo ou na porta. Toda a cExpressão é gravada em arquivos ou portas, se
nCaracteresGravados for igual ou maior que o número de caracteres em cExpressão.

Comentários

FPUTS( ) retornará o número de bytes gravados para o arquivo ou porta. 0 será retornado se, por
algum motivo, FPUTS( ) não puder gravar no arquivo ou porta.
FREAD( ), função

Retorna um número especificado de bytes a partir de um arquivo ou de uma porta de comunicação


aberta com uma função de nível inferior.

Sintaxe

FREAD(nIdentificadorArquivo, nBytes)

Tipos de retorno

Caractere

Argumentos

nIdentificadorArquivo Especifica o número do identificador de arquivo para o arquivo ou a porta


de comunicação a partir de onde FREAD( ) retorna os dados.

nBytes Especifica o número de bytes retornados por FREAD( ). FREAD( ). FREAD( ) retorna os
dados começando na posição atual do ponteiro do arquivo e prossegue até retornar nBytes bytes ou
encontrar o fim do arquivo.

FREAD( ), exemplo de função


O exemplo a seguir utiliza FREAD( ) para exibir o conteúdo de um arquivo. Se o arquivo estiver
vazio, uma mensagem será exibida.

* TEST.TXT deve existir -- você pode criar este arquivo


* utilizando Notepad.

Local gnFileHandle,nSize,cString
gnFileHandle = FOPEN("test.txt")
* Procure o fim do arquivo para determinar o número de bytes no arquivo
nSize = FSEEK(gnFileHandle, 0, 2) && Move o ponteiro para EOF
IF nSize <= 0
* Se o arquivo estiver vazio, exibe uma mensagem de erro
WAIT WINDOW "Este arquivo está vazio!" NOWAIT
ELSE
* Se o arquivo não estiver vazio, o programa armazena seu conteúdo

* na memória, em seguida exibe o texto na janela principal do Visual FoxPro


= FSEEK(ggnFileHandle, 0, 0) && Move o ponteiro para BOF
cString = FREAD(gnFileHandle, nSize)
? cString
ENDIF
= FCLOSE(gnFileHandle) && Fecha o arquivo

FREE TABLE, comando

Remove de uma tabela uma referência a banco de dados.

Sintaxe

FREE TABLE NomeTabela

Argumentos

NomeTabela Especifica o nome da tabela a partir da qual a referência ao banco de dados é


removida.
Comentários

Caso um banco de dados seja excluído acidentalmente do disco, as referências a ele permanecem
nas tabelas que existiam no banco de dados. FREE TABLE exclui de uma tabela as referências a
banco de dados, permitindo que você abra a tabela ou adicione-a a um outro banco de dados.

FREE TABLE nunca deve ser emitido para excluir uma tabela de um banco de dados quando este
existe em disco. Neste caso, FREE TABLE pode inutilizar o banco de dados. Em seu lugar, utilize
REMOVE TABLE. Ao contrário de FREE TABLE, REMOVE TABLE remove do banco de dados
todas as referências a índices primários, valores padrão e regras de validação associados à tabela.

FSEEK( ), função
Move o ponteiro do arquivo em um arquivo aberto com uma função de nível inferior.

Sintaxe

FSEEK(nIdentificadorArquivo, nBytesMovidos[, nPosiçãoRelativa])

Tipos de retorno

Numérico

Argumentos

nIdentificadorArquivo Especifica o identificador do arquivo no qual FSEEK( ) move o ponteiro do


arquivo. Um número de identificador de arquivo é retornado por FCREATE( ) ou FOPEN( ) quando
o arquivo é criado ou aberto.

nBytesMovidos Especifica o número de bytes para mover o ponteiro do arquivo. O ponteiro do


arquivo será movido em direção ao fim do arquivo se nBytesMovidos for positivo, e em direção ao
início do arquivo se nBytesMovidos for negativo.

nPosiçãoRelativa Move o ponteiro do arquivo até uma posição relativa no arquivo. Como padrão,
o ponteiro do arquivo é movido em relação ao início do arquivo. Você pode também mover o
ponteiro em relação ao ponteiro do arquivo atual ou ao fim do arquivo, incluindo nPosiçãoRelativa.

A tabela a seguir lista os valores para nPosiçãoRelativa e a partir de onde o ponteiro do arquivo é
movido.

nPosiçãoRelativa Move o ponteiro do arquivo para um posição relativa

0 Ao início do arquivo (padrão).


1 À posição do ponteiro do arquivo atual
2 Ao fim do arquivo

Comentários

Após mover o ponteiro do arquivo, FSEEK( ) retorna o número de bytes em que o ponteiro do
arquivo é posicionado a partir do início do arquivo. O ponteiro do arquivo pode também ser movido
com FREAD( ) e FWRITE( ).

FSEEK( ), exemplo de função

A função definida pelo usuário a seguir utiliza FSEEK( ) para retornar o tamanho de um arquivo. Se
você não passar parâmetros para a função definida pelo usuário, ela retornará –2. Se o arquivo não
puder ser localizado, a função definida pelo usuário retornará –1.

FUNCTION fsize2
PARAMETERS gcFileName && Arquivo a ser verificado
PRIVATE pnHandle,pnSize
IF PARAMETERS( ) = 0
RETURN -2 && Retorna -2 se nenhum parâmetro for passado
ELSE
IF !FILE(gcFileName)
RETURN -1 && Retorna -1 se o arquivo não existir
ENDIF
ENDIF
pnHandle = FOPEN(gcFileName) && Abre o arquivo
pnSize = FSEEK(pnHandle,0,2) && Determina o tamanho do arquivo, atribui a pnSize
=FCLOSE(pnHandle) && Fecha o arquivo
RETURN pnSize && Retorna um valor

FSIZE( ), função

Retorna o tamanho em bytes de um campo ou arquivo especificado.

Sintaxe

FSIZE(cNomeCampo [, nÁreaTrabalho | cAliasTabela] | cNomeArquivo)


Tipos de retorno

Numérico

Argumentos

cNomeCampo Especifica o nome do campo.

nÁreaTrabalho Especifica a Área de trabalho da tabela para a qual FSIZE( ) retorna um tamanho
de campo.

FSIZE( ) retorna 0 se não houver uma tabela aberta na Área de trabalho que você especificar.

cAliasTabela Especifica o alias da tabela para a qual FSIZE( ) retorna um tamanho de campo.

O Visual FoxPro gera uma mensagem de erro caso você especifique um alias de tabela que não
existe.

cNomeArquivo Especifica um arquivo para o qual FSIZE( ) retorna o tamanho em bytes.

Comentários

A definição atual de SET COMPATIBLE determina se FSIZE( ) retorna o tamanho de um campo


ou de um arquivo. Caso SET COMPATIBLE seja determinado com OFF ou FOXPLUS (padrão),
FSIZE( ) retorna o tamanho de um campo. Se SET COMPATIBLE for determinado com ON ou
DB4, FSIZE( ) retorna o tamanho de um arquivo.

A tabela a seguir mostra o tamanho padrão (em bytes) para cada tipo de campo.

Tipo de campo Tamanho de campo padrão (em bytes)

Moeda 8
Data 8
DataHora 14
Duplo 8
Inteiro 4
Lógico 1
Memo 4
Geral 4

O tamanho do campo pode ser exibido com DISPLAY STRUCTURE e LIST STRUCTURE.
Se você omitir os argumentos opcionais nÁreaTrabalho e cAliasTabela, FSIZE( ) retornará o
tamanho de campo para um campo da Área de trabalho e da tabela atuais.
FSIZE( ), exemplo de função

O exemplo a seguir utiliza FSIZE( ) para retornar o tamanho de dois campos na tabela customer.

SET COMPATIBLE OFF


CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

CLEAR
? FSIZE('contact') && Exibe 30
? FSIZE('cust_id') && Exibe 6

FTIME( ), função

Retorna a hora da última modificação de um arquivo.

Sintaxe

FTIME(cNomeArquivo)

Tipos de retorno

Caractere
Argumentos

cNomeArquivo Especifica o nome do arquivo cuja hora da última modificação é retornada por
FTIME( ). cNomeArquivo pode incluir um caminho com o nome do arquivo. Se não houver
nenhum caminho incluído com o nome do arquivo, o Visual FoxPro procurará pelo arquivo no
diretório ou pasta padrão e nos diretórios ou pastas especificados por SET PATH.

Comentários

A hora retornada por FTIME( ) é atribuída ao arquivo pelo sistema operacional.

FTIME( ), exemplo de função

O exemplo a seguir utiliza FTIME( ) para exibir a hora da última modificação em FOXUSER.DBF,
o arquivo de recursos do Visual FoxPro.

? FTIME('FOXUSER.DBF') && Exibe a hora da última modificação


FULLPATH( ), função

Retorna o caminho para um arquivo especificado ou o caminho relativo a um outro arquivo.

Sintaxe

FULLPATH(cNomeArquivo1 [, nCaminhoMSDOS | cNomeArquivo2])

Tipos de retorno

Caractere

Argumentos

cNomeArquivo1 Especifica o arquivo a ser procurado pelo Visual FoxPro. Certifique-se de incluir
a extensão do nome do arquivo.

Se o arquivo estiver localizado no caminho do Visual FoxPro, o caminho é retornado com o nome
do arquivo. O caminho do Visual FoxPro pode ser especificado com SET PATH.

nCaminhoMSDOS Especifica que o caminho do MS-DOS é procurado, em vez do caminho do


Visual FoxPro. nCaminhoMSDOS pode ter qualquer valor numérico. Caso o arquivo não possa ser
localizado no caminho do MS-DOS, um caminho e um nome de arquivo são retornados, como se o
arquivo tivesse sido encontrado no diretório ou na pasta padrão atual.

cNomeArquivo2 Especifica um segundo nome de arquivo a ser procurado. Certifique-se de incluir


a extensão do nome do arquivo. FULLPATH( ) retorna o caminho para o primeiro arquivo em
relação ao segundo arquivo.
STRTRAN( ), função

Procura uma expressão de caracteres ou um campo Memo para ocorrências de uma segunda
expressão de caracteres ou campo Memo e, em seguida, substitui cada ocorrência com uma terceira
expressão de caracteres ou campo Memo.

Sintaxe

STRTRAN(cProcurado, cProcurarPor [, cSubstituição]


[, nIniciarOcorrência] [, nNúmerodeOcorrências])

Tipos de retorno

Caractere

Argumentos

cProcurado Especifica a expressão de caractere que é procurada. cProcurado pode ser um campo
Memo.

cProcurarPor Especifica a expressão de caractere que é procurada em cProcurado. A procura


considera maiúsculas/minúsculas. cProcurar pode ser um campo Memo.

cSubstituição Especifica a expressão de caracteres que substitui cada ocorrência de cProcurarPor


em cProcurado. Se você omitir cSubstituição, cada ocorrência de cProcurarPor é substituída com a
seqüência vazia.

nIniciarOcorrência Especifica qual ocorrência de cProcurarPor é a primeira a ser substituída. Por


exemplo, se nIniciarOcorrência for 4, a substituição começa com a quarta ocorrência de
cProcurarPor em cProcurado, e a primeira das três ocorrências de cProcurarPor permanece
inalterada. A ocorrência onde a substituição começa padronizará a primeira ocorrência de
cProcurarPor se você omitir nIniciarOcorrência.
nNúmerodeOcorrências Especifica o número de ocorrências de cProcurarPor a serem substituídas.
Se você omitir nNúmerodeOcorrências, todas as ocorrências de cProcurarPor
iniciando com a ocorrência especificada com nIniciarOcorrência serão substituídas.

Comentários

Você pode especificar onde a substituição começa e quantas substituições são feitas. STRTRAN( )
retorna a seqüência de caracteres existente.

STRTRAN( ), exemplo da função

STORE 'abracadabra' TO gcString


? STRTRAN(gcString, 'a', 'z') && Exibe zbrzczdzbrz
? STRTRAN(gcString, 'a', 'q', 2, 3) && Exibe abrqcqdqbra

SYSMETRIC( ), função

Retorna o tamanho dos elementos de tela do sistema operacional.

Sintaxe

SYSMETRIC(nElementoTela)

Tipos de retorno

Numérico

Argumentos

nElementoTela Especifica um elemento de tela. A tabela a seguir mostra valores de


nElementoTela e o elemento de tela correspondente:

nElementoTela Elemento de tela

1 Largura da tela
2 Altura da tela.
3 Largura da moldura dimensionável da janela
4 Altura da moldura dimensionável da janela
5 Largura das setas de rolagem na barra de rolagem vertical
6 Altura das setas de rolagem na barra de rolagem vertical
7 Largura das setas de rolagem na barra de rolagem horizontal
8 Altura das setas de rolagem na barra de rolagem horizontal
9 Altura do título da janela
10 Largura da moldura não dimensionável da janela
11 Altura da moldura não dimensionável da janela
12 Largura da moldura da janela DOUBLE ou PANEL
13 Altura da moldura da janela DOUBLE ou PANEL
14 Largura da caixa de rolagem na barra de rolagem horizontal nas janelas de edição de texto
15 Altura da caixa de rolagem na barra de rolagem vertical nas janelas de edição de texto
16 Largura do ícone da janela minimizada
17 Altura do ícone da janela minimizada
18 Largura máxima do ponto de inserção
19 Altura máxima do ponto de inserção
20 Altura da barra de menus de linha simples
21 Largura da janela maximizada
22 Altura da janela maximizada
23 Altura da janela Kanji
24 Largura mínima dimensionável da janela
25 Altura mínima dimensionável da janela
26 Largura mínima da janela
27 Altura mínima da janela
28 Largura dos controles da janela
29 Altura dos controles da janela
30 1 se houver hardware do mouse; do contrário 0
31 1 para versão de depuração do Microsoft Windows; do contrário 0
32 1 se os botões do mouse estiverem trocados; do contrário 0

Comentários

SYSMETRIC( ) retorna o tamanho dos elementos de tela. Estes elementos são: menus, janelas,
controles da janela e o ponto de inserção. Os valores são retornados em pixels a menos que se diga
o contrário e podem variar para diferentes exibições, unidades de disco de exibição e hardware do
vídeo. Para obter informações adicionais sobre os elementos de tela, consulte a função
GetSystemMetrics no Guia de Referência do Programador do Microsoft Windows.
SYSMETRIC( ) permite determinar o tamanho dos menus, das janelas e dos controles da janela
criados no Visual FoxPro. As janelas e os menus criados com DEFINE WINDOW e DEFINE
MENU utilizam os mesmos tamanhos do elemento de tela das janelas e menus do sistema
operacional.
FUNCTION, comando

Identifica o início de uma definição para uma função definida pelo usuário.

Sintaxe

FUNCTION NomeFunção
Comandos
[RETURN [eExpressão]]
ENDFUNC

Argumentos

NomeFunção No Visual FoxPro, os nomes de função podem ter até 254 caracteres.

Para distinguir entre um nome de arquivo de programa com mais de 10 caracteres e uma função que
começa com os mesmos 10 caracteres nesses dois produtos, coloque o nome de arquivo de
programa entre aspas ou inclua uma extensão depois do nome de arquivo de programa.

Comentários

Em muitos programas, certas rotinas são repetidas com freqüência. Definir as rotinas comumente
utilizadas como funções separadas reduz o tamanho e a complexidade do programa e facilita a sua
manutenção.
FUNCTION NomeFunção é uma instrução dentro de um programa. Designa o início de uma função
em um programa e identifica a função pelo nome.

FUNCTION NomeFunção é seguido de uma série de comandos do Visual FoxPro que compõem a
função. Você pode incluir RETURN em qualquer lugar da função para retornar controle ao
programa de chamada ou a outro programa e para definir um valor retornado pela função definida
pelo usuário. Se você não incluir um comando RETURN, um RETURN implícito é
automaticamente executado quando a função é fechada. Se o comando RETURN não incluir um
valor de retorno (ou se um RETURN implícito for executado), o Visual FoxPro atribuirá .T.
(Verdadeiro) como valor de retorno.

A função é finalizada com o comando ENDFUNC. Esse comando é opcional, a função é fechada
quando encontra outro comando FUNCTION, um comando PROCEDURE ou o final do arquivo de
programa.

Os comentários podem ser colocados na mesma linha depois de FUNCTION e ENDFUNC. Esses
comentários são ignorados durante a compilação e a execução do programa.

Você não pode incluir um código de programa executável normal em um arquivo de programa
depois de utilizar as funções definidas pelo usuário; somente funções definidas pelo usuário,
procedimentos e definições de classe podem seguir o primeiro comando FUNCTION ou
PROCEDURE no arquivo.

Quando você emite DO com um nome de função, o Visual FoxPro procura a função em uma ordem
específica, da forma a seguir:

1. O Visual FoxPro procura no arquivo que contém o comando DO.

2. Caso a função não seja encontrada ali, o Visual FoxPro procura nos arquivos de procedimentos
abertos. Os arquivos de procedimentos são abertos com SET PROCEDURE.

3. Caso a função não seja encontrada em um arquivo de procedimentos aberto, o Visual FoxPro
procura nos programas da seqüência de execução. Os arquivos de programa são procurados desde o
último até o primeiro programa executado.

4. Caso a função ainda não tenha sido encontrada, o Visual FoxPro procura um programa
independente. Se um arquivo de programa correspondente for encontrado, o programa é executado.
Caso contrário, o Visual FoxPro gera uma mensagem de erro.

A cláusula IN deve ser incluída em DO para executar uma função em um arquivo específico.

Como padrão, os parâmetros são passados para as funções por valor. Para obter informações sobre a
passagem de parâmetros para funções por referência, consulte SET UDFPARMS. É possível passar
no máximo 27 parâmetros para uma função. Os parâmetros podem ser passados para uma função
incluindo uma instrução PARAMETERS ou LPARAMETERS na função ou colocando uma lista de
parâmetros imediatamente depois de FUNCTION NomeFunção. Coloque a lista de parâmetros
entre parênteses e separe os parâmetros com vírgulas.
FV( ), função

Retorna o valor futuro de um investimento financeiro.

Sintaxe

FV(nPagamento, nTaxaJuros, nPeríodos)

Tipos de retorno

Numérico

Argumentos

nPagamento Especifica o pagamento periódico e constante (que pode ser negativo ou positivo).

nTaxaJuros Especifica a taxa de juros periódica. Se a taxa de juros for anual mas os pagamentos
forem feitos mensalmente, divida a taxa de juros anual por 12.

nPeríodos Especifica o número de períodos durante os quais os pagamentos são feitos. FV( )
considera que os pagamentos periódicos são feitos no final de cada período.

Comentários

FV( ) calcula o valor futuro de uma série de pagamentos periódicos e constantes com juros
compostos fixos. O valor futuro é constituído pelo total de todos os pagamentos acrescidos de juros.

FV( ), exemplo de função

STORE 500 TO gnPayment && Pagamento mensal


STORE .075/12 TO gnInterest && Taxa de juros anual - 7,5%
STORE 48 TO gnPeriods && Quatro anos (48 meses)

CLEAR
? FV(gnPayment, gnInterest, gnPeriods) && Exibe 27887.93
FWRITE( ), função

Grava uma seqüência de caracteres em um arquivo ou em uma porta de comunicação aberta com
uma função de arquivo de nível inferior.

Sintaxe

FWRITE(nIdentificadorArquivo, cExpressão [, nCaracteresGravados])

Tipos de retorno

Numérico

Argumentos

nIdentificadorArquivo Especifica o número do identificador de arquivo para o arquivo ou a porta


de comunicação em que FWRITE( ) executa a gravação.

cExpressão Especifica a expressão de caracteres que FWRITE( ) grava no arquivo ou porta


especificada com nIdentificadorArquivo.

nCaracteresGravados FWRITE( ) grava a expressão de caracteres inteira no arquivo ou porta, a


menos que você inclua nCaracteresGravados. Quando você inclui nCaracteresGravados, são
gravados nCaracteresGravados caracteres no arquivo ou porta. Se nCaracteresGravados for menor
do que o número de caracteres em cExpressão, serão gravados apenas nCaracteresGravados
caracteres no arquivo ou porta. Todos os caracteres em cExpressão serão gravados no arquivo ou
porta se nCaracteresGravados for igual ou maior que o número de caracteres em cExpressão.
Comentários

Diferente de FPUTS( ), FWRITE( ) não coloca um retorno de carro e uma alimentação de linha no
fim da seqüência de caracteres.

FWRITE( ) retorna o número de bytes gravados no arquivo ou porta de comunicação. Se


FWRITE( ) não puder executar a gravação no arquivo ou porta, será retornado 0.

GATHER, comando

Substitui os dados do registro atual para a tabela atualmente selecionada com dados de uma matriz,
um conjunto de variáveis ou um objeto.

Sintaxe

GATHER FROM NomeMatriz | MEMVAR | NAME NomeObjeto


[FIELDS ListaCampo | FIELDS LIKE Estrutura | FIELDS EXCEPT Estrutura]
[MEMO]

Argumentos

FROM NomeMatriz Especifica a matriz cujos dados substituem aqueles do registro atual. O
conteúdo dos elementos da matriz, começando do primeiro elemento, substitui o conteúdo dos
campos correspondentes do registro. O conteúdo do primeiro elemento da matriz substitui o
primeiro campo do registro, o conteúdo do segundo elemento da matriz substitui o segundo campo e
assim por diante.

Se a matriz tiver menos elementos do que a tabela tem campos, os campos adicionais serão
ignorados. Se a matriz tiver mais elementos do que a tabela tem campos, os elementos adicionais
serão ignorados.

MEMVAR Especifica as variáveis de memória ou a matriz de onde os dados são copiados para o
registro atual. Os dados são transferidos da variável de memória para o campo que possui o mesmo
nome da variável de memória. O conteúdo do campo não será substituído se não existir uma
variável de memória com o mesmo nome do campo.

Dica Você pode criar variáveis de memória com os mesmos nomes dos campos incluindo
MEMVAR ou BLANK em SCATTER.

NAME NomeObjeto Especifica um objeto cujas propriedades possuem os mesmos nomes dos
campos da tabela. O conteúdo de cada campo é substituído pelo valor da propriedade com os
mesmos nomes dos campos. O conteúdo de um campo não será substituído se não existir uma
propriedade com o mesmo nome do campo.

FIELDS ListaCampos Especifica os campos cujo conteúdo é substituído pelo conteúdo dos
elementos da matriz ou das variáveis. Somente o campo especificado com ListaCampos tem seu
conteúdo substituído.

FIELDS LIKE Estrutura | FIELDS EXCEPT Estrutura Você pode substituir de forma seletiva os
campos com os conteúdos de elementos de matriz ou de variáveis de memória incluindo as
cláusulas LIKE ou EXCEPT, ou ambas. Se você incluir a Estrutura LIKE, o Visual FoxPro
substituirá os campos que correspondem à Estrutura. Se incluir Estrutura EXCEPT, o Visual
FoxPro substituirá todos os campos exceto os que correspondam à Estrutura.

Estrutura suporta caracteres curinga (* e ?). Por exemplo, para substituir todos os campos que
começam com as letras A e P, utilize:

GATHER FROM gamyarray FIELDS LIKE A*,P*

MEMO Especifica que o conteúdo dos campos Memo é substituído pelo conteúdo de elementos de
matriz ou de variáveis de memória. Se você omitir MEMO, os campos Memo serão ignorados
quando GATHER substituir o conteúdo dos campos pelo conteúdo de uma matriz ou de uma
variável de memória. Os campos do tipo geral ou de figura são sempre ignorados em GATHER,
mesmo que você inclua a palavra-chave MEMO.

GATHER, exemplo de comando

Exemplo 1
Este exemplo utiliza GATHER para copiar dados para um registro novo na tabela. Após a criação
da tabela Test, SCATTER será utilizado para criar conjunto de variáveis baseados em campos de
tabela. Para cada campo será, então, atribuído um valor e um novo registro em branco é adicionado
à tabela.

CREATE TABLE Test FREE ;


(Object C(10), Color C(16), SqFt n(6,2))
SCATTER MEMVAR BLANK
m.Object="Caixa"
m.Color="Vermelho"
m.SqFt=12.5
APPEND BLANK
GATHER MEMVAR
BROWSE

Exemplo 2

Este exemplo utiliza GATHER junto à cláusula NAME para copiar dados para um registro novo na
tabela. Após a criação da tabela Test, SCATTER é utilizado para criar um objeto com propriedades
baseadas em campos na tabela. Atribui-se, então, valores à propriedade do objeto e adiciona-se um
novo registro em branco à tabela.

CREATE TABLE Test FREE ;


(Object C(10), Color C(16), SqFt n(6,2))

SCATTER NAME oTest BLANK


oTest.Object="Caixa"
oTest.Color="Vermelho"
oTest.SqFt=12.5
APPEND BLANK
GATHER NAME oTest
RELEASE oTest
BROWSE
GETCOLOR( ), função

Exibe a caixa de diálogo Cor do Windows e retorna o número da cor escolhida.

Sintaxe

GETCOLOR([nNúmeroCorPadrão])

Tipos de retorno

Numérico

Argumentos

nNúmeroCorPadrão Especifica a cor inicialmente selecionada quando a caixa de diálogo Cor é


exibida. Se nNúmeroCorPadrão não corresponder a uma cor da caixa de diálogo Cor, a primeira cor
dessa caixa de diálogo será selecionada. Se você omitir nNúmeroCorPadrão, a cor preta será
selecionada.

Comentários

GETCOLOR( ) retornará – 1 se você sair da caixa de diálogo Cor pressionando ESC, selecionando
o botão Cancelar ou selecionando Fechar no menu Controle.

GETCOLOR( ), exemplo de função

O exemplo a seguir exibe a caixa de diálogo Cor do ambiente Windows com a cor vermelha
selecionada. O número correspondente à cor escolhida é exibido quando você sai da caixa de
diálogo.

CLEAR
? GETCOLOR(255)
GETDIR( ), função

Exibe a caixa de diálogo Selecionar diretório, a partir da qual é possível selecionar um diretório ou
uma pasta.

Sintaxe

GETDIR([cDiretório [, cTexto]])

Tipos de retorno

Caractere

Argumentos

cDiretório Especifica o diretório ou pasta inicialmente exibido na caixa de diálogo. Quando


cDiretório não é especificado, a caixa de diálogo abre com o padrão de diretório ou pasta do Visual
FoxPro exibida.

cTexto Especifica o texto para a lista de diretório ou pasta na caixa de diálogo. No Windows 3.1, o
texto aparece como legenda na barra de títulos da caixa de diálogos. No Windows 95, o texto
aparece abaixo da barra de títulos, dentro da caixa de diálogo.

Comentários

GETDIR( ) retorna como seqüência de caracteres o nome do diretório ou pasta selecionado.


Se você não escolher um diretório ou pasta (clicar Cancelar, pressionar ESC ou escolher Fechar no
menu Controle), GETDIR( ) retorna a seqüência vazia.

GETENV( ), função

Retorna o conteúdo da variável de ambiente do MS-DOS especificada.

Sintaxe

GETENV(cNomeVariável)

Tipos de retorno

Caractere

Argumentos
cNomeVariável Especifica o nome da variável de ambiente do MS-DOS. A seqüência vazia será
retornada se a variável de ambiente do MS-DOS especificada não existir.

Você pode localizar o diretório Windows com a variável de ambiente WINDIR, definida pelo
Windows quando ele é inicializado.

Comentários

Duas variáveis de ambiente estão sempre disponíveis: COMSPEC e PATH. É possível criar
variáveis de ambiente personalizadas com o comando SET do MS-DOS.

Para obter maiores informações sobre a criação de variáveis de ambiente, consulte o manual do MS-
DOS.

GETENV( ), exemplo de função

CLEAR
? GETENV('PATH') && Exibe o diretório do MS-DOS

GETFILE( ), função
Exibe a caixa de diálogo Abrir e retorna o nome do arquivo selecionado.

Sintaxe

GETFILE([cExtensõesArquivos] [, cTexto] [,cLegendaBotãoAbrir]


[,nTipoBotão])

Tipos de retorno

Caractere

Argumentos

cExtensõesArquivos Especifica as extensões dos arquivos exibidos na lista rolável quando o item
de menu Todos os arquivos não é escolhido. Se passar um valor como literal, inclua-o entre aspas.
Não inclua um ponto (.) na frente de extensões de arquivos.

cExtensõesArquivos pode apresentar diversos formatos:

· Se cExtensõesArquivos contiver uma única extensão (por exemplo, .PRG), serão exibidos
apenas os arquivos com essa extensão.
· Se cExtensõesArquivos for uma seqüência vazia, todos os arquivos do diretório ou pasta
atual serão exibidos, se cTipoCriador não estiver incluído.
· cExtensõesArquivos também pode conter caracteres curinga (* e ?). Todos os arquivos com
extensões que correspondam aos critérios dos caracteres curinga são exibidos. Por exemplo, se
cExtensõesArquivos for ?X?, todos os arquivos com extensão .FXP, .EXE e TXT serão exibidos.

· No Visual FoxPro para Windows, cExtensõesArquivos pode conter uma descrição de


arquivo seguida de uma extensão de arquivo ou uma lista de extensões de arquivos separados por
vírgulas. A descrição do arquivo aparece na caixa de listagem Tipos de arquivo. Separe a descrição
de arquivos da extensão de arquivo ou lista de extensões com dois pontos (:). Separe descrições
múltiplas de arquivo com ponto e vírgula (;).

Por exemplo, se cExtensõesArquivos é “Text:TXT” a descrição do arquivo “Text” aparece na caixa


de listagem Tipos de arquivo e todos os arquivos com a extensão .TXT são exibidos.

Se cExtensõesArquivos é “Tabelas:DBF; Arquivos: TXT,BAK” a descrição dos arquivos “Tabelas”


e “Arquivos” aparece na caixa de listagem Tipos de arquivo. Quando “Tabelas” é escolhida na
caixa de listagem Arquivos do tipo, todos os arquivos com uma extensão .DBF são exibidos.
Quando “Arquivos” é escolhido da caixa de listagem Tipos de arquivo, todos os arquivos com
extensão .TXT e .BAK são exibidos.

cTexto Especifica o texto de uma lista de diretórios ou pastas na caixa de diálogo Abrir. No
ambiente Windows 95, o texto aparece abaixo da lista de arquivos e longas seqüências de texto
podem ser truncadas. No Macintosh, o texto aparece dentro da caixa de diálogo.
cLegendaBotãoAbrir Especifica uma legenda para o botão OK.

nTipoBotão Especifica o número e o tipo dos botões que aparecem na caixa de diálogo Abrir. Os
botões a seguir serão exibidos na caixa de diálogo quando nTipoBotão for 0, 1 ou 2.

nTipoBotão Botões

0
(ou omitido) OK
Cancelar
1 OK
Novo
Cancelar
2 OK
Nenhum
Cancelar

“Sem Título” é retornado com o caminho especificado na caixa de diálogo Abrir se nTipoBotão é 1
e o usuário escolhe o botão Novo. A seqüência vazia é retornada nTipoBotão é 2 e o usuário
escolhe o botão Nenhum.

Comentários

GETFILE( ) retornará a seqüência vazia se você exibir a caixa de diálogo Abrir, pressionando ESC,
escolhendo Cancelar ou escolhendo Fechar, no menu Controle.

GETFILE( ), exemplo de função

CLOSE DATABASES
SELECT 0

gcTable = GETFILE('DBF', 'Procurar ou criar um.DBF:', 'Procurar',1)


DO CASE
CASE 'Sem título' $ gcTable
CREATE (gcTable)
CASE EMPTY(gcTable)
RETURN
OTHERWISE
USE (gcTable)
BROWSE
ENDCASE
GETFLDSTATE( ), função

Retorna um valor numérico indicando se um campo em uma tabela ou em um cursor foi editado, se
um registro foi incluído ou se o status excluído do registro atual foi alterado.

Sintaxe

GETFLDSTATE(cNomeCampo | nNúmeroCampo[,cAliasTabela | nÁreaTrabalho])

Tipos de retorno

Numérico

Argumentos

cNomeCampo | nNúmeroCampo Especifica o nome ou o número do campo para o qual o status de


edição é retornado. O número de campo nNúmeroCampo corresponde à posição do campo na
estrutura da tabela ou cursor. DISPLAY STRUCTURE ou FIELD( ) podem ser utilizados para
determinar o número de um campo.

É possível especificar –1 para que nNúmeroCampo retorne uma seqüência de caracteres que
consista de valores de status de edição e exclusão para todos os campos na tabela ou cursor. Por
exemplo, se uma tabela apresentar cinco campos e apenas o primeiro tiver sido editado,
GETFLDSTATE( ) retornará:

121111
O número 1 na primeira posição indica que o status de exclusão não foi alterado.

Você pode, também, incluir 0 em nNúmeroCampo para determinar se o status de exclusão do


registro atual foi alterado desde a abertura da tabela ou cursor.

Observação Utilizando GETFLDSTATE( ) determina apenas se o status de exclusão do registro


atual foi alterado. Por exemplo, se você marcar um registro para ser excluído e tornar a chamá-lo,
GETFLDSTATE( ) indicará se o status de exclusão foi alterado, mesmo que o status de exclusão do
registro tenha retornado ao seu estado original. Utilize DELETED( ) para determinar o status de
exclusão de um registro.

cAliasTabela Especifica o alias da tabela ou do cursor para o qual o status de exclusão de registro
ou edição de campo é retornado.

nÁreaTrabalho Especifica a área de trabalho da tabela ou do cursor para o qual o status de


exclusão de registro ou edição de campo é retornado.

Se um alias ou uma área de trabalho não forem especificados, GETFLDSTATE( ) retornará um


valor para um campo na tabela ou no cursor selecionado no momento.

Comentários

A tabela a seguir lista os valores de retorno de caractere e o status de edição ou exclusão


correspondente.

Valor de retorno Status de edição ou exclusão

1 O campo não foi editado ou o status de exclusão não foi alterado.


2 O campo foi editado ou o status de exclusão foi alterado.
3 O campo em um registro incluído não foi editado ou o status de exclusão não foi alterado
para o registro incluído.
4 O campo em um registro incluído foi editado ou o status de exclusão foi alterado para o
registro incluído.

A utilização de buffer de linha ou de tabela deve ser ativada com CURSORSETPROP( ) para que
GETFLDSTATE( ) opere em tabelas locais.
O status de exclusão ou edição será retornado para a tabela ou cursor que estiver aberto na área de
trabalho selecionada no momento, se GETFLDSTATE( ) for emitido sem os argumentos opcionais
cAliasTabela ou nÁreaTrabalho.

GETFLDSTATE( ), exemplo de função


O exemplo a seguir demonstra como utilizar a função GETFLDSTATE( ) para determinar se o
conteúdo de um campo foi alterado. MULTILOCKS é ativado (ON), um requerimento para
utilização de buffer de tabela. A tabela customer no banco de dados testdata é aberto e
CURSORSETPROP( ) é, então, utilizado para ajustar o modo de utilização do buffer para utilização
de buffer de tabela otimista (5).
GETFLDSTATE( ) é emitido para exibir um valor correspondente (1) para o estado não modificado
do campo cust_id, antes que o mesmo seja modificado. O campo cust_id é modificado com
REPLACE e GETFLDSTATE( ) é emitido novamente para exibir um valor correspondente (2) e
modificar o estado do campo cust_id. TABLEREVERT( ) é utilizado para retornar a tabela ao seu
estado original e GETFLDSTATE( ) é emitido novamente para exibir um valor correspondente (1)
ao estado original do campo cust_id.

CLOSE DATABASES
CLEAR

SET MULTILOCKS ON && Permite utilização de buffer de tabela


OPEN DATABASE SYS(2004)+"samples\data\testdata"
USE Customer && Abre tabela customer
=CURSORSETPROP("Utilização do buffer",5,"cliente") && Ativa utilização de buffer de tabela

* Obtém estado do campo no campo original cust_id e exibe estado


nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState

* Altera conteúdo do campo e exibe estado

REPLACE cust_id WITH "***"


nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState

* Descarta alteração de tabela e exibe estado


= TABLEREVERT(.T.) && Descarta todas alterações de tabela
nState=GETFLDSTATE("cust_id")
DO DisplayState WITH nState

PROCEDURE DisplayState
PARAMETER nState
DO CASE
CASE nState=1
=MESSAGEBOX("Campo não foi modificado ",0,"Resultados")
OTHERWISE
=MESSAGEBOX("Campo foi modificado ",0,"Resultados")

ENDCASE
GETFONT( ), função

Exibe a caixa de diálogo Fonte e retorna o nome da fonte selecionada.

Sintaxe

GETFONT( )

Tipos de retorno

Caractere

Comentários

GETFONT( ) retorna o nome, o tamanho e o estilo da fonte selecionada. Sua escolha é retornada
como uma seqüência de caracteres com o nome, o tamanho e o estilo da fonte separados por
vírgulas.

GETFONT( ) retorna a seqüência vazia quando você sai da caixa de diálogo Fonte selecionando
Cancelar ou Fechar, no menu Controle, ou pressionando ESC.

Observação Os comandos e funções do Visual FoxPro podem ser abreviados para quatro
caracteres. No caso de GETFONT( ) e GETFILE( ), em que ambos começam com as mesmas
quatro letras, a precedência é dada para GETFILE( ). Ao emitir GETF( ), a caixa de diálogo Abrir é
emitida.
GETNEXTMODIFIED( ), função

Retorna o número de registro do registro modificado que segue em um buffer de tabela ou cursor.

Sintaxe

GETNEXTMODIFIED(nNúmeroRegistro[,cAliasTabela | nÁreaTrabalho])

Tipos de retorno

Numérico
Argumentos

nNúmeroRegistro Especifica o número de registro após o qual GETNEXTMODIFIED( ) procura o


registro modificado seguinte. Especifique 0 em nNúmeroRegistro para determinar o primeiro
registro modificado na tabela ou no cursor.

cAliasTabela Especifica o alias da tabela ou cursor para o qual GETNEXTMODIFIED( ) retorna o


número do próximo registro modificado.

nÁreaTrabalho Especifica a Área de trabalho da tabela ou cursor para o qual


GETNEXTMODIFIED( ) retorna o número do próximo registro modificado.

Se você não especificar um alias ou uma Área de trabalho, GETNEXTMODIFIED( ) retornará o


número de registro correspondente ao próximo registro modificado na tabela ou cursor selecionados
no momento.

Comentários

GETNEXTMODIFIED( ) retornará 0 se não houver nenhum registro modificado depois daquele


que você especificou. Um registro será considerado modificado se o conteúdo de qualquer um de
seus campos sofrer qualquer tipo de alteração (mesmo se o conteúdo original do campo for
restaurado) ou o status de exclusão do registro for alterado.

GETNEXTMODIFIED( ) pode operar somente em tabelas e cursores para os quais a utilização de


buffer de tabela estiver ativada. A utilização de buffer de tabela é ativada com
CURSORSETPROP( ).

GETNEXTMODIFIED( ), exemplo da função

O exemplo a seguir demonstra como se pode utilizar GETNEXTMODIFIED( ) para determinar


quais registros em uma tabela foram alterados. MULTILOCKS é ajustado para ON, um
requerimento para utilização de buffer de tabela. A tabela customer no banco de dados testdata é
aberta, e CURSORSETPROP( ) é, então utilizada para ajustar o modo de utilização do buffer para
utilização de buffer otimista (5).
SKIP é emitido para mover o ponteiro do registro para o segundo registro, e o campo cust_id é
modificado com REPLACE. GETNEXTMODIFIED(0) é utilizado para exibir um número de
registro do registro seguinte modificado (2, o segundo registro), iniciando a partir do início da
tabela. TABLEREVERT( ) é utilizado para retornar a tabela ao seu estado original, e
GETNEXTMODIFIED(0) é novamente utilizado para exibir o número do registro do registro
seguinte modificado (0, indicando que não há registros modificados).

CLOSE DATABASES
CLEAR
OPEN DATABASE SYS(2004)+"samples\data\testdata"
SET MULTILOCKS ON && Permite utilização de buffer de tabela
UTILIZE Customer && Abre a tabela customer
=CURSORSETPROP("Utilização de tabela", 5, "cliente") && ativa utilização de buffer de tabela

SKIP && Move o registro do ponteiro para o segundo registro

* Altera o conteúdo dos campos


REPLACE cust_id WITH "***"

* Chama a função MESSAGEBOX com resultados de GETNEXTMODIFIED


=MESSAGEBOX("Registro " + ALLTRIM(STR(GETNEXTMODIFIED(0))) + ;

" alterado.",0,"Resultados")

* Retorna a tabela e exibe resultados com MESSAGEBOX


=TABLEREVERT(.T.) && Descarta todas as alterações de tabela
nChange=GETNEXTMODIFIED(0)
IF nChange=0
=MESSAGEBOX("Registro(s) foram revertidos.",0,"Resultados")
ELSE
=MESSAGEBOX("Registro " + ALLTRIM(STR(GETNEXTMODIFIED(0))) + ;
" alterado.",0,"Resultados")
ENDIF
GETPAD( ), função

Retorna o título de menu para uma dada posição na barra de menus.

Sintaxe

GETPAD(cNomeBarraMenus, nPosiçãoBarraMenus)

Tipos de retorno

Caractere

Argumentos

cNomeBarraMenus Especifica o nome da barra de menus.

nPosiçãoBarraMenus Especifica uma posição na barra de menus. nPosiçãoBarraMenus pode variar


de 1 (o nome situado mais à esquerda na barra de menus) até o número de títulos de menus na barra
de menus.

Comentários

Os nomes de menus em uma barra de menus podem ser adicionados, removidos ou reorganizados.
Utilize DEFINE PAD para adicionar um nome de menu a uma barra de títulos ou RELEASE PAD
para remover um título de menu.

GETPAD( ), exemplo da função

O programa a seguir utiliza GETPAD( ) para testar se o nome do menu Editar é uma barra de menu
do sistema no Visual FoxPro. Caso afirmativo, GETPAD( ) retornará o nome do menu. (Para
retornar a barra de menu Editar ao seu estado padrão, emita o comando SET SYSMENU TO
DEFAULT.)

FOR gnCount = 1 TO CNTPAD('_msysmenu') && Número de pads


IF PRMPAD('_msysmenu', GETPAD('_msysmenu', gnCount)) = 'Edit'
RELEASE PAD (GETPAD('_msysmenu', gnCount)) OF _msysmenu
EXIT
ENDIF
ENDFOR

GO | GOTO, comando

Move o ponteiro do registro para o número de registro especificado.

Sintaxe

GO [RECORD] nNúmeroRegistro [IN nÁreaTrabalho | IN cAliasTabela]


– Ou –
GO TOP | BOTTOM [IN nÁreaTrabalho | IN cAliasTabela]
– Ou –
GOTO [RECORD] nNúmeroRegistro [IN nÁreaTrabalho | IN cAliasTabela]
– Ou –
GOTO TOP | BOTTOM [IN nÁreaTrabalho | IN cAliasTabela]

Argumentos

RECORD nNúmeroRegistro Especifica o número do registro físico para o qual o ponteiro do


registro deve ser movido. Você pode omitir GO ou GOTO totalmente e especificar apenas o número
do registro. Caso especifique apenas o número do registro, você poderá mover o ponteiro do
registro somente dentro da Área de trabalho atual.

IN nÁreaTrabalho Especifica a Área de trabalho da tabela na qual o ponteiro do registro é movido.

IN cAliasTabela Especifica o alias da tabela na qual o ponteiro do registro é movido.

TOP Posiciona o ponteiro do registro no primeiro registro na tabela. Caso a tabela esteja utilizando
um índice ascendente, o primeiro registro será o que apresenta o menor valor-chave. Se o índice
estiver em ordem descendente, o primeiro registro será o que apresenta o maior valor-chave.
BOTTOM Posiciona o ponteiro do registro no último registro da tabela. Caso a tabela esteja
utilizando um índice ascendente, o último registro será o que apresenta o maior valor-chave. Se o
índice estiver em ordem descendente, o último registro será o que apresenta o menor valor-chave.

Comentários

GO e GOTO podem ser utilizados alternativamente. Estes comandos operam na Área de trabalho
atual da tabela, a menos que você especifique outra Área de trabalho com a cláusula IN.

GO | GOTO, exemplo do comando

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
UTILIZE products && Abre tabela de produtos
UTILIZE customer IN 0 && Abre tabela Customer
GO BOTTOM IN products
CLEAR
? RECNO('produtos')
GO TOP
? RECNO( ) && Exibe 1
GO 5
? RECNO( ) && Exibe 5
GOMONTH( ), função

Retorna a data que indica um número de meses especificado antes ou depois de uma determinada
expressão de data ou de data e hora.

Sintaxe

GOMONTH(dExpressão | tExpressão, nNúmeroDeMeses)

Tipos de retorno

Data

Argumentos

dExpressão Especifica uma expressão de data para a qual GOMONTH( ) retorna a data.

tExpressão Especifica uma expressão de data e hora para a qual GOMONTH( ) retorna a data.

NNúmeroDeMeses Especifica o número de meses da data ou data e hora. Especifica o número de


meses da data ou da data e hora. Se nNúmeroDeMeses for positivo, GOMONTH( ) retornará uma
data correspondente a nNúmeroDeMeses meses depois da data ou data e hora. Se
nNúmeroDeMeses for negativo, GOMONTH( ) retornará uma data correspondente a
nNúmeroDeMeses meses antes da data ou data e hora.

GOMONTH( ), exemplo da função

SET CENTURY ON
STORE GOMONTH({08/02/95}, 5) TO gdDeadLine

CLEAR
? gdDeadLine && Exibe 01/02/1996
? GOMONTH({12/31/95}, 2) && Exibe 02/29/1996
? GOMONTH({12/31/95}, -2) && Exibe 10/31/1995

HEADER( ), função

Retorna o número de bytes no cabeçalho do arquivo de tabela atual ou especificado.

Sintaxe

HEADER([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Numérico

Argumentos

nÁreaTrabalho | cAliasTabela Retorna o tamanho do cabeçalho de uma tabela aberta em uma outra
área de trabalho. nÁreaTrabalho especifica o número da área de trabalho e cAliasTabela especifica
o alias da tabela. Se a área de trabalho e o alias forem omitidos, HEADER( ) retornará o tamanho
do cabeçalho da tabela aberta na área de trabalho atual.

HEADER( ) retornará 0 se não houver uma tabela aberta na área de trabalho especificada. Se uma
tabela não possuir o alias especificado, o Visual FoxPro exibirá uma mensagem de erro.
Comentários

Um cabeçalho de tabela contém informações sobre a própria tabela, como os tamanhos e nomes de
campo e a presença de um arquivo de memo ou índice estrutural.

HELP, comando

Abre a janela da Ajuda.

Sintaxe

HELP
[Tópico | ID nIDContexto]
[IN [WINDOW] NomeJanela | IN [WINDOW] SCREEN
| IN [WINDOW]]
[NOWAIT]

Argumentos

Tópico Especifica o tópico da Ajuda a ser exibido. Se você incluir somente um trecho de um título
de tópico, o Visual FoxPro abre a janela da Ajuda e exibe o tópico com o título que mais
corresponde ao trecho incluído.

ID nIDContexto Especifica o tópico da Ajuda a exibir, com base na ID de contexto do tópico.

Ao utilizar a Ajuda no estilo .DBF, nIDContexto será um valor no campo Contextid da tabela da
ajuda. O campo Contextid deverá ser o primeiro campo da tabela.

Ao utilizar a Ajuda no estilo gráfico, nIDContexto será um número de contexto na seção MAP do
arquivo de projeto da Ajuda.

IN [WINDOW] NomeJanela Abre a janela da Ajuda dentro de uma janela pai. A janela da Ajuda
não assume as características da janela pai onde é colocada. Se a janela da Ajuda
for ativada dentro de uma janela pai, não poderá ser movida para fora da janela pai. Se a janela pai
for movida, a janela da Ajuda será movida com ela. Para abrir a janela da Ajuda
de dentro de uma janela pai, é necessário que a janela pai seja primeiro definida com DEFINE
WINDOW.

IN [WINDOW] SCREEN Coloca a janela da Ajuda explicitamente na janela principal do Visual


FoxPro.

NOWAIT Na Ajuda do estilo .DBF, especifica que a execução do programa deve continuar depois
da janela da Ajuda ser aberta. Caso você omita NOWAIT ao utilizar a Ajuda do estilo .DBF, a
execução do programa será suspensa na linha que contém o comando HELP até que a janela da
Ajuda seja fechada.

Na Ajuda do estilo gráfico, o argumento NOWAIT não tem efeito e a execução do programa
sempre continua depois que o comando HELP é emitido.

Comentários

Para obter maiores informações sobre a criação do seu próprio sistema de Ajuda, consulte a parte 7,
“Criando arquivos de ajuda”, no Guia do Desenvolvedor.
HIDE MENU, comando

Oculta uma ou mais barras de menus ativas ou definidas pelo usuário.

Sintaxe

HIDE MENU NomeBarraMenu1 [, NomeBarraMenu2 ...] | ALL


[SAVE]

Argumentos

NomeBarraMenu1 [, NomeBarraMenu2 ...] Especifica o nome da barra de menus ou uma lista de


barras de menus (separadas por vírgulas) a serem ocultadas.

ALL Oculta todas as barras de menus definidas.

SAVE Coloca uma imagem de uma barra de menus na tela ou em uma janela. Colocar uma
imagem de uma barra de menus na tela é útil durante o desenvolvimento e teste de um programa.
Imagens de barras de menus podem ser retiradas da janela principal do Visual FoxPro ou de uma
janela definida pelo usuário com CLEAR.

Comentários

HIDE MENU remove a barra de menus especificada, um conjunto de barras de menus ou todas as
barras de menus da janela principal do Visual FoxPro ou de uma janela definida pelo usuário sem
remover a definição de menu da memória. Para que uma barra de menus possa ser ocultada, ela
deve primeiro ser criada com DEFINE MENU. Ocultar uma barra de menus não é a mesma coisa
que desativá-la. Quando uma barra de menus está oculta, ela fica residente na memória e pode ser
exibida na janela principal do Visual FoxPro ou em uma janela definida pelo usuários com
ACTIVATE MENU ou SHOW MENU.
HIDE POPUP, comando

Oculta um ou mais menus ativos criados com DEFINE POPUP.

Sintaxe

HIDE POPUP NomeMenu1 [, NomeMenu2 ...] | ALL


[SAVE]

Argumentos

NomeMenu1 [, NomeMenu2 ...] Especifica o nome do menu ou da lista de menus (separados por
vírgula) a serem ocultados.

ALL Oculta todos os menus definidos.

SAVE Coloca uma imagem de um menu na janela principal do Visual FoxPro ou em uma janela
definida pelo usuário. Colocar uma imagem de um menu na tela é útil durante o desenvolvimento e
teste do programa. As imagens de menu podem ser retiradas da janela principal do Visual FoxPro
ou de uma janela definida pelo usuário com CLEAR.

Comentários

HIDE POPUP remove o menu especificado, um conjunto de menus ou todos os menus da janela
principal do Visual FoxPro ou de uma janela definida pelo usuário sem remover as definições de
menu da memória. Para que um menu possa ser ocultado, ele deve primeiro ser criado com
DEFINE POPUP. Ocultar um menu não é a mesmo coisa que desativá-lo. Quando um menu é
ocultado, ele fica residente na memória e pode ser exibido na janela principal do Visual FoxPro ou
em uma janela definida pelo usuário com ACTIVATE POPUP ou SHOW POPUP.
HIDE WINDOW, comando

Oculta uma janela ativa definida pelo usuário ou uma janela do sistema do Visual FoxPro.

Sintaxe

HIDE WINDOW NomeJanela1 [, NomeJanela2 ... ] | ALL | SCREEN


[ IN [WINDOW] NomeJanelaN | IN [WINDOW] SCREEN
| IN [WINDOW]]
[BOTTOM | TOP | SAME]

Argumentos

NomeJanela1 [, NomeJanela2 ...] Especifica o nome da janela ou uma lista de janelas (separadas
por vírgulas) a serem ocultadas. Caso você emita HIDE WINDOW sem argumentos, a janela ativa
será ocultada. No Visual FoxPro, é possível especificar o nome de uma barra de ferramentas a ser
ocultada. Consulte SHOW WINDOW para obter uma lista dos nomes das barras de ferramentas do
Visual FoxPro.

ALL Oculta todas as janelas.


SCREEN Oculta a janela principal do Visual FoxPro. Para exibi-la novamente, emita ACTIVATE
WINDOW SCREEN ou SHOW WINDOW SCREEN.

IN [WINDOW] NomeJanelaN Oculta a janela em uma janela-pai.

IN [WINDOW] SCREEN Oculta explicitamente uma janela na janela principal do Visual FoxPro.

BOTTOM | TOP | SAME Especifica a posição em que as janelas estão ocultas em relação a outras
janelas. BOTTOM coloca uma janela atrás de todas as outras. TOP (padrão) coloca uma janela em
frente a todas as outras. SAME oculta uma janela sem afetar sua colocação frontal ou posterior.
Para preservar as posições relativas de várias janelas ocultas quando elas são reexibidas com
SHOW WINDOW ALL, inclua a palavra-chave SAME ao ocultar as janelas.

Comentários

HIDE WINDOW HIDE WINDOW remove uma janela ou um conjunto de janelas da janela
principal do Visual FoxPro ou de uma janela definida pelo usuário. É possível utilizar HIDE
WINDOW para ocultar janelas do sistema como a janela Comando, a janela Sessão de dados e
assim por diante.

Ocultar uma janela não é o mesmo que fechá-la. Ao ser ocultada, a janela permanece na memória e
continua ativa. A saída pode ser enviada para uma janela oculta, mas não é possível visualizá-la.

Liberar uma janela remove-a da memória. As janelas removidas da memória devem ser redefinidas
para serem exibidas novamente. Uma janela pode ser exibida com ACTIVATE WINDOW ou
SHOW WINDOW.

Para ocultar uma janela do sistema ou uma barra de ferramentas (no Visual FoxPro), coloque a
janela do sistema inteira ou o nome da barra de ferramentas entre aspas. Por exemplo, para ocultar a
barra de ferramentas Controles de relatório no Visual FoxPro, emita o comando:

HIDE WINDOW “Controles de Relatório”

HIDE WINDOW, exemplo de comando

No exemplo a seguir, uma janela denominada wOutput1 é definida e ativada. O programa espera
que você pressione uma tecla para, em seguida, ocultar a janela. O programa espera que você
pressione uma tecla novamente para, depois, exibir a janela. O pressionamento de uma tecla pela
terceira vez remove a janela da tela e da memória.

DEFINE WINDOW wOutput1 FROM 6,1 TO 19,75 TITLE 'Output' ;


CLOSE FLOAT GROW SHADOW ZOOM
ACTIVATE WINDOW wOutput1

WAIT WINDOW 'Press a key to hide this window'


HIDE WINDOW wOutput1

WAIT WINDOW 'Press a key to see the window again'


SHOW WINDOW wOutput1

WAIT WINDOW 'Press a key to remove the window from memory'


DEACTIVATE WINDOW wOutput1
RELEASE WINDOW wOutput1

HOME( ), função

Retorna o nome do diretório de onde o Visual FoxPro foi inicializado.

Sintaxe

HOME( )

Tipos de Retorno

Caractere

Comentários

HOME( ) retorna o nome do diretório de onde o Visual FoxPro foi inicializado.

HOME( ) é idêntico a SYS(2004) e é fornecido para manter a compatibilidade com o dBASE IV.

HOME( ), exemplo de função

? 'Diretório de inicialização do Visual FoxPro : ', HOME( )

HOUR( ), função

Retorna a parte da hora de uma expressão DataHora.


Sintaxe

HOUR(tExpressão)

Argumentos

tExpressão Especifica uma expressão DataHora da qual HOUR( ) retorna a hora.

Tipos de Retorno

Numérico

Comentários

HOUR( ) retorna um valor numérico baseado em um formato de 24 horas e não é afetado pela
definição atual de SET HOURS. Por exemplo, se SET HOURS é 12 ou 24, o comando a seguir
retorna 13:

? HOUR({02/16/95 1:00pm})

HOUR( ), exemplo de função

O exemplo a seguir exibe a parte de hora do horário atual e a parte de hora de um horário
específico.

CLEAR
? HOUR(DATETIME( ))
? HOUR({10:42am}) && Exibe 10
IF... ENDIF, comando

Executa condicionalmente um conjunto de comandos baseados no valor de uma expressão lógica.

Sintaxe

IF lExpressão [THEN]
Comandos
[ELSE
Comandos]
ENDIF

Argumentos

lExpressão Especifica a expressão lógica avaliada. Caso lExpressão resulte em verdadeiro (.T.),
todos os comandos depois de IF ou THEN e antes de ELSE ou ENDIF (aquele que ocorrer
primeiro) serão executados.

· Se lExpressão for falso (.F.) e ELSE for incluído, todos os comandos depois de ELSE e
antes de ENDIF serão executados.
· Se lExpressão for falso (.F.) e ELSE não for incluído, todos os comandos entre IF e ENDIF
serão ignorados. Neste caso, a execução do programa continuará com o primeiro comando depois
de ENDIF.

Comentários

É possível aninhar um bloco IF... ENDIF dentro de outro bloco IF... ENDIF.

Os comentários precedidos por && podem ser colocados na mesma linha depois de IF, THEN,
ELSE e ENDIF. Esses comentários são ignorados durante a compilação e a execução do programa.

IF... ENDIF, exemplo do comando


CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre a tabela customer

GETEXPR 'Digite a condição para localizar ' TO gcTemp;


TYPE 'L' DEFAULT 'EMPRESA = ""'
LOCATE FOR &gcTemp && Digita a expressão LOCATE
IF FOUND( ) && Foi encontrado?
DISPLAY && Em caso positivo, exibe o registro
ELSE && Em caso negativo
? 'Condição ' + gcTemp + ' não encontrada ' && Exibe a mensagem
ENDIF
USE

IIF( ), função

Retorna um de dois valores, dependendo do valor de uma expressão lógica.

Sintaxe

IIF(lExpressão, eExpressão1, eExpressão2)

Tipos de retorno

Caractere, Numérico, Moeda, Data ou DataHora

Argumentos

lExpressão Especifica a expressão lógica que IIF( ) avalia.

eExpressão1, eExpressão2 Se lExpressão resultar em verdadeiro (.T.), será retornado eExpressão1.


Se lExpressão resultar em falso (.F.), será retornado eExpressão2.

Comentários
Esta função, também conhecida como IF Imediato, avalia uma expressão lógica e, em seguida,
retorna uma de duas expressões. Se a expressão lógica resultar em verdadeiro (.T.), IIF( ) retornará
a primeira expressão. Se a expressão lógica resultar em falso (.F.), IIF( ) retornará a segunda
expressão.

Dica Pode-se utilizar esta função no lugar de IF ... ENDIF com expressões condicionais simples.
Ela é especialmente útil em expressões de relatório e etiqueta que especificam condicionalmente
conteúdos de campos. A execução da função IIF( ) também é consideravelmente mais rápida do que
a execução de uma função IF ... ENDIF equivalente.

IIF( ), exemplo da função

O exemplo a seguir utiliza IIF( ) para verificar se o campo Notes na tabela employee está vazio. Se
estiver vazio, “Nenhuma descrição” será exibida; caso contrário, os conteúdos do campo Memo
serão exibidos.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE employee && Abre a tabela Employee
CLEAR

SCAN
? IIF(EMPTY(notes), 'Nenhuma observação', notes) && Campo Memo vazio?
ENDSCAN

IMPORT, comando

Importa dados de um formato de arquivo externo para criar uma nova tabela do Visual FoxPro.

Sintaxe

IMPORT FROM NomeArquivo


[DATABASE NomeBancoDados [NAME NomeTabelaLongo]]
[TYPE] FW2 | MOD | PDOX | RPD | WK1
| WK3 | WKS | WR1 | WRK | XLS
| XL5 [SHEET cNomeFolha]
[AS nPáginaCódigo]
Argumentos

NomeArquivo Especifica o nome do arquivo do qual os dados devem ser importados. Se você não
incluir uma extensão no nome de arquivo, será considerada a extensão padrão para o tipo de arquivo
especificado.

DATABASE NomeBancoDados Especifica um banco de dados para o qual a nova tabela é


adicionada.

NAME NomeTabelaLongo Especifica um nome longo para a nova tabela. Nomes longos podem
conter até 128 caracteres e podem ser utilizados no lugar de nomes curtos de arquivos no banco de
dados.

TYPE A palavra-chave TYPE é opcional, mas você deve incluir um dos tipos de arquivo descritos
abaixo:

Tipo de arquivo Descrição

FW2 Incluir FW2 para importar arquivos FW2, criados pelo Framework II.
MOD Incluir MOD para importar arquivos MOD, criados pelo Microsoft Multiplan versão 4.1.
PDOX Incluir PDOX para importar arquivos do Paradox. Os arquivos de bancos de dados do
Paradox versões 3.5 e 4.0 da Borland podem ser importados ao incluir a opção PDOX.
RPD Incluir RPD para importar arquivos RPD criados pelo RapidFile.
WK1 | WK3 | WKS Incluir WK1 para importar dados de uma planilha do Lotus 1, 2 e 3. As
colunas da planilha se tornam campos na tabela e as linhas, registros na tabela. É atribuída uma
extensão .WK1 a planilhas criadas no Lotus 1, 2 e 3 revisões 2.x; uma extensão .WK3 a planilhas
criadas no Lotus1, 2 e 3 revisões 3.x; e uma extensão .WKS a planilhas criadas no Lotus1, 2 e 3,
revisão 1-A.
WR1 | WRK Incluir WR1 para importar dados de uma planilha do Lotus Symphony. As colunas
e as linhas da planilha tornam-se respectivamente campos e registros na tabela. É atribuída uma
extensão .WR1 a planilhas criadas no Symphony versão 1.10 e é atribuída uma extensão .WRK a
planilhas criadas no Symphony versão 1.1.
XLS Incluir XLS para importar dados de planilhas do Microsoft Excel versões 2.0, 3.0 e 4.0. As
colunas e as linhas da planilha tornam-se respectivamente campos e registros na tabela. Os arquivos
de planilhas criados no Microsoft Excel têm a extensão .XLS.

XL5 [SHEET cNomeFolha] Incluir XL5 para importar dados do Microsoft Excel versão 5.0. As
colunas e as linhas da planilha tornam-se respectivamente campos e registros na tabela. Os arquivos
de planilhas criados no Microsoft Excel têm a extensão .XLS. Se você omitir a cláusula SHEET, os
dados em Plan1 serão importados. Para importar dados de uma folha específica, incluir a palavra-
chave SHEET e especificar o nome da folha com cNomeFolha.

AS nPáginaCódigo Especifica a página de código do arquivo importado. O Visual FoxPro copia o


conteúdo do arquivo importado e, à medida que copia os dados, converte automaticamente os dados
para a página de código atual do Visual FoxPro.
Caso você especifique um valor para nPágina Código que não seja suportado, o VisualFoxPro
exibirá uma mensagem de erro. Para que nPáginaCódigo possa exibir uma caixa de diálogo Página
de código, com a qual você define uma página para o arquivo importado, utilize o GETCP().
Se AS nPáginaCódigo for omitida e o Visual FoxPro não conseguir determinar a página de código
do arquivo importado, ele copiará o conteúdo do arquivo importado e, à medida que copia os dados,
converterá automaticamente os dados para a página de código atual do Visual FoxPro. Se AS
nPáginaCódigo for omitida e o Visual FoxPro conseguir determinar a página de código do arquivo
importado, ele converterá automaticamente os dados do arquivo importado da página de código dos
dados para a página de código atual do Visual FoxPro. Utilize CPCURRENT( ) para determinar a
página de código atual do Visual FoxPro.

Se nPáginaCódigo for igual a 0, o Visual FoxPro irá considerar que a página de código do arquivo
importado é a mesma e atual do Visual FoxPro e não será feita nenhuma conversão de página de
código.

Comentários

A maioria dos pacotes de software armazena seus dados em um formato de arquivo que não pode
ser aberto diretamente no Visual FoxPro. IMPORT cria uma nova tabela do Visual FoxPro a partir
dos dados armazenados em formatos de arquivo que o Visual FoxPro não consegue ler diretamente.
Uma nova tabela é criada com o mesmo nome do arquivo do qual os dados são importados. A
extensão .DBF é atribuída à tabela recém-criada.
INDEX, comando

Cria um arquivo de índice para exibir e acessar registros de tabelas em uma ordem lógica.

Sintaxe

INDEX ON eExpressão TO NomeArquivoIDX | TAG NomeMarca [OF NomeArquivoCDX]


[FOR lExpressão]
[COMPACT]
[ASCENDING | DESCENDING]
[UNIQUE | CANDIDATE]
[ADDITIVE]

Argumentos

eExpressão Especifica uma expressão de índice que pode incluir o nome de um ou mais campos a
partir da tabela atual. Uma chave de índice com base na expressão de índice é criada no arquivo de
índice para cada registro da tabela. O Visual FoxPro utiliza estas chaves para exibir e acessar
registros da tabela.

Observação Não utilize uma variável, um elemento de matriz , um campo ou expressão de campo
de uma tabela em uma outra Área de trabalho para eExpressão. Se você acessar um índice que
contenha uma variável ou um campo inexistente ou que não possa ser localizado, o Visual FoxPro
irá gerar uma mensagem de erro. Campos Memo não podem ser utilizados sozinhos em expressões
de arquivo de índice; devem ser combinados com outras expressões de caracteres.

Se você incluir um campo precedido por um alias de tabela ou letra de Área de trabalho na
expressão de índice, o Visual FoxPro gera uma mensagem de erro. Embora você possa otimizar
cláusulas FOR com a tecnologia Rushmore caso sejam incluídos campos de alias, ainda assim,
insistimos que se evite o uso de campos de alias na criação de índices. Em diversos casos
(USE ... AGAIN, buscas SQL, e assim por diante), um alias diferente é atribuído automaticamente a
uma tabela e o índice pode não estar atualizado ou ser utilizado de forma adequada.

Para obter maiores informações sobre a tecnologia Rushmore, consulte “Compreendendo a


tecnologia Rushmore”, no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

Se você tentar construir um índice com uma chave com tamanho variável, ela será preenchida com
espaços. O Visual FoxPro não suporta chaves de índice de tamanho variável.

É possível criar uma chave de índice de comprimento zero. Por exemplo, este tipo de chave é criado
quando a expressão de índice é uma subseqüência de um campo Memo vazio. Essa chave gera uma
mensagem de erro. Quando o Visual FoxPro cria um índice, ele avalia campos no primeiro registro
da tabela. Se um campo estiver vazio, talvez seja necessário inserirem-se dados temporários no
primeiro registro, a fim de impedir a ocorrência de uma chave de índice de comprimento zero.

O comprimento de uma chave de índice para um índice .IDX deve estar entre 1 e 100 caracteres.
Para um índice .CDX , esta deve estar entre 1 e 240 caracteres.
TO NomeArquivoIDX Cria um arquivo de índice .IDX. O arquivo de índice recebe a extensão
padrão .IDX, que pode ser substituída incluindo-se uma extensão diferente ou alterando-se a
extensão de índice padrão no arquivo de configuração do Visual FoxPro. As regras padrão do MS-
DOS para nomes de arquivos devem ser observadas na denominação de arquivos de índice.

TAG NomeMarca [OF NomeArquivoCDX] Cria um arquivo de índice composto. Trata-se de um


arquivo de índice único que consiste em qualquer número de marcas separadas (entradas de índice).
Cada marca é identificada pelo seu nome exclusivo. Os nomes devem começar com uma letra ou
um sublinhado e podem consistir em qualquer combinação de até 10 letras, dígitos ou sublinhados.
O número de marcas em um arquivo de índice composto é limitado apenas pelo espaço em disco e
pela memória disponíveis.

Os arquivos de índice composto de várias entradas são sempre compactados. Não é necessário
incluir COMPACT ao criar um desses arquivos. Seus nomes recebem a extensão .CDX.

É possível criar dois tipos de arquivos de índice composto: estrutural e não-estrutural.

Se você excluir a cláusula opcional OF NomeArquivoCDX de TAG NomeMarca, você cria um


arquivo de índice composto estrutural. Este tem sempre o mesmo nome base da tabela e é aberto
automaticamente quando ela é aberta.

Caso não seja possível localizar o arquivo de índice composto estrutural de uma tabela ou ele tiver
sido excluído ou renomeado, uma caixa de diálogo aparecerá quando você tentar abrir a tabela. Se
você selecionar o botão padrão Cancelar, a tabela não será aberta. Se selecionar Ignorar, ela será
aberta e será removido o sinalizador existente no cabeçalho da tabela e que indica a presença de um
arquivo de índice composto estrutural associado.

Dica Para associar novamente um índice composto estrutural, emita o comando a seguir:

USE NomeTabela INDEX NomeArquivoCDX

Se você incluir a cláusula opcional OF NomeArquivoCDX após TAG NomeMarca, você cria um
arquivo de índice composto não estrutural. Ao contrário de um arquivo de índice composto
estrutural, o não-estrutural deve ser aberto explicitamente com SET INDEX ou com a cláusula
INDEX em USE.

Caso o arquivo de índice composto já tenha sido criado e aberto, a emissão de INDEX com TAG
NomeMarca adicionará uma marca ao arquivo de índice composto.

NomeArquivoCDX é o nome do índice composto estrutural associado. Certifique-se de reindexar a


tabela caso ela tenha sido modificada depois que o índice composto estrutural foi desassociado.

FOR lExpressão Especifica uma condição pela qual somente os registros que satisfazem a
expressão de filtragem lExpressão estarão disponíveis para exibição e acesso; chaves de índice são
criadas no arquivo de índice apenas para os registros correspondentes à expressão de filtragem.

Rushmore otimiza um comando INDEX ... FOR lExpressão caso isto seja possível. Para obter um
melhor desempenho, utilize uma expressão otimizável na cláusula FOR.
Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia
Rushmore” no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

COMPACT Cria um arquivo .IDX compactado.

ASCENDING Especifica uma ordem crescente para o arquivo .CDX. Como padrão, as marcas
.CDX são criadas em ordem crescente (você pode incluir ASCENDING como um lembrete da
ordem do arquivo de índice). É possível indexar uma tabela em ordem inversa incluindo
DESCENDING.

DESCENDING Especifica uma ordem decrescente para o arquivo .CDX. Não é possível incluir
DESCENDING na criação de arquivos de índice .IDX. No entanto, é possível especificar uma
ordem decrescente para um arquivo de índice .IDX com SET INDEX e SET ORDER.

UNIQUE Especifica que apenas o primeiro registro localizado com um valor de chave de índice
específico será incluído em um arquivo .IDX ou em uma marca .CDX. Pode-se utilizar UNIQUE
para impedir a exibição de registros duplicados ou o acesso a eles. Todos os registros adicionados
com chaves de índice duplicadas são excluídos do arquivo de índice. Utilizar a opção UNIQUE de
INDEX é a mesma coisa que executar SET UNIQUE ON antes de emitir INDEX ou REINDEX.

Quando uma marca de índice ou um índice UNIQUE estão ativos e um registro duplicado é
alterado de uma forma que altere a sua chave de índice, a marca de índice ou o índice são
atualizados. No entanto, o próximo registro duplicado com a chave de índice original somente
poderá ser acessado ou exibido depois que o arquivo for reindexado com REINDEX.

CANDIDATE Cria uma marca de índice estrutural candidato. Pode-se incluir a palavra-chave
CANDIDATE apenas na criação de uma marca de índice estrutural; caso contrário, o Visual FoxPro
gera uma mensagem de erro.

A marca de índice candidato impede valores duplicados no campo ou em uma combinação de


campos especificada na expressão de índice eExpressão. O termo “candidato” refere-se ao tipo de
índice; visto que índices candidatos impedem valores duplicados, eles se qualificam como
“candidato” a índice primário.

O Visual FoxPro gera um erro se você criar uma marca de índice candidato para um campo ou uma
combinação de campos que já contenha valores duplicados.

Para obter maiores informações sobre marcas de índice primário e candidato, consulte “Definindo
um índice primário ou candidato” no capítulo 7, “Trabalhando com tabelas”, no Guia do
Desenvolvedor.

ADDITIVE Mantém aberto qualquer arquivo de índice anteriormente aberto. Se você omitir a
cláusula ADDITIVE ao criar um ou mais arquivos de índice para uma tabela com INDEX, todos os
arquivos de índice anteriormente abertos (exceto o índice composto estrutural) serão fechados.

Comentários
Os registros de uma tabela que tem um arquivo de índice são exibidos e acessados na ordem
especificada pela expressão de índice. A ordem física dos registros na tabela não é alterada por um
arquivo de índice.

Se SET TALK estiver ativado (ON), o Visual FoxPro relatará quantos registros são indexados
durante o processo de indexação. O intervalo de exibição destes registros durante a indexação pode
ser especificado com SET ODOMETER.

Utilize DISPLAY STATUS para exibir maiores informações sobre arquivos de índice abertos. Estas
informações incluem os nomes de todos os arquivos de índice abertos, seus tipos (estrutural, .CDX,
.IDX), suas expressões de índice, suas seqüências de ordenação e o nome da marca principal ou do
arquivo de índice principal.

O número de arquivos de índice (.IDX ou .CDX) que você pode abrir é limitado apenas pelos
recursos do sistema e memória. No Visual FoxPro, no FoxPro para Windows e no FoxPro para MS-
DOS, o número total de arquivos que podem ser abertos é determinado na definição FILES do
arquivo de configuração CONFIG.SYS do MS-DOS. Para obter maiores informações sobre a
definição FILES, consulte o manual do MS-DOS.

Tipos de índice O Visual FoxPro permite a criação de dois tipos de arquivos de índice:

· Arquivos de índice composto .CDX que contêm várias entradas de índice denominadas
marcas
· Arquivos de índice .IDX que contêm uma entrada de índice

Você pode também criar um arquivo de índice composto estrutural, que é automaticamente aberto
com a tabela.

Dica Devido aos arquivos de índice composto estrutural serem automaticamente abertos quando a
tabela é aberta, eles correspondem ao tipo de índice preferível.

Inclua COMPACT para criar arquivos de índice .IDX compactos. Arquivos de índice compostos
sempre são compactados.

Atualização e ordem de índice Apenas um arquivo de índice (o de índice principal) ou marca


(marca principal) controla a ordem em que a tabela será exibida ou acessada. Determinados
comandos (SEEK, por exemplo) utilizam o arquivo de índice principal ou marca para procurar
registros. Entretanto, todos os arquivos de índice .IDX e .CDX abertos são atualizados, conforme as
alterações são feitas nas tabelas. É possível designar o arquivo de índice principal ou marca com a
cláusula INDEX de USE ou com SET INDEX e SET ORDER.

Funções definidas pelo usuário Embora uma expressão de índice possa conter uma função definida
pelo usuário, você não deverá utilizar funções definidas pelo usuário em uma expressão de índice.
Isto aumenta o tempo que as funções levam para criar ou atualizar o índice. Além disso, as
atualizações de índice não podem ocorrer quando uma função definida pelo usuário é utilizada para
uma expressão de índice.
Caso uma função definida pelo usuário seja utilizada em uma expressão de índice, o Visual FoxPro
deverá ser capaz de localizar a função definida pelo usuário. Quando o Visual FoxPro cria um
índice, a expressão de índice é gravada no arquivo de índice, mas apenas uma referência à função
definida pelo usuário é incluída naquela expressão.

Index, exemplos

O Exemplo 1 abre a tabela customer e cria um arquivo de índice denominado complist


, o qual exibe e processa registros em ordem alfabética do campo Company.
No Exemplo 2, a tabela customer é novamente aberta e um arquivo de índice denominado citycomp
é criado a partir de uma subseqüência dos primeiros cinco caracteres do campo City, e os primeiros
seis caracteres do campo Company. Quando esse arquivo de índice é utilizado, os registros na
tabela são ordenados, em primeiro lugar, de acordo com o campo City, e ,em segundo lugar, de
acordo com o campo Company.

No Exemplo 3, as marcas de índice são criadas. A primeira marca é uma marca de índice composto
estrutural para address. A segunda é criada em um arquivo de índice não estrutural denominado
custcdx.

* Exemplo 1
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre a tabela customer
INDEX ON company TO complist
CLEAR
DISPLAY STATUS

* Exemplo 2
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre a tabela customer
INDEX ON SUBSTR(city,1,5) + SUBSTR(company,1,6) TO citycomp
CLEAR
DISPLAY STATUS

* Exemplo 3
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')

USE Customer && Abre a tabela customer


INDEX ON address TAG address
INDEX ON company TAG company OF custcdx
CLEAR
DISPLAY STATUS
INKEY( ), função

Retorna um número correspondente ao primeiro clique com o mouse ou ao primeiro


pressionamento de tecla no buffer de teclado.

Sintaxe

INKEY([nSegundos] [, cOcultarCursor])

Tipos de retorno

Numérico

Argumentos

nSegundos Especifica quantos segundos INKEY( ) aguarda um pressionamento de tecla. Caso


nSegundos não seja incluído, INKEY( ) retornará imediatamente um valor para um pressionamento
de tecla. INKEY( ) aguardará indefinidamente um pressionamento de tecla se nSegundos for 0.
cOcultarCursor Exibe ou oculta o cursor, ou procura um clique com o mouse. Para Exibir o cursor,
inclua S em cOcultarCursor. Para ocultá-lo, inclua H em cOcultarCursor. Caso S e H sejam
incluídos em cOcultarCursor, o último caractere em cOcultarCursor terá preferência.

Como padrão, INKEY( ) não detecta um clique com o mouse. Para procurar um clique com o
mouse, inclua M em cOcultarCursor. Se M for incluído em cOcultarCursor, INKEY( ) retornará o
valor 151 para um único clique com o mouse click. Consulte o segundo exemplo na tabela a seguir
para ver como você pode procurar um clique duplo.

Para procurar um clique com o mouse e exibir o cursor, inclua M e S. Para procurar um clique com
o mouse e ocultar o cursor, inclua H e M.

Quando uma macro de teclado está atribuída a uma tecla ou a uma combinação de teclas, você pode
incluir E em cOcultarCursor para expandir a macro de teclado. Quando E está incluído, INKEY( )
retorna um valor correspondente ao primeiro pressionamento de tecla atribuído à macro de teclado.
Você pode retornar valores sucessivos para cada pressionamento de tecla, executando repetidas
vezes INKEY( ) com E incluído. Se você omitir E, INKEY( ) retornará o valor da tecla ou da
combinação de teclas que dispara a macro de teclado.

Qualquer outro caractere diferente de H, M, S e E em cOcultarCursor é ignorado.

A tabela a seguir lista valores de retorno da função INKEY( ) para teclas sozinhas e em combinação
com as teclas SHIFT, CTRL, e ALT Um travessão (—) indica que uma combinação de teclas
retornará nenhum valor.

Tecla Sozinha SHIFT CTRL ALT/+OPÇÃO

F1 28 84 94 104
F2 -1 85 95 105
F3 -2 86 96 106
F4 -3 87 97 107
F5 -4 88 98 108
F6 -5 89 99 109
F7 -6 90 100 110
F8 -7 91 101 111
F9 -8 92 102 112
F10 -9 93 103 113
F11 133 135 137 139
F12 134 136 138 140
1 49 33 — 120
2 50 64 — 121
3 51 35 — 122
4 52 36 — 123
5 53 37 — 124
6 54 94 — 125
7 55 38 — 126
8 56 42 — 127
9 57 40 — 128
0 48 41 — 19
a 97 65 1 30
b 98 66 2 48
c 99 67 3 46
d 100 68 4 32
e 101 69 5 18
f 102 70 6 33
g 103 71 7 34
h 104 72 127 35
i 105 73 9 23
j 106 74 10 36
k 107 75 11 37
l 108 76 12 38
m 109 77 13 50
n 110 78 14 49
o 111 79 15 24
p 112 80 16 25
q 113 81 17 16
r 114 82 18 19
s 115 83 19 31
t 116 84 20 20
u 117 85 21 22
v 118 86 22 47
w 119 87 23 17
x 120 88 24 45
y 121 89 25 21
z 122 90 26 44
INS 22 22 146 162
HOME 1 55 29 151
DEL 7 7 147 163
END 6 49 23 159
PAGE UP 18 57 31 153
PAGE DOWN 3 51 30 161
SETA ACIMA 5 56 141 152
SETA ABAIXO 24 50 145 160
SETA À DIREITA 4 52 2 157
SETA À ESQUERDA 19 54 26 155
ESC 27 —/27 —*/27 —*/1
ENTER 13 13 10 —/166
BACKSPACE 127 127 127 14
TAB 9 15 148/* *
BARRA DE ESPAÇOS 32 32 32/— 57

* Pressionamento de teclas reservado pelo Windows.


Comentários

A função INKEY( ) retornará 0 se nenhuma tecla for pressionada. Caso existam várias teclas no
buffer de teclado, INKEY( ) retornará o valor da primeira tecla inserida no buffer.
INLIST( ), função

Determina se uma expressão corresponde a outra expressão em um conjunto de expressões.

Sintaxe

INLIST(eExpressão1, eExpressão2 [, eExpressão3 ...])

Tipos de retorno

Lógico ou valor nulo

Argumentos

eExpressão1 Especifica a expressão que INLIST( ) procura no conjunto de expressões.

eExpressão2 [, eExpressão3 ...] Especifica o conjunto de expressões na qual a procura deve ser
feita. Você deve incluir, no mínimo, uma expressão (eExpressão2) e, no máximo, 24 expressões
(eExpressão2, eExpressão3 e assim sucessivamente).

Todas as expressões no conjunto de expressões devem ter o mesmo tipo de dado.

Comentários

A função INLIST( ) retornará verdadeiro (.T.) se localizar a expressão no conjunto de expressões;


caso contrário INLIST( ) retornará falso (.F.). O valor nulo é retornado se eExpressão1 for o valor
zero. O valor nulo também é retornado se eExpressão1 não for o valor nulo, eExpressão1 não
corresponder a outra expressão, e pelo menos uma das outras expressões for o valor nulo.

INLIST( ), exemplo da função

Neste exemplo, INLIST( ) determina o quarto do ano para o mês atual. O mês atual é armazenado
na variável gcMonth. Cada instrução CASE utiliza INLIST( ) para determinar se o conteúdo de
gcMonth pode ser localizado na lista de nome de meses. O nome do quarto retornado é armazenado
na variável gcReporTitle.

SET TALK ON
STORE CMONTH(DATE( )) TO gcMonth
DO CASE
CASE INLIST(gcMonth,'Janeiro','Fevereiro','Março')
STORE 'Primeiro quarto' TO gcReporTitle
CASE INLIST(gcMonth,'Abril','Maio','Junho')
STORE 'Segundo quarto' TO gcReporTitle
CASE INLIST(gcMonth,'Julho','Agosto','Setembro')
STORE 'Terceiro quarto' TO gcReporTitle
OTHERWISE
STORE 'Quarto quarto' TO gcReporTitle
ENDCASE
WAIT WINDOW gcReporTitle

INSMODE( ), função

Retorna o modo de inserção atual ou ativa/desativa o modo de inserção.

Sintaxe

INSMODE([lExpressão])

Tipos de retorno

Lógico

Argumentos

lExpressão Ativa ou desativa o modo de inserção. INSMODE(.T.) ativa e INSMODE(.F.) desativa


o modo de inserção. É retornado um valor lógico correspondente à definição do modo de inserção
antes da emissão de INSMODE(.T.) ou INSMODE(.F.).

Comentários

Se você omitir o argumento opcional e o modo de inserção estiver ativado (os caracteres são
inseridos antes do cursor), INSMODE( ) retornará verdadeiro (.T.). Se o modo de inserção estiver
desativado (os caracteres são sobrescritos na posição do cursor), INSMODE( ) retornará falso (.F.).

INSMODE( ), exemplo da função

O exemplo a seguir utiliza INSMODE( ) para ativar o modo de inserção e, em seguida, alterna o
modo de inserção para o estado oposto.

SET TALK ON
=INSMODE(.T.) && Alterna o modo de inserção para on
? INSMODE( )
= INSMODE(!INSMODE( )) && Alterna o modo de inserção para o estado oposto
? INSMODE( )

INT( ), função

Avalia uma expressão numérica e retorna a parte inteira da expressão.

Sintaxe

INT(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica a expressão numérica para qual a função INT( ) retorna a parte inteira.

INT( ), exemplo da função

CLEAR
? INT(12.5) && Exibe 12
? INT(6.25 * 2) && Exibe 12
? INT(-12.5) && Exibe -12
STORE -12.5 TO gnNumber
? INT(gnNumber) && Exibe -12

ISALPHA( ), função

Determina se o caractere mais à esquerda em uma expressão de caracteres é alfabético.

Sintaxe

ISALPHA(cExpressão)

Tipos de retorno

Lógico

Argumentos

cExpressão Especifica a expressão de caracteres que ISALPHA( ) avalia. Todos os caracteres


depois do primeiro caractere em cExpressão são ignorados.

Comentários

ISALPHA( ) retorna verdadeiro (.T.) se o caractere mais à esquerda na expressão especificada é um


caractere alfabético; caso contrário, ISALPHA( ) retorna falso(.F.).

ISALPHA( ), exemplo da função

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abrir tabela de cliente
CLEAR

DISPLAY contact
? ISALPHA(contact) && Exibe .T.
DISPLAY maxordamt
? ISALPHA(cust_id) && Exibe .F.
ISBLANK( ), função

Determina se uma expressão está vazia.

Sintaxe

ISBLANK(eExpressão)

Tipos de retorno

Lógico

Argumentos

eExpressão Especifica a expressão que ISBLANK( ) avalia. eExpressão pode ser um campo de
uma tabela, uma variável ou elemento de matriz ou uma expressão.

Para um campo, ISBLANK( ) retorna verdadeiro (.T.) se o campo contiver os valores a seguir.

Tipo Conteúdo

Caractere Seqüência vazia, espaços ou sem valor (registro vazio recém-incluído ou limpo com
BLANK)
Numérico Sem valor (registro vazio recém-incluído ou limpo com BLANK)
Flutuante Sem valor (registro vazio recém-incluído ou limpo com BLANK)
Data Data em branco ({ / / }) ou sem valor (registro vazio recém-incluído ou limpo com
BLANK)
DataHora Data e hora em branco ({ / / : : }) ou sem valor (registro vazio recém-incluído
ou limpo com BLANK)
Lógico Sem valor (registro vazio recém-incluído ou limpo com BLANK)
Memo Vazio (sem conteúdo memo)
Geral Vazio (sem objeto OLE)
Figura Vazio (sem figura)

Comentários

ISBLANK( ) retorna verdadeiro(.T.) se a expressão eExpressão estiver vazia; caso contrário,


ISBLANK( ) retorna falso(.F.).
Utiliza-se APPEND BLANK e BLANK para criar um registro vazio. Pode-se também utilizar
BLANK para limpar dados de campos em um registro. ISBLANK( ) pode determinar se um campo
está vazio.
Observe que as expressões do tipo Currency, Integer e Double nunca estão vazias, e ISBLANK( )
sempre retorna falso(.F.) para esses tipos de dados.
ISBLANK( ) difere de EMPTY( ) e ISNULL( ). Por exemplo, EMPTY( ) retornará verdadeiro (.T.)
se uma expressão de caracteres contiver qualquer combinação de valores nulos, espaços, tabulações,
retornos de carro ou alimentações de linha; ISBLANK( ) retornará verdadeiro (.T.) se uma
expressão de caracteres contiver somente a seqüência vazia ou espaços.

ISBLANK( ), exemplo da função

No exemplo a seguir, uma tabela denominada mytable é criada e um registro vazio é incluído.
ISBLANK( ) retorna verdadeiro (.T.) porque myfield está vazio. Um valor é colocado em myfield, e
ISBLANK( ) retorna falso (.F.) myfield não está mais vazio.

CREATE TABLE mytable FREE (myfield C(20))


APPEND BLANK && Adicionar novo registro vazio
CLEAR

? ISBLANK(myfield) && Exibe .T.


REPLACE myfield WITH 'John Smith' && Insere um valor no campo
? ISBLANK(myfield) && Exibe .F.
ISCOLOR( ), função

Determina se o computador pode exibir cor.

Sintaxe

ISCOLOR( )

Tipos de retorno

Lógico

Comentários

ISCOLOR( ) retorna verdadeiro (.T.) se o seu computador tem recurso de cor (mesmo que o
monitor em utilização não seja colorido). Se o seu computador não permite o uso de cor,
ISCOLOR( ) retorna falso (.F.).
ISDIGIT( ), função

Determina se o caractere mais à esquerda da expressão de caracteres especificada é um dígito (de 0


a 9).

Sintaxe

ISDIGIT(cExpressão)

Tipos de retorno

Lógico

Argumentos

cExpressão Especifica a expressão de caracteres testada por ISDIGIT( ). Todos os caracteres


depois do primeiro caractere em cExpressão são ignorados.

Comentários

ISDIGIT( ) retorna verdadeiro (.T.) se o caractere mais à esquerda da expressão de caracteres


especificada é um dígito (de 0 a 9); caso contrário, ISDIGIT( ) retorna falso (.F.).

ISDIGIT( ), exemplo da função

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE orders && Tabelas de pedidos abertas
CLEAR

DISPLAY cust_id
? ISDIGIT(cust_id) && Exibe .F.
DISPLAY order_dsc
? ISDIGIT(ALLTRIM(STR(order_dsc))) && Exibe .T.
ISEXCLUSIVE( ), função

Retorna verdadeiro (.T.) se a tabela ou o banco de dados forem abertos para uso exclusivo; caso
contrário, retorna falso(.F.).

Sintaxe

ISEXCLUSIVE([cAliasTabela | nÁreaTrabalho | cNomeBancoDados [, nTipo]])

Tipos de retorno

Lógico

Argumentos

cAliasTabela Especifica o alias da tabela para a qual é retornado o status de utilização exclusiva. O
Visual FoxPro gera uma mensagem de erro se você especificar um alias de tabela inexistente.

nÁreaTrabalho Especifica a Área de trabalho da tabela para a qual é retornado o status de


utilização exclusiva. ISEXCLUSIVE( ) retorna falso (.F.) se não houver uma tabela aberta na Área
de trabalho especificada.

cNomeBancoDados Especifica o nome do banco de dados para o qual o status de utilização


exclusiva é retornado.

nTipo Especifica se o status exclusivo é retornado para uma tabela ou banco de dados. A tabela a
seguir lista os valores para nTipo e o status retornado correspondente.

nTipo Status exclusivo retornado


1 Tabela
2 Banco de dados

Para determinar o status exclusivo de um banco de dados, é necessário atribuir o valor 2 a nTipo.

Comentários

ISEXCLUSIVE( ) retorna um valor para a tabela aberta na Área de trabalho atualmente selecionada
se forem omitidos os argumentos opcionais cAliasTabela, nÁreaTrabalho, ou cNomeBancoDados.
Uma tabela é aberta para utilização exclusiva incluindo a palavra-chave EXCLUSIVE em USE, ou
selecionando SET EXCLUSIVE para ON antes que a tabela seja aberta.
Um banco de dados é aberto para utilização exclusiva incluindo a palavra-chave EXCLUSIVE no
OPEN DATABASE.

ISEXCLUSIVE( ), exemplo da função

No exemplo a seguir, a função ISEXCLUSIVE( ) verifica que a tabela foi aberta para utilização
exclusiva. A tabela não será reindexada pois a Área de trabalho atual não foi aberta para utilização
exclusiva.

cExclusive = SET('EXCLUSIVE')
SET EXCLUSIVE OFF
SET PATH TO (SYS(2004) + 'SAMPLES\DATA\')
OPEN DATA testdata && Abre o banco de dados de teste
USE customer && Não foi aberto exclusivamente
USE employee IN 0 EXCLUSIVE && Aberto exclusivamente em outra Área de trabalho
IF ISEXCLUSIVE( )
REINDEX && Somente pode ser feito se a tabela for aberta exclusivamente
ELSE
WAIT WINDOW 'A tabela não pode ser aberta exclusivamente'
ENDIF
SET EXCLUSIVE &cExclusive
ISFLOCKED( ), função

Retorna o status de bloqueio da tabela.

Sintaxe

ISFLOCKED([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Lógico

Argumentos

nÁreaTrabalho Especifica o número da Área de trabalho da tabela para a qual o status de bloqueio
foi retornado. Se você omitir cAliasTabela e nÁreaTrabalho, o status de bloqueio será retornado
para uma tabela aberta na Área de trabalho atual.

cAliasTabela Especifica o alias da tabela para qual o status de bloqueio foi retornado.

Comentários

ISFLOCKED( ) retorna verdadeiro (.T.) se a tabela estiver bloqueada; caso contrário, um falso (.F.)
é retornado. ISFLOCKED( ) é similar ao SYS(2011), mas retorna um valor lógico que não requer
localização para aplicativos internacionais.
ISLOWER( ), função

Determina se o caractere mais a esquerda da expressão de caracteres especificada é um caractere


alfabético minúsculo.

Sintaxe

ISLOWER(cExpressão)

Tipos de retorno

Lógico

Argumentos

cExpressão Especifica a expressão de caracteres que ISLOWER( ) testa. ISLOWER( ) ignora


qualquer caractere após o primeiro caractere em cExpressão.
Comentários

ISLOWER( ) retorna verdadeiro (.T.) se o caractere mais a esquerda da expressão de caracteres


especificada é um caractere alfabético minúsculo, caso contrário, ISLOWER( ) retorna falso (.F.).

ISLOWER( ), exemplo da função

CLEAR
? ISLOWER('redmond') && Exibe .T.
? ISLOWER('Redmond') && Exibe .F.

ISNULL( ), função

Retorna verdadeiro (.T.) se uma expressão resulta em um valor nulo; caso contrário, ISNULL( )
retorna falso (.F.).
Sintaxe

ISNULL(eExpressão)

Tipos de retorno

Lógico

Argumentos

eExpressão Especifica a expressão a ser avaliada.

Comentários

Utilize ISNULL( ) para determinar se o conteúdo de um campo, variável de memória ou elemento


de matriz contém um valor nulo ou se uma expressão resulta em um valor nulo.

ISNULL( ), exemplo da função

No exemplo a seguir, ISNULL( ) é utilizado para verificar um valor nulo.

STORE .NULL. TO mNullvalue && Armazene um valor nulo em uma variável de memória

CLEAR
? mNullvalue && Exibe o valor de uma variável de memória
? ISNULL(mNullvalue) && Retorna .T., indicando um valor nulo
? TYPE('mNullvalue') && Retorna L, indicando um valor lógico
? (mNullvalue = .NULL.) && Retorna .NULL., teste ruim para valores nulos
ISREADONLY( ), função

Determina se uma tabela está aberta somente para leitura.

Sintaxe

ISREADONLY([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Lógico

Argumentos

nÁreaTrabalho | cAliasTabela Retorna o status somente para leitura de uma tabela aberta em uma
outra Área de trabalho. nÁreaTrabalho especifica o número da Área de trabalho e cAliasTabela
especifica o alias da Área de trabalho ou da tabela. ISREADONLY( ) retorna falso (.F.) se não
houver tabela aberta na Área de trabalho especificada.

Se você não especificar um número de Área de trabalho ou um alias de tabela ou de Área de


trabalho, o status somente para leitura será retornado para a tabela aberta na Área de trabalho ativa.

Comentários

ISREADONLY( ) retorna verdadeiro (.T.) se a tabela está aberta somente para leitura; caso
contrário, ISREADONLY( ) retorna falso (.F.).

Você pode abrir uma tabela somente para leitura incluindo a opção NOUPDATE ao abri-la com
USE, marcando a caixa de verificação Somente para leitura ao abri-la na caixa de diálogo Abrir ou
atribuindo a ela atributos somente para leitura do MS-DOS.

Um cursor criado com o comando SELECT - SQL é sempre somente para leitura.

ISREADONLY( ), exemplo da função


CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer NOUPDATE && Abre a tabela customer somente para leitura

CLEAR
? ISREADONLY('customer') && Retorna .T.

ISRLOCKED( ), função

Retorna o status de bloqueio do registro.

Sintaxe

ISRLOCKED([nNúmeroRegistro, [nÁreaTrabalho | cAliasTabela]])

Tipos de retorno

Lógico

Argumentos

nNúmeroRegistro Especifica o número do registro para o qual o status do bloqueio é retornado. Se


nNúmeroRegistro é omitido, o status de bloqueio do registro é retornado para o registro atual.

nÁreaTrabalho Especifica um número de Área de trabalho de uma tabela para a qual o status de
bloqueio de registro é retornado. Se for omitido cAliasTabela e nÁreaTrabalho, o status de bloqueio
do registro é retornado para a tabela aberta na Área de trabalho atual.

cAliasTabela Especifica o alias da tabela para a qual o status de bloqueio do registro é retornado.

Comentários

ISRLOCKED( ) retorna verdadeiro (.T.) se o registro estiver bloqueado, caso contrário será
retornado falso (.F.).
ISUPPER( ), função

Determina se o primeiro caractere em uma expressão de caracteres é um caractere alfabético


maiúsculo.

Sintaxe

ISUPPER(cExpressão)

Tipos de retorno

Lógico
Argumentos

cExpressão Especifica a expressão de caracteres que ISUPPER( ) avalia. Todos os caracteres


depois do primeiro caractere em cExpressão são ignorados.

Comentários

ISUPPER( ) retorna verdadeiro (.T.) se o primeiro caractere em uma expressão de caracteres é um


caractere alfabético maiúsculo; caso contrário, ISUPPER( ) retorna falso(.F.).

ISUPPER( ), exemplo da função

? ISUPPER('Redmond') && Exibe .T.


? ISUPPER('redmond') && Exibe .F.
KEY( ), função

Retorna a expressão de chave de índice para uma marca de índice ou arquivo de índice.

Sintaxe

KEY([NomeArquivoCDX,] nNúmeroÍndice [, nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Caractere

Argumentos

NomeArquivoCDX Especifica o nome de um arquivo de índice composto. KEY( ) retorna as


expressões de chave de índice das marcas de índice dos arquivos .CDX. O arquivo de índice
composto especificado pode ser o arquivo de índice composto estrutural automaticamente aberto
com a tabela ou um arquivo de índice composto independente.

nNúmeroÍndice Especifica a chave de expressão de índice a ser retornada.

USE e SET INDEX suportam uma lista de arquivos de índice que permitem que você abra vários
índices para uma tabela. Qualquer combinação de arquivos de índice .IDX de entrada única,
arquivos de índice composto estruturais ou arquivos de índice composto independentes pode ser
incluída na lista de arquivos de índice.

A expressão numérica nNúmeroÍndice especifica a expressão de índice a ser retornada a partir dos
arquivos de índice abertos. KEY( ) retorna expressões de índice a partir de arquivos de índice
abertos na ordem a seguir à medida que nNúmeroÍndice aumenta a partir de 1 até o número total de
arquivos .IDX de entrada única abertos e marcas de índice composto independente e estrutural:

1. As expressões de índice de arquivos de índice .IDX de entrada única (se houver algum
aberto) são retornadas em primeiro lugar. A ordem de inclusão destes arquivos de índice de entrada
única em USE ou SET INDEX determina a forma como as expressões de índice são retornadas.
2. As expressões de índice para cada marca no índice composto estrutural (se houver algum)
são retornadas em seguida. As expressões de índice são retornadas a partir das marcas na ordem em
que as marcas são criadas no índice composto estrutural.

3. As expressões de índice para cada marca em qualquer índice composto independente aberto
são retornadas por último. As expressões de índice são retornadas a partir das marcas na ordem em
que as marcas são criadas nos índices compostos independentes.

A seqüência vazia é retornada caso nNúmeroÍndice seja maior que o número total de arquivos .IDX
de entrada única abertos e marcas de índice composto independentes e estruturais.
nÁreaTrabalho Especifica o número da Área de trabalho da tabela cujas expressões de chave de
índice devem ser retornadas por KEY( ).

Se não houver uma tabela aberta na Área de trabalho especificada, KEY( ) retornará a seqüência
vazia.

cAliasTabela Especifica o alias da tabela cujas expressões de chave de índice devem ser retornadas
por KEY( ).

Se nenhuma tabela possuir o alias especificado, o Visual FoxPro irá gerar uma mensagem de erro.

Se nÁreaTrabalho e cAliasTabela forem omitidos, as expressões de chave de índice serão


retornadas para a tabela aberta na Área de trabalho atual.

Comentários

Uma expressão de chave de índice é especificada quando uma marca de índice ou um arquivo de
índice é criado com INDEX. A expressão de chave de índice determina como uma tabela será
exibida e acessada quando a marca de índice ou o arquivo de índice for aberto como o arquivo ou a
marca de índice controlador principal.

Para obter maiores informações sobre como criar marcas de índice, arquivos de índice e expressões
de chave de índice, consulte INDEX.

KEY( ), exemplo da função

O exemplo a seguir abre a tabela customer no banco de dados testdata. FOR ... ENDFOR é utilizado
para criar um loop no qual KEY( ) é utilizado para exibir a expressão de índice de cada marca de
índice no índice estrutural customer. O nome de cada marca de índice estrutural é exibido com a sua
expressão de índice.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre a tabela customer
CLEAR

FOR nCount = 1 TO 254


IF !EMPTY(TAG(nCount)) && Verifica se há marcas no índice
? TAG(nCount) + ' ' && Exibe o nome da marca
?? KEY(nCount) && Exibe a expressão de índice
ELSE
EXIT && Sai do loop quando não forem localizadas mais marcas
ENDIF
ENDFOR
KEYBOARD, comando

Coloca a expressão de caracteres especificada no buffer de teclado.

Sintaxe

KEYBOARD cValorTeclado
[PLAIN] [CLEAR]

Argumentos

cValorTeclado Especifica a expressão de caracteres que é colocada no buffer de teclado. A


expressão de caracteres pode ser uma seqüência de caracteres, um rótulo de tecla, um conjunto de
rótulos de tecla ou uma função definida pelo usuário que retorna uma expressão de caractere.

Se cValorTeclado for um rótulo de tecla, deverá ser incluído entre chaves e aspas simples. Por
exemplo:

KEYBOARD '{CTRL+LEFTARROW}'

Para obter uma lista de rótulos de tecla, consulte ON KEY LABEL.

O buffer de teclado pode ser preenchido com até 128 caracteres. Uma vez que o buffer de teclado
estiver cheio, os caracteres adicionais são ignorados.
PLAIN Se houver macros de teclado definidas ou comandos ON KEY LABEL ativos, você poderá
incluir PLAIN para ignorar estas atribuições de tecla. PLAIN preenche o teclado com o caractere de
tecla literal, não com a atribuição de tecla.

Por exemplo, se você tiver atribuído um comando à tecla A com ON KEY LABEL e A estiver
incluído em cValorTeclado, utilize PLAIN para colocar a letra A no buffer de teclado. O comando
ON KEY LABEL atribuído a A não é executado.

CLEAR Esvazia o buffer de teclado antes que ele seja preenchido com cValorTeclado.

Comentários

Use KEYBOARD para colocar caracteres no buffer de teclado. Os caracteres permanecem no


buffer até que o Visual FoxPro procure uma entrada de teclado. Nessa etapa, os caracteres são lidos
e trabalhados como se tivessem sido digitados diretamente a partir do teclado.

É possível utilizar KEYBOARD para criar sistemas de demonstração auto-executáveis para os


aplicativos.

LASTKEY( ), função

Retorna um número inteiro correspondente à última tecla pressionada.

Sintaxe

LASTKEY( )

Tipos de retorno

Numérico

Comentários
Os valores retornados por LASTKEY( ) são iguais aos valores retornados por INKEY( ). Para obter
uma lista de teclas e seus valores de retorno, consulte INKEY( ).

LASTKEY( ) é atualizado quando você se movimenta por controles.

Obs : Veja a funcao INKEY( ) – Lista de valores das teclas

LEFT( ), função

Retorna um número especificado de caracteres de uma expressão de caractere, a partir do caractere


mais à esquerda.

Sintaxe

LEFT(cExpressão, nExpressão)

Tipos de retorno

Caractere

Argumentos

cExpressão Especifica a expressão de caractere a partir da qual LEFT( ) retorna caracteres.

nExpressão Especifica o número de caracteres retornados da expressão de caractere. Caso


nExpressão seja maior que o comprimento de cExpressão, será retornada toda a expressão de
caractere. A seqüência vazia será retornada se nExpressão for negativa ou 0.

A função LEFT( ) é idêntica a SUBSTR( ) com uma posição inicial 1.

LEFT( ), exemplo da função

CLEAR
? LEFT('Redmond, WA', 4) && Exibe Redmond
LEFTC( ), função

Retorna um número especificado de caracteres de uma expressão de caractere, a partir do caractere


mais à esquerda.

Sintaxe

LEFTC(cExpressão, nExpressão)

Tipos de retorno

Caractere

Argumentos

cExpressão Especifica a expressão de caracteres a partir da qual LEFTC( ) retorna caracteres.


nExpressão Especifica o número de caracteres retornados da expressão de caracteres. Caso
nExpressão seja maior que o comprimento de cExpressão, será retornada toda a expressão de
caracteres. A seqüência vazia será retornada se nExpressão for negativa ou 0.

Comentários

LEFTC( ) foi elaborada para expressões contendo caracteres de byte duplo. Se a expressão contiver
apenas caracteres de byte único, LEFTC( ) será equivalente a LEFT( ).

LEFTC( ) retorna um número especificado de caracteres de uma expressão de caracteres, contendo


qualquer combinação de caracteres de bytes único ou duplo.

A função LEFTC( ) é idêntica a SUBSTRC( ) com uma posição inicial 1.

LEN( ), função

Retorna o número de caracteres em uma expressão de caracteres.

Sintaxe

LEN(cExpressão)
Tipos de retorno

Numérico

Argumentos

cExpressão Especifica a expressão de caracteres para a qual LEN( ) retornará o número de


caracteres.

Comentários

Utilize LEN( ) para determinar o comprimento de uma expressão de caracteres.

LEN( ), exemplo da função

O exemplo a seguir abre a tabela customer no banco de dados testdata. LEN( ) é utilizada para
exibir as larguras dos campos cust_id e contact.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE Customer && Abre a tabela customer

CLEAR
? 'Largura do campo contact: '
?? LEN(contact)
? 'Largura do campo cust_id: '
?? LEN(cust_id)
LENC( ), função

Retorna o número de caracteres em uma expressão de caracteres ou campo Memo.

Sintaxe

LENC(cExpressão)

Tipos de retorno

Numérico

Argumentos

cExpressão Especifica a expressão de caracteres para a qual LENC( ) retornará o número de


caracteres.

Comentários

LENC( ) foi elaborada para expressões contendo caracteres de byte duplo. Se a expressão contiver
apenas caracteres de byte único, LENC( ) será equivalente a LEN( ).

LENC( ) retorna o número de caracteres em uma expressão de caracteres ou campo Memo que
contenha qualquer combinação de caracteres de byte único e duplo.
LIKE( ), função

Determina se uma expressão de caracteres corresponde a outra expressão de caracteres.

Sintaxe

LIKE(cExpressão1, cExpressão2)

Tipos de retorno

Lógico

Argumentos

cExpressão1 Especifica a expressão de caracteres que LIKE( ) compara à cExpressão2.


cExpressão1 pode conter caracteres curingas como * e ?. O ponto de interrogação (?) corresponde a
qualquer caractere simples na cExpressão2 e o asterisco (*) corresponde a qualquer número de
caracteres. Você pode misturar qualquer quantidade de caracteres curinga em qualquer combinação
na cExpressão1.
cExpressão2 Especifica a expressão de caracteres que LIKE( ) compara à cExpressão1. A
cExpressão2 deve corresponder à cExpressão1, letra por letra, para que LIKE( ) retorne verdadeiro
(.T.).

Comentários

LIKE( ) retorna verdadeiro (.T.) se cExpressão1 corresponder a cExpressão2; caso contrário,


retorna falso (.F.).

SET COMPATIBLE determina o modo como LIKE( ) avalia a cExpressão1 e cExpressão2. Se SET
COMPATIBLE estiver ativado (ON) ou definido como DB4, todos os espaços à direita de
cExpressão1 e cExpressão2 serão removidos antes que elas sejam comparadas. Se SET
COMPATIBLE estiver desativado (OFF) ou estiver definido como FOXPLUS, todos os espaços à
direita em cExpressão1 e cExpressão2 serão utilizados na comparação.

LIKE( ), exemplo da função

No exemplo a seguir, todos os nomes de produtos na tabela products que iniciarem com as letras
“Ch” serão exibidos.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE products && Abre a tabela Products

CLEAR
? 'Todos os nomes de produtos iniciando com as letras Ch:'
?
SCAN FOR LIKE('Ch*', prod_name)
? prod_name
ENDSCAN
USE

LIKEC( ), função

Determina se uma expressão de caracteres corresponde a outra expressão de caracteres.

Sintaxe

LIKEC(cExpressão1, cExpressão2)
Tipos de retorno

Lógico

Argumentos

cExpressão1 Especifica a expressão de caractere que LIKEC( ) compara à cExpressão2.


cExpressão1 pode conter caracteres curinga como * e ?. O ponto de interrogação (?) corresponde a
qualquer caractere simples na cExpressão2 e um asterisco (*) corresponde a qualquer número de
caracteres. Você pode misturar qualquer número de caracteres curinga em qualquer combinação na
cExpressão1.

cExpressão2 Especifica a expressão de caractere que LIKEC( ) compara à cExpressão1. A


cExpressão2 deve corresponder à cExpressão1, caractere por caractere, para que LIKE( ) retorne
verdadeiro (.T.).

Comentários

LIKEC( ) foi elaborada para expressões que contenham caracteres de byte duplo. Se a expressão
contiver apenas caracteres de byte único, LIKEC( ) será equivalente a LIKE( ).

LIKEC( ) determina se uma expressão de caracteres corresponde a outra expressão de caracteres.


LIKEC( ) retorna verdadeiro (.T.) se a cExpressão1 corresponder à cExpressão2; caso contrário,
retorna falso (.F.).

SET COMPATIBLE determina como LIKEC( ) compara os espaços em branco contidos em


cExpressão1 e cExpressão2. Se SET COMPATIBLE estiver ativado (ON) ou definido como DB4,
todos os espaços à direita de cExpressão1 e cExpressão2 serão removidos antes que elas sejam
comparadas. Se SET COMPATIBLE estiver desativado (OFF) ou estiver definido FOXPLUS,
todos os espaços à direita na cExpressão1 e cExpressão2 serão utilizados na comparação.
LINENO( ), função

Retorna o número de uma linha em execução em um programa em relação à primeira linha do


programa principal.

Sintaxe

LINENO([1])

Tipos de retorno

Numérico

Argumentos

1 Retorna o número da linha em relação à primeira linha do programa ou procedimento atual. Se


você omitir o argumento 1, o número da linha será retornado em relação à primeira linha do
programa principal.

Comentários

As linhas do programa são contadas a partir do início do programa. As linhas de comentários, as


linhas de continuação e as linhas em branco são incluídas na contagem do número de linhas. Se um
programa for suspenso durante a execução, LINENO( ) retornará o número da linha em que a
execução do programa foi suspensa. LINENO( ) retornará 0 se um programa for cancelado.

Como padrão, os números das linhas são retornados em relação ao início do programa principal.
Caso seja chamado um procedimento, a numeração das linhas será retomada do início do programa
de chamada.

LINENO( ) é útil para depurar programas. Você pode definir um ponto de interrupção para parar a
execução do programa em um número de linha específico, emitindo o comando abaixo na janela
Depurar:

LINENO( ) = nExpressão

A execução do programa será suspensa quando o valor de LINENO( ) for igual a nExpressão.

LINENO( ), exemplo da função

O exemplo a seguir faz parte de uma rotina simples de manipulação de erro.


ON ERROR DO bug_proc WITH LINENO( )
BRWS && Provoca um erro
ON ERROR

*** Bug_Proc error handler ***

PROCEDURE bug_proc
PARAMETERS gnBadLine
WAIT WINDOW 'Erro ocorrido na linha: ' + ALLTRIM(STR(gnBadLine))
RETURN

LIST DATABASE, comando

Exibe informações sobre o banco de dados atual de modo contínuo.


Sintaxe

LIST DATABASE
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
[NOCONSOLE]

Argumentos

TO PRINTER [PROMPT] Direciona a saída de LIST DATABASE para uma impressora.

No Visual FoxPro, você pode incluir a cláusula opcional PROMPT para exibir uma caixa de
diálogo Imprimir antes de iniciar a impressão. Coloque PROMPT logo após TO PRINTER.

TO FILE NomeArquivo Direciona a saída de LIST DATABASE para o arquivo especificado com
NomeArquivo. Se o arquivo já existir e SET SAFETY estiver ativado (ON), o Visual FoxPro
exibirá um aviso perguntando se você deseja sobrescrever o arquivo.

NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela ativa
definida pelo usuário.

Comentários

Utilize DBGETPROP( ) para retornar outras informações sobre o banco de dados atual.

LIST DATABASE, exemplo do comando

O exemplo a seguir cria um banco de dados denominado people. Uma tabela denominada friends é
criada e automaticamente adicionada ao banco de dados. DISPLAY TABLES é utilizado para exibir
as tabelas no banco de dados e LIST DATABASES é utilizado para listar informações sobre as
tabelas no banco de dados.

CREATE DATABASE people


CREATE TABLE friends (FirstName C(20), LastName C(20))
CLEAR
DISPLAY TABLES && Exibe as tabelas no banco de dados
LIST DATABASE && Lista informações das tabelas
LIST TABLES, comando

Exibe todas as tabelas e informações sobre as tabelas contidas no banco de dados atual sem
interrupção.

Sintaxe

LIST TABLES
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
[NOCONSOLE]

Argumentos

TO PRINTER [PROMPT] Direciona as informações retornadas de LIST TABLES para uma


impressora.

Você pode incluir PROMPT para exibir uma caixa de diálogo Imprimir antes de iniciar a impressão.
Coloque a palavra-chave PROMPT logo após TO PRINTER.

TO FILE NomeArquivo Direciona a saída de LIST TABLES para o arquivo de disco especificado
com NomeArquivo. Se o arquivo já existir e SET SAFETY estiver ativado (ON), o Visual FoxPro
exibirá um aviso perguntando se você deseja sobrescrever o arquivo.

NOCONSOLE Suprime a saída para a janela principal do Visual FoxPro ou para a janela ativa
definida pelo usuário.

Comentários

As informações retornadas incluem os caminhos e nomes das tabelas e constituem um subconjunto


das informações apresentadas quando se utiliza LIST STATUS. Entretanto, as informações
fornecidas por meio de LIST TABLES são relativas somente a tabelas, sendo exibidas
independentemente de as tabelas estarem ou não abertas.

LIST TABLES, exemplo de comando


O exemplo a seguir abre a tabela customer no banco de dados testdata. LIST TABLES é utilizado
para listar informações sobre as tabelas no banco de dados.

CLOSE DATABASES
SET PATH TO (SYS(2004) + 'samples\data\') && Define o caminho para o banco de dados
OPEN DATABASE testdata && Abre o banco de dados testdata

CLEAR
LIST TABLES && Lista informações sobre tabelas no banco de dados

LIST, comandos

Exibe informações do ambiente ou da tabela de modo contínuo.

Sintaxe

LIST
[FIELDS ListaCampos]
[Escopo] [FOR lExpressão1] [WHILE lExpressão2]
[OFF]
[NOCONSOLE]
[NOOPTIMIZE]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
– Ou –
LIST FILES
[ON Unidade]
[LIKE EstruturaArquivo]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
– Ou –
LIST MEMORY
[LIKE EstruturaArquivo]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
– Ou –
LIST STATUS
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]
– Ou –
LIST STRUCTURE
[IN nÁreaTrabalho | cAliasTabela]
[NOCONSOLE]
[TO PRINTER [PROMPT] | TO FILE NomeArquivo]

Comentários

Esses comandos LIST são idênticos aos comandos DISPLAY, com exceção das diferenças a seguir:

· O escopo para LIST tem como padrão os registros ALL.


· LIST não emite um aviso depois de preencher a janela principal do Visual FoxPro ou uma
janela definida pelo usuário com informações.
· LIST não exibe os registros sinalizados para exclusão quando SET DELETED está ativado
(ON).

Para obter maiores informações sobre os comandos LIST, consulte os comandos correspondentes
em DISPLAY.

LOCAL, comando

Cria variáveis e matrizes de variáveis locais.

Sintaxe

LOCAL ListaVar
– Ou –
LOCAL [ARRAY] NomeMatriz1(nLinhas1 [, nColunas1])
[, NomeMatriz2(nLinhas2 [, nColunas2])] ...

Argumentos

ListaVar Especifica uma ou mais variáveis locais a serem criadas.

[ARRAY] NomeMatriz1 (nLinhas1 [, nColunas1])


[, NomeMatriz2 (nLinhas2 [, nColunas2])] ... Especifica uma ou mais matrizes locais a
serem criadas. Consulte DIMENSION para obter uma descrição de cada argumento.

Comentários

As variáveis e as matrizes de variáveis locais só podem ser utilizadas e modificadas dentro do


procedimento ou função em que são criadas, e não podem ser acessadas por programas de nível
mais alto ou baixo. As matrizes e variáveis locais são liberadas quando é concluída a execução do
procedimento ou função que as contém.

As variáveis e matrizes criadas com LOCAL são inicializadas com um valor falso (.F.). Qualquer
variável de memória ou matriz que você deseje declarar como local deve ser declarada local antes
de ter um valor atribuído. O Visual FoxPro gera uma mensagem de erro quando você atribui um
valor a uma variável ou matriz e posteriormente a declara local utilizando LOCAL.

As variáveis locais podem ser passadas por referência.

Não abrevie LOCAL porque LOCAL e LOCATE possuem as primeiras quatro letras iguais.
LOCATE, comando

Procura seqüencialmente na tabela o primeiro registro correspondente à expressão lógica


especificada.

Sintaxe

LOCATE FOR lExpressao1


[Escopo]
[WHILE]
[NOOPTIMIZE]

Argumentos

FOR lExpressao1 procura seqüencialmente na tabela atual o primeiro registro correspondente à


expressão lógica lExpressao1.

Rushmore otimizará uma consulta criada com LOCATE FOR se lExpressao1 for uma expressão
otimizável. Para obter um melhor desempenho, utilize uma expressão otimizável na cláusula FOR.

Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia


Rushmore” no capítulo 15, “Otimizando aplicativos”, no Guia do Desenvolvedor.

Escopo Especifica um intervalo de registros a serem localizados. Apenas os registros que


estiverem dentro do intervalo serão localizados. As cláusulas de escopo são: ALL, NEXT
nRegistros, RECORD nNúmeroRegistro e REST. Os comandos que incluem Escopo operam apenas
na tabela da Área de trabalho ativa.

O escopo padrão de LOCATE é ALL, isto é, todos os registros.

WHILE lExpressão2 Especifica uma condição por meio da qual os registros são procurados, desde
que a expressão lógica lExpressão2 resulte em verdadeiro (.T.).

NOOPTIMIZE Desativa a otimização Rushmore de LOCATE.

Para obter maiores informações, consulte SET OPTIMIZE e “Compreendendo a tecnologia


Rushmore” no capítulo 15, "Otimizando aplicativos", no Guia do Desenvolvedor.

Comentários

A tabela não precisa ser indexada.


Se LOCATE localizar um registro correspondente, você poderá utilizar RECNO( ) para retornar o
número do registro correspondente. Se um registro correspondente for localizado, FOUND( )
retornará verdadeiro (.T.) e EOF( ) retornará falso (.F.). Se SET TALK estiver ativado (ON), será
exibido o número do registro correspondente.

Após LOCATE localizar um registro correspondente, você pode emitir CONTINUE para procurar
os registros correspondentes adicionais no resto da tabela. Quando CONTINUE é executado, o
processo de procura retorna, iniciando pelo registro logo após o registro correspondente. Você pode
emitir CONTINUE várias vezes até o final do escopo ou até chegar ao fim da tabela.

Se uma correspondência não for localizada, RECNO( ) retornará o número de registros na tabela
mais 1, FOUND( ) retornará falso (.F.) e EOF( ) retornará verdadeiro (.T.).

LOCATE e CONTINUE são específicos da Área de trabalho atual. Se uma outra Área de trabalho
for selecionada, o processo de procura original poderá continuar quando a Área de trabalho original
for novamente selecionada.

LOCATE, exemplo do comando

No exemplo a seguir são localizados registros de clientes da Alemanha. Em seguida, a contagem


total é exibida.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer
SET TALK OFF

STORE 0 TO gnCount
LOCATE FOR ALLTRIM(UPPER(customer.country)) = 'ALEMANHA'
DO WHILE FOUND( )
gnCount = gnCount + 1
? company
CONTINUE
ENDDO

? 'Total de empresas na Alemanha: '+ LTRIM(STR(gnCount))

LOCFILE( ), função

Localiza um arquivo no disco e retorna o nome do arquivo com o seu caminho.


Sintaxe

LOCFILE(cNomeArquivo [, cExtensõesArquivo] [, cLegendaDiálogo])

Tipos de retorno

Caractere

Argumentos

cNomeArquivo Especifica o nome do arquivo a ser localizado. Se cNomeArquivo incluir somente


um nome de arquivo, LOCFILE( ) irá pesquisar primeiro a pasta ou o diretório padrão do Visual
FoxPro. Caso o arquivo não seja localizado na pasta ou no diretório padrão, o caminho do Visual
FoxPro será pesquisado a seguir. Utilize SET PATH para especificar o caminho do Visual FoxPro.

Se cNomeArquivo incluir um caminho e um nome de arquivo, a localização especificada será


pesquisada. Se o arquivo não puder ser encontrado na localização especificada, LOCFILE( ) irá
pesquisar a pasta ou o diretório padrão do Visual FoxPro e, em seguida, o caminho do Visual
FoxPro.

Se o arquivo for localizado, LOCFILE( ) retornará o nome do arquivo e o caminho.

cExtensõesArquivo Especifica as extensões do arquivo a ser localizado. Se o nome de arquivo


especificado com cNomeArquivo não incluir uma extensão, o Visual FoxPro aplicará as extensões
de arquivo listadas em cExtensõesArquivo ao nome do arquivo e irá procurar novamente o arquivo.

cExtensõesArquivo também especifica as extensões dos nomes dos arquivos exibidos na caixa de
diálogo Abrir, quando não for possível localizar o arquivo especificado.

cExtensõesArquivo pode assumir diversas formas:

· Se cExtensõesArquivo contiver uma única extensão (por exemplo, .PRG), somente os


arquivos com essa extensão serão exibidos.
· cExtensõesArquivo pode também conter curingas (* e ?). Todos os arquivos com extensões
correspondentes aos critérios de caracteres curinga serão exibidos. Por exemplo, se
cExtensõesArquivo for ?X?, todos os arquivos com a extensão .FXP, .EXE ou .TXT serão exibidos.
· No Visual FoxPro para Windows, cExtensõesArquivo pode conter uma descrição de
arquivo seguida por uma extensão de arquivo ou uma lista de extensões separadas por vírgulas. A
descrição do arquivo aparece na caixa de listagem Arquivos do tipo. Separa a descrição de arquivo
da extensão de arquivo ou lista das extensões de arquivo com dois pontos (:). Separa múltiplas
descrições de arquivo e suas extensões com um ponto e vírgula (;).

Por exemplo, se cExtensõesArquivo for “Texto:TXT” a descrição do arquivo “Texto” aparecerá na


caixa de listagem Arquivos do tipo e todos os arquivos com uma extensão .TXT serão exibidos.

Se cExtensõesArquivo for “Tabelas:DBF; Arquivos:TXT,BAK” as descrições do arquivo de


“Tabelas” e “Arquivos” aparecerão na caixa de listagem Arquivos do tipo. Quando “Tabelas” for
escolhido a partir da caixa de listagem Arquivos do tipo, todos os arquivos com uma extensão .DBF
serão exibidos. Quando “Arquivos” for escolhido a partir da caixa de listagem Arquivos do tipo,
todos os arquivos com extensões .TXT e .BAK serão exibidos.

cLegendaDiálogo Especifica o texto que você deseja utilizar para avisar o usuário. O texto é
exibido na caixa de diálogo Abrir.

Comentários

A caixa de diálogo Abrir será exibida se não for possível localizar o arquivo na pasta ou no diretório
padrão, no caminho do Visual FoxPro ou em uma localização especificada. A caixa de diálogo
Abrir pode ser utilizada para localizar o arquivo. Quando um arquivo é selecionado na caixa de
diálogo Abrir, o nome do arquivo é retornado com o seu caminho.

Se você sair da caixa de diálogo Abrir selecionando Cancelar, pressionando ESC ou selecionando
Fechar no menu Controle, o Visual FoxPro irá gerar uma mensagem de erro e LOCFILE( ) não irá
retornar um valor.

LOCK( ), função

Tenta bloquear um ou mais registros em uma tabela.

Sintaxe

LOCK([nÁreaTrabalho | cAliasTabela]
| [cListaNúmeroRegistro, nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Lógico

Argumentos

nÁreaTrabalho | cAliasTabela Tenta bloquear o registro atual em uma tabela aberta de uma Área
de trabalho específica. nÁreaTrabalho especifica o número da Área de trabalho, enquanto que
cAliasTabela especifica o alias da tabela. Se uma Área de trabalho ou um alias de tabela não for
especificado, LOCK( ) tentará bloquear o registro atual na tabela da Área de trabalho atual.

cListaNúmeroRegistro Especifica a lista de um ou mais números de registros que se deve incluir


para tentar bloquear registros múltiplos. SET MULTILOCKS deve estar ativado (ON) e você deve
incluir a Área de trabalho ou o alias da tabela para o qual está tentando colocar bloqueios de
registros múltiplos.

LOCK( ) tenta bloquear todos os registros especificados. Os números dos registros especificados
com cListaNúmeroRegistro são separados por vírgulas. Por exemplo, para tentar bloquear os quatro
primeiros registros de uma tabela, cListaNúmeroRegistro deverá conter 1,2,3,4.

Você pode, também, bloquear registros múltiplos, movendo o ponteiro do registro para o registro
que gostaria de bloquear, emitindo LOCK( ) ou RLOCK( ) e, em seguida, repetindo essas etapas
para cada registro adicional.

No Visual FoxPro, 0 pode ser especificado como um número de registro. Isso permite que se tente
bloquear o cabeçalho da tabela.

Importante Mantenha o cabeçalho da tabela bloqueado durante o menor tempo possível pois
outros usuários não poderão adicionar registros à tabela enquanto o cabeçalho estiver bloqueado.

Libere o bloqueio do cabeçalho da tabela com UNLOCK RECORD 0, UNLOCK ou UNLOCK


ALL.

Se todos os registros especificados em cNúmerosRegistros forem bloqueados com êxito, LOCK( )


retornará verdadeiro (.T.). Mesmo que um registro especificado com cNúmerosRegistros não possa
ser bloqueado, LOCK( ) retornará falso (.F.) e nenhum registro será bloqueado. Entretanto, todos os
bloqueios de registros existentes permanecerão no seu lugar. O bloqueio de registros múltiplos é um
processo aditivo. Os bloqueios de registros adicionais não liberam os bloqueios em outros registros.

O número máximo de registros que podem ser bloqueados em cada Área de trabalho é de
aproximadamente 8.000. É sempre mais fácil bloquear toda a tabela do que um número pequeno de
registros.

Comentários

LOCK( ) é idêntico a RLOCK( ).

Se o bloqueio ou os bloqueios forem feitos com êxito, LOCK( ) retornará verdadeiro (.T.). Os
registros bloqueados estão disponíveis para o usuário que fez os bloqueios para acesso de leitura e
gravação; estão disponíveis a todos os outros usuários da rede para acesso somente para leitura.

A execução de LOCK( ) não garante que o bloqueio ou os bloqueios de registros sejam feitos com
êxito. Não se pode fazer um bloqueio em um registro já bloqueado por outro usuário ou em uma
tabela bloqueada por outro usuário. Se, por algum motivo, não for possível fazer bloqueio ou
bloqueios dos registros, LOCK( ) retornará falso (.F.).
Como padrão, LOCK( ) faz uma tentativa para bloquear um registro. Utilize SET REPROCESS
para repetir, automaticamente, o bloqueio do registro quando a primeira tentativa falhar. SET
REPROCESS determina o número de tentativas de bloqueio ou a duração das tentativas de bloqueio
quando a tentativa inicial não for bem sucedida. Para obter maiores informações, consulte SET
REPROCESS.

SET MULTILOCKS determina se é possível bloquear os registros múltiplos de uma tabela. Se SET
MULTILOCKS estiver desativado (OFF) - o padrão -, você poderá bloquear apenas um único
registro em uma tabela. Quando SET MULTILOCKS está ativado (ON), você pode bloquear
registros múltiplos em uma tabela. Para obter maiores informações, consulte SET MULTILOCKS.

Desbloqueando registros Um registro da tabela pode ser desbloqueado apenas pelo usuário que fez
o bloqueio. Para liberar os bloqueios de registros, utilize UNLOCK, fechando a tabela ou saindo do
Visual FoxPro.

UNLOCK pode ser utilizado para liberar os bloqueios de registros na Área de trabalho atual, em
uma Área de trabalho específica ou em todas as áreas de trabalho. Para obter maiores informações,
consulte UNLOCK.

A alternância de ativado (ON) para desativado (OFF) ou vice-versa em SET MULTILOCKS


executa implicitamente UNLOCK ALL — todos os bloqueios de registros em todas as áreas de
trabalho são liberados.

As tabelas podem ser fechadas com USE, CLEAR ALL ou CLOSE DATABASES.

Para obter maiores informações sobre como bloquear arquivos e registros e compartilhar tabelas
em uma rede, consulte o capítulo 17, “Programando para acesso compartilhado”, no Guia do
Desenvolvedor.

LOCK( ), exemplo da função

O exemplo a seguir bloqueia e desbloqueia os primeiros quatro registros nas tabelas customer e
employee.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
SET REPROCESS TO 3 AUTOMATIC
STORE '1,2,3,4' TO gcRecList
gcOldExc = SET('EXCLUSIVO')
SET EXCLUSIVE OFF
SELECT 0
USE employee && Abre a tabela Employee
SELECT 0
USE customer && Abre a tabela Customer
? LOCK('1,2,3,4', 'customer') && Bloqueia os primeiros 4 registros em customer
? RLOCK(gcRecList, 'employee') && Bloqueia os primeiros 4 registros em employee
UNLOCK IN customer

UNLOCK IN employee
SET EXCLUSIVE &gcOldExc
LOG( ), função

Retorna o logaritmo natural (base e) da expressão numérica especificada.

Sintaxe

LOG(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica a expressão numérica para a qual LOG( ) retorna o valor de x na equação
e^x = nExpressão. nExpressão deve ser maior que 0.

Comentários
A base do logaritmo natural é a constante e. O número de casas decimais retornado no resultado é
especificado como SET DECIMALS.

LOG( ), exemplo da função

CLEAR
? LOG(1) && Exibe 0.00
STORE EXP(2) TO gneSquare
? LOG(gneSquare) && Exibe 2.00

LOG10( ), função

Retorna o logaritmo comum (base 10) da expressão numérica especificada.

Sintaxe
LOG10(nExpressão)

Tipos de retorno

Numérico

Argumentos

nExpressão Especifica a expressão numérica para a qual LOG10( ) retorna o valor de x na equação
10^x = nExpressão. nExpressão deve ser maior que 0.

Comentários

A base do logaritmo comum é 10. O número de casas decimais retornado no resultado é


especificado como SET DECIMALS.

LOG10( ), exemplo da função

CLEAR
? LOG10(10) && Exibe 1.00
STORE 100 TO gnBaseTen
? LOG10(gnBaseTen) && Exibe 2.00
? LOG10(gnBaseTen^2) && Exibe 4.00
LOOKUP( ), função

Procura em uma tabela o primeiro registro com um campo correspondente à expressão especificada.

Sintaxe

LOOKUP(CampoRetorno, eExpressãoPesquisa, CampoPesquisado [, cNomeMarca])

Tipos de retorno

Caractere, Numérico, Moeda, Flutuante, Número inteiro, Duplo, Data, DataHora ou Lógico

Argumentos

CampoRetorno Especifica o campo cujo conteúdo é retornado por LOOKUP( ) quando a procura é
bem sucedida. Se a procura não obtiver êxito, LOOKUP( ) retornará uma seqüência de caracteres
vazia, do mesmo tamanho e com mesmo tipo de dados que CampoRetorno.

eExpressãoPesquisa Especifica a expressão de pesquisa. A expressão de pesquisa é, geralmente,


composta pelo conteúdo de um campo da tabela ou pode corresponder à expressão do índice ativo
ou à marca de índice composto.

CampoPesquisado Especifica o campo a ser pesquisado. Se a tabela não tiver um índice ativo,
LOOKUP( ) executará uma pesquisa seqüencial através do campo especificado com
CampoPesquisado.

Se um arquivo ou marca de índice, cuja expressão de chave de índice eqüivale ao campo de


pesquisa especificado, estiver aberta, LOOKUP( ) utilizará o arquivo ou marca de índice para
executar uma pesquisa mais rápida.

cNomeMarca Especifica o nome de uma marca de índice composto para ser utilizado por
LOOKUP( ) na pesquisa. A pesquisa de um índice composto é a pesquisa mais rápida que
LOOKUP( ) pode executar.

Comentários
Se a pesquisa obtiver êxito, LOOKUP( ) moverá o ponteiro do registro para o registro
correspondente e retornará o conteúdo de um campo especificado no registro.

Se a expressão de pesquisa não for localizada, LOOKUP( ) retornará uma seqüência de caracteres
vazia, de mesmo tamanho e com mesmo tipo de dados que CampoRetorno. O ponteiro do registro
está posicionado no fim do arquivo.

Se LOOKUP( ) for utilizado para pesquisar uma tabela pai, os ponteiros dos registros de todas as
tabelas filho relacionadas serão movidas para os registros relacionados.

Esta função não pode ser otimizada com Rushmore.

LOOKUP( ), exemplo da função

No exemplo a seguir, LOOKUP( ) utiliza a marca de índice company para pesquisar a primeira
ocorrência da seqüência “Ernst Handel”. Se a pesquisa obtiver êxito, LOOKUP( ) retornará o
conteúdo do campo contact e @ ... SAY exibirá o valor de retorno.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer ORDER company && Abre a tabela Customer
CLEAR
@ 2,2 SAY LOOKUP(contact, 'Ernst Handel', company, 'company')
LOWER( ), função

Retorna uma expressão de caracteres especificada em letras minúsculas.

Sintaxe

LOWER(cExpressão)

Tipos de retorno

Caracteres

Argumentos

cExpressão Especifica a expressão de caracteres convertida por LOWER( ).

Comentários

LOWER( ) converte todas as letras maiúsculas (A—Z) na expressão de caracteres para letras
minúsculas (a—z). Todos os outros caracteres na expressão de caracteres permanecem inalterados.

LOWER( ), exemplo da função

STORE 'FOX' TO gcName


CLEAR
? LOWER(gcName) && Exibe fox
LPARAMETERS, comando

Atribui dados passados de um programa de chamada para matrizes ou variáveis locais.

Sintaxe

LPARAMETERS ListaParâmetros

Argumentos

ListaParâmetros Especifica os nomes de matrizes ou variáveis de memória locais aos quais os


dados são atribuídos.

Os parâmetros em ListaParâmetros são separados por vírgulas. A instrução LPARAMETERS deve


ter pelo menos o mesmo número de parâmetros que a instrução DO ... WITH. Se mais variáveis ou
matrizes forem listadas na instrução PARAMETERS do que passadas por DO ... WITH, as
variáveis ou matrizes restantes serão inicializadas com um valor falso (.F.). Podem ser passados no
máximo 27 parâmetros.

Você pode utilizar PARAMETERS( ) para determinar o número de parâmetros passados para o
programa, função definida pelo usuário ou procedimento executado mais recentemente.

Comentários

LPARAMETERS cria variáveis ou matrizes locais em um programa, função definida pelo usuário
ou procedimento chamado. Utilize PARAMETERS para criar matrizes ou variáveis particulares.
LPARAMETERS deverá ser a primeira instrução executável no programa, função definida pelo
usuário ou procedimento chamado se você passar valores, variáveis ou matrizes para um deles.

Como padrão, DO ... WITH passa variáveis e matrizes para procedimentos por referência. Quando
um valor for alterado no programa chamado, o novo valor será repassado para a variável ou matriz
associada no programa de chamada. Se você desejar passar uma variável ou matriz por valor,
coloque-a entre parênteses na lista de parâmetros de DO ... WITH. As alterações feitas no
parâmetro do programa chamado não são repassadas para o programa de chamada.

Como padrão, as variáveis são passadas por referência para um procedimento e por valor para uma
função definida pelo usuário. Utilize SET UDFPARMS TO REFERENCE para passar variáveis
para um procedimento ou função definida pelo usuário por referência.

LTRIM( ), função

Retorna a expressão de caracteres especificada sem os espaços à esquerda.

Sintaxe

LTRIM(cExpressão)

Tipos de retorno

Caractere

Argumentos

cExpressão Especifica a expressão de caracteres cujos espaços à esquerda são removidos por
LTRIM( ).

Comentários
Esta função é especialmente útil para remover os espaços à esquerda inseridos quando STR( ) é
utilizado para converter um valor numérico em uma seqüência de caracteres.

LTRIM( ), exemplo da função

STORE 'Redmond' TO gcCity


STORE ' Washington' TO gcState
CLEAR
? gcCity, gcState && Exibe Redmond Washington
? gcCity, LTRIM(gcState) && Exibe Redmond Washington

LUPDATE( ), função

Retorna a data da última vez em que uma tabela foi atualizada.

Sintaxe
LUPDATE([nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Data

Argumentos

nÁreaTrabalho | cAliasTabela Retorna a última atualização feita em uma tabela aberta em uma
outra Área de trabalho. nÁreaTrabalho especifica o número da Área de trabalho e cAliasTabela
especifica o alias de tabela. LUPDATE( ) retornará a data da última atualização feita na tabela na
Área de trabalho atualmente selecionada, caso você omita nÁreaTrabalho e cAliasTabela.

Se nenhuma tabela estiver aberta na Área de trabalho especificada, LUPDATE( ) retornará uma
data em branco. Se nenhuma tabela possuir o alias especificado, o Visual FoxPro irá gerar uma
mensagem de erro.

Comentários

Esta função é útil em procedimentos de atualização.

LUPDATE( ), exemplo da função

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && Abre a tabela Customer

CLEAR
? LUPDATE( ) && Exibe a data da última atualização
MAX( ), função

Avalia um conjunto de expressões e retorna a expressão com o valor máximo.

Sintaxe

MAX(eExpressão1, eExpressão2 [, eExpressão3...])

Tipos de retorno

Caractere, Numérico, Moeda, Duplo, Flutuante, Data ou Data e Hora

Argumentos

eExpressão1, eExpressão2 [, eExpressão3...] Especifica as expressões a partir das quais você


deseja que MAX( ) retorne a expressão com o maior valor. Todas as expressões devem ser do
mesmo tipo de dados.

MAX( ), exemplo da função

O exemplo a seguir utiliza APPEND BLANK para criar uma tabela com 10 registros contendo
valores aleatórios e, em seguida, utiliza MIN( ) e MAX( ) para exibir os valores máximos e
mínimos na tabela.

CLOSE DATABASES
CREATE TABLE Random (cValue N(3))
FOR nItem = 1 TO 10 && Inclui 10 registros,
APPEND BLANK
REPLACE cValue WITH 1 + 100 * RAND( ) && Insere valores aleatórios
ENDFOR

CLEAR
LIST && Exibe os valores
gnMaximum = 1 && Inicializa o valor mínimo
gnMinimum = 100 && Inicializa o valor máximo
SCAN
gnMinimum = MIN(gnMinimum, cValue)
gnMaximum = MAX(gnMaximum, cValue)
ENDSCAN
? 'O valor mínimo é: ', gnMinimum && Exibe o valor mínimo

? 'O valor máximo é: ', gnMaximum && Exibe o valor máximo

MD | MKDIR, comando

Sintaxe

MD cCaminho | MKDIR cCaminho

Argumentos

cCaminho Especifica um caminho (com um designador de unidade de disco e diretórios) ou um


diretório.

Se cCaminho for um diretório sem um designador de unidade de disco, o diretório será criado
como um subdiretório do diretório padrão atual do Visual FoxPro.

Comentários

O Visual FoxPro irá gerar uma mensagem de erro se você tentar criar um diretório já existente.

MD | MKDIR, exemplo do comando


O exemplo a seguir utiliza MKDIR para criar um novo diretório denominado mytstdir, em seguida
CHDIR é utilizado para alterar ao novo diretório. GETDIR( ) é utilizada para exibir a estrutura do
diretório e, em seguida, RMDIR é utilizado para remover o diretório recentemente criado.
GETDIR( ) é utilizada para exibir novamente a estrutura do diretório.

SET DEFAULT TO HOME( ) && Restaura o diretório do Visual FoxPro


MKDIR mytstdir && Cria um novo diretório
CHDIR mytstdir && Altera ao novo diretório
= GETDIR( ) && Exibe a caixa de diálogo Selecionar diretório
SET DEFAULT TO HOME( ) && Restaura o diretório do Visual FoxPro
RMDIR mytstdir && Remove o novo diretório
= GETDIR( ) && Exibe a caixa de diálogo Selecionar diretório

MDX( ), função

Retorna o nome do arquivo de índice composto .CDX aberto que contém o número da posição de
índice especificada.

Sintaxe

MDX(nNúmeroÍndice [, nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Caractere
Argumentos

nNúmeroÍndice Especifica o nome de arquivo de índice composto a ser retornado. Se a tabela


possui um arquivo de índice composto estrutural e nNúmeroÍndice é 1, o nome do arquivo de índice
composto estrutural (que é sempre igual ao nome da tabela) é retornado. Se nNúmeroÍndice é 2, o
nome do primeiro arquivo de índice composto especificado com USE ou SET INDEX é retornado.
Se nNúmeroÍndice é 3, o segundo nome do arquivo de índice composto é retornado e assim por
diante. Se nNúmeroÍndice é maior do que o número de arquivos de índice composto abertos, uma
seqüência vazia é retornada.

Se a tabela não possui um arquivo de índice composto estrutural e nNúmeroÍndice é 1, o nome do


primeiro arquivo de índice composto especificado com USE ou SET INDEX é retornado. Se
nNúmeroÍndice é 2, o segundo nome de arquivo de índice composto é retornado e assim por diante.
Se nNúmeroÍndice é maior do que o número de arquivos de índice composto abertos, uma
seqüência vazia é retornada.

nÁreaTrabalho Especifica o número da Área de trabalho para arquivos de índice composto abertos
em áreas de trabalho diferentes da que está sendo utilizada no momento. Se você omitir este
argumento opcional, os nomes de arquivos de índice composto serão retornados para a Área de
trabalho atual.

cAliasTabela Especifica o alias de tabela para arquivos de índice composto abertos em áreas de
trabalho diferentes da que está sendo utilizada no momento. Se você omitir este argumento
opcional, os nomes de arquivos de índice composto serão retornados para a Área de trabalho atual.

Comentários

MDX( ) é idêntico a CDX( ).

Os arquivos de índice podem ser abertos para uma tabela com a cláusula INDEX do comando USE
ou com SET INDEX. Um arquivo de índice composto estrutural é automaticamente aberto com a
sua tabela. MDX ( ) ignora todos os arquivos de índice .IDX especificados com USE ou SET
INDEX.

Utilize TAG( ) para retornar nomes de marca a partir de um arquivo de índice composto; utilize
NDX( ) para retornar o nome de um arquivo de índice .IDX aberto.

No Visual FoxPro for Windows, quando SET FULLPATH está ativado (ON), MDX( ) retorna o
caminho para o arquivo .CDX com o nome de arquivo .CDX. Quando SET FULLPATH está
desativado (OFF), MDX( ) retorna a unidade onde se encontra o arquivo .CDX com o nome de
arquivo .CDX.

No Visual FoxPro for Macintosh, MDX( ) ignora a definição de FULLPATH e sempre retorna o
caminho para o arquivo .CDX com o nome de arquivo .CDX.
MDY( ), função

Retorna a expressão de data e hora ou data especificada em formato mês-dia-ano, com o nome do
mês escrito por extenso.

Sintaxe

MDY(dExpressão | tExpressão)

Tipos de retorno

Caractere

Argumentos

dExpressão Especifica a expressão de data para retornar em formato mês-dia-ano.

tExpressão Especifica a expressão de data e hora para retornar em formato mês-dia-ano.

Comentários
Se SET CENTURY estiver desativado (OFF), a expressão de caractere será retornada em um
formato mês, dd, aa. Se SET CENTURY estiver ativado (ON), o formato será mês, dd, aaaa.

MDY( ), exemplo da função

O exemplo a seguir cria uma função definida pelo usuário que retorna uma data com o dia da
semana correspondente.

SET CENTURY OFF

CLEAR
? Longdate({02/16/95}) && Exibe quinta-feira, fevereiro 16, 95

SET CENTURY ON
? Longdate({02/16/95}) && Exibe quinta-feira, fevereiro 16, 1995

*** LongDate ***

FUNCTION longdate
PARAMETERS gdDate
RETURN CDOW(gdDate) + ', ' + MDY(gdDate)

MEMORY( ), função

Retorna a quantidade de memória disponível para executar um programa externo.

Sintaxe

MEMORY( )
Tipos de retorno

Numérico

Comentários

No Visual FoxPro, MEMORY( ) sempre retorna 640.

MEMORY( ) é semelhante a SYS(12), com duas exceções:

· MEMORY( ) retorna a quantidade de memória disponível em kilobytes; SYS(12) retorna a


quantidade de memória em bytes.
· MEMORY( ) retorna uma expressão numérica. SYS(12) retorna seu valor como uma
seqüência de caracteres.

MENU( ), função

Retorna o nome da barra de menus ativa como uma seqüência de caracteres maiúsculos.

Sintaxe

MENU( )

Tipos de retorno

Caractere

Comentários

MENU( ) retorna uma seqüência vazia se não houver menu ativo. Utilize o Criador de menus para
criar um menu e ativá-lo.

MENU( ), exemplo da função

O exemplo a seguir utiliza MENU( ) para passar o nome de uma barra de menus para um
procedimento. A barra de menus do sistema atual é gravada na memória com SET SYSMENU
SAVE e todos os títulos de menus do sistema são removidos com SET SYSMENU TO.
Vários títulos de menus são criados com DEFINE PAD. Quando você escolhe um título de menu,
MENU( ) passa o nome da barra de menus do sistema do Visual FoxPro, _MSYSMENU, para o
procedimento choice. O procedimento choice exibe o nome do título de menu escolhido e o nome
da barra de menus do sistema. Se você escolher o menu Sair, o menu do sistema do Visual FoxPro
original será restaurado.

*** Save this program as MENUEXAM.PRG in the default VFP directory.***


CLEAR
SET SYSMENU SAVE
SET SYSMENU TO
DEFINE PAD padSys OF _MSYSMENU PROMPT '\<System' COLOR SCHEME 3 ;
KEY ALT+S, ''
DEFINE PAD padEdit OF _MSYSMENU PROMPT '\<Edit' COLOR SCHEME 3 ;
KEY ALT+E, ''
DEFINE PAD padRecord OF _MSYSMENU PROMPT '\<Record' COLOR SCHEME 3 ;
KEY ALT+R, ''
DEFINE PAD padWindow OF _MSYSMENU PROMPT '\<Window' COLOR SCHEME 3 ;
KEY ALT+W, ''
DEFINE PAD padReport OF _MSYSMENU PROMPT 'Re\<ports' COLOR SCHEME 3 KEY
ALT+P, ''

DEFINE PAD padExit OF _MSYSMENU PROMPT 'E\<xit' COLOR SCHEME 3 ;


KEY ALT+X, ''
ON SELECTION MENU _MSYSMENU ;
DO choice IN menuexam WITH PAD(), MENU()
PROCEDURE choice
PARAMETER gcPad, gcMenu
WAIT WINDOW 'You chose ' + gcPad + ;
' from menu ' + gcMenu NOWAIT
IF gcPad = 'PADEXIT'
SET SYSMENU TO DEFAULT
ENDIF
MESSAGE( ), função

Retorna a mensagem de erro atual como uma seqüência de caracteres ou o conteúdo da linha do
programa que causou o erro.

Sintaxe

MESSAGE([1])

Tipos de retorno

Caractere

Argumentos

1 Se MESSAGE( ) for utilizado em uma rotina ON ERROR, inclua este argumento para retornar o
código de origem do programa que causou o erro. Se o código de origem do programa não estiver
disponível, MESSAGE(1) retornará um dos seguintes itens:

· do programa se a linha for substituída por macro.


· Um comando se a linha contiver um comando sem cláusulas adicionais.
· Um comando seguido de três pontos (...) se a linha contiver um comando e cláusulas
adicionais.

Comentários

Ao contrário de ERROR( ), MESSAGE( ) não é redefinido por RETURN ou RETRY.


MESSAGE( ), exemplo da função

O exemplo a seguir exibe saídas de MESSAGE( ) e MESSAGE(1).

ON ERROR DO Errhand

*** The next line should generate an error ***

USE Nodatabase
ON ERROR && restaura o gerenciador de erros do sistema
PROCEDURE Errhand
? 'Line of code with error: ' + MESSAGE(1)
? 'Error number: ' + STR(ERROR( ))
? 'Error message: ' + MESSAGE( )

MIN( ), função

Avalia um conjunto de expressões e retorna a expressão de menor valor.

Sintaxe

MIN(eExpressão1, eExpressão2 [, eExpressão3 ...])

Tipos de retorno

Caractere, Numérico, Moeda, Duplo, Flutuante, Data ou DataHora

Argumentos
eExpressão1, eExpressão2 [, eExpressão3 ...] Especifica o conjunto de expressões de onde você
quer que MIN( ) retorne a expressão de menor valor. Todas as expressões devem ser do mesmo
tipo.

MIN( ), exemplo da função

O exemplo a seguir utiliza APPEND BLANK para criar uma tabela com 10 registros que
contenham valores aleatórios e, em seguida, utiliza MIN( ) e MAX( ) para exibir os valores máximo
e mínimo na tabela.

CLOSE DATABASES
CREATE TABLE Random (cValue N(3))
FOR nItem = 1 TO 10 && Inclui 10 registros,
APPEND BLANK
REPLACE cValue WITH 1 + 100 * RAND( ) && Insere valores aleatórios
ENDFOR

CLEAR
LIST && Exibe os valores
gnMaximum = 1 && Inicializa valor mínimo
gnMinimum = 100 && Inicializa valor máximo
SCAN
gnMinimum = MIN(gnMinimum, cValue)
gnMaximum = MAX(gnMaximum, cValue)
ENDSCAN
? 'The minimum value is: ', gnMinimum && Exibe valor mínimo

? 'The maximum value is: ', gnMaximum && Exibe valor máximo
MINUTE( ), função

Retorna a parte dos minutos de uma expressão DataHora.

Sintaxe

MINUTE(tExpressão)

Tipos de Retorno

Numérico

Argumentos

tExpressão Especifica a expressão DataHora da qual a parte dos minutos será retornada.

MINUTE( ), exemplo da função

O exemplo a seguir exibe a parte dos minutos da hora atual e a parte dos minutos de uma
determinada hora.

CLEAR
? MINUTE(DATETIME( ))
? MINUTE({10:42am}) && Exibe 42

MLINE( ), função

Retorna uma determinada linha de um campo memo como uma seqüência de caracteres.

Sintaxe

MLINE(NomeCampoMemo, nNúmeroLinha [, nNúmeroDeCaracteres])

Tipos de retorno

Caractere

Argumentos
NomeCampoMemo Especifica o nome do campo memo a partir do qual MLINE( ) retorna uma
linha. Se o campo memo está em uma tabela aberta em uma área de trabalho que não é a atual,
coloque um ponto e o alias da tabela antes do nome do campo memo.

nNúmeroLinha Especifica o número da linha a ser retornada do campo memo. Uma seqüência
vazia será retornada se nNúmeroLinha for negativo, igual a 0 ou maior do que o número de linhas
existentes no campo memo..

nNúmeroDeCaracteres Especifica o número de caracteres desde o início do campo memo depois


dos quais MLINE( ) retorna a linha especificada.

A variável de memória do sistema _MLINE é normalmente utilizada para nNúmeroDeCaracteres.


_MLINE é automaticamente ajustado toda vez que MLINE( ) é chamado.

Em procedimentos recorrentes que retornam linhas de campos memo grandes, é possível obter um
melhor desempenho incluindo-se _MLINE como nNúmeroDeCaracteres.

Comentários

MLINE( ) remove qualquer espaço subseqüente da linha especificada com nNúmeroLinha.

O tamanho e o número das linhas no campo memo são determinados pelo valor atual de SET
MEMOWIDTH (o tamanho de linha padrão é de 50 caracteres). Nenhum caractere adicional será
retornado se for encontrado um retorno de carro. A definição _WRAP atual determina como a linha
do campo memo será exibida.

Ao procurar uma seqüência de caracteres em um campo memo, você pode utilizar ATLINE( ) ou
ATCLINE( ) para retornar o número da linha em que a seqüência de caracteres se encontra. Utilize
esse número de linha em MLINE( ) para retornar o conteúdo da linha do campo memo.

MLINE( ), exemplo da função

No exemplo a seguir, são utilizados dois métodos para retornar linhas de um campo memo. Dois
loops utilizam MLINE( ) para retornarem linhas de campo memo. Observe a melhoria no
desempenho no segundo loop quando a variável do sistema _MLINE é utilizada em MLINE( ).

CLEAR
SET TALK OFF
SET MEMOWIDTH TO 50
CLOSE DATABASES
CREATE TABLE tmemo (name c(10), notes m)
APPEND BLANK && Adiciona um registro
WAIT WINDOW 'Filling memo field - takes several seconds' NOWAIT
*** Fill the memo field ***
FOR gnOuterLoop = 1 TO 5 && loop 5 vezes
FOR gnAlphabet = 65 TO 75 && letras A a H
REPLACE notes WITH REPLICATE(CHR(gnAlphabet), 10) ;
+ CHR(13) ADDITIVE
NEXT
NEXT

*** Display all lines from the memo field ***

STORE MEMLINES(notes) TO gnNumLines && Número de linhas em campo memo


STORE SECONDS( ) TO gnBegin && Hora inicial
FOR gnCount = 1 TO gnNumLines && Loop para número de linhas em campos memo
? MLINE(notes, gnCount) && Exibe cada linha
NEXT
? STR(SECONDS( ) - gnBegin, 4, 2) + ' seconds' && Tempo total

*** Preferable method using _MLINE in MLINE( ) ***


*** Display all lines from the memo field ***

WAIT 'Press a key to see the preferred method' WINDOW

CLEAR
STORE 0 TO _MLINE && Redefine _MLINE como zero
STORE SECONDS( ) TO gnBegin && Hora inicial
FOR count = 1 TO gnNumLines && Loop para número de linhas em campo memo
? MLINE(notes, 1, _MLINE) && Exibe cada linha
NEXT
? STR(SECONDS( ) - gnBegin, 4, 2) + ' seconds' && Tempo total
SET TALK ON
CLOSE DATABASES
ERASE tmemo.dbf
ERASE tmemo.fpt
MOD( ), função

Divide uma expressão numérica por outra expressão numérica e retorna o restante.

Sintaxe

MOD(nDividendo, nDivisor)

Tipos de retorno

Numérico

Argumentos

nDividendo Especifica o dividendo. O número de casas decimais em nDividendo determina o


número de casas decimais no valor de retorno.

nDivisor Especifica o divisor. Um número positivo será retornado se nDivisor for positivo e um
número negativo será retornado se nDivisor for negativo.

Comentários

A função de módulo MOD( ) e o operador % retornam resultados idênticos.

MOD( ), exemplo da função

CLEAR
? MOD(36,10) && Exibe 6
? MOD((4*9), (90/9)) && Exibe 6
? MOD(25.250,5.0) && Exibe 0.250
? IIF(MOD(YEAR(DATE( )), 4) = 0, ' Olimpíadas de Verão este ano';
, 'Não há Olimpíadas de Verão este ano')
MODIFY COMMAND, comando

Abre uma janela de edição para que você possa modificar ou criar um arquivo de programa.

Sintaxe

MODIFY COMMAND [NomeArquivo | ?]


[NOEDIT]
[NOMENU]
[NOWAIT]
[RANGE nCaractereInicial, nCaractereFinal]
[[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]]
[AS nPáginaCódigo]
[SAME]
[SAVE]

Argumentos

NomeArquivo Especifica o nome de arquivo do programa a ser aberto ou criado. Se você não
especificar uma extensão para um novo arquivo de programa, o Visual FoxPro atribuirá
automaticamente uma extensão .PRG. MODIFY COMMAND suporta um estrutura de arquivo que
contém os curingas asterisco (*) e ponto de interrogação (?). Uma janela de edição é aberta para
cada programa cujo nome de arquivo corresponde ao estrutura de arquivo.

Se você omitir o nome de arquivo, será aberta uma janela de edição para um arquivo inicialmente
denominado PROG1.PRG. Quando fechar a janela de edição, você poderá salvar o arquivo com um
nome diferente.

? Exibe a caixa de diálogo Abrir. Selecione um dos programas existentes ou digite o nome de um
novo programa a ser criado.
NOEDIT Especifica que o arquivo de programa não pode ser alterado, mas pode ser visualizado e
copiado para a Área de transferência.

NOMENU Remove o título do menu Formatar da barra de menu do sistema do Visual FoxPro,
impedindo alterações de fonte, tamanho de fonte, espaço entre linhas e recuo.

NOWAIT Continua a execução do programa após ser aberta a janela de edição. O programa não
aguarda o fechamento da janela de edição, mas continua a execução na linha do programa
imediatamente seguinte à linha que contém MODIFY COMMAND NOWAIT. Se você omitir
NOWAIT quando MODIFY COMMAND for utilizado em um programa, uma janela de edição será
aberta e a execução do programa será colocada em pausa até o fechamento desta janela.

NOWAIT só tem efeito dentro de um programa. Ele não tem qualquer efeito em MODIFY
COMMAND quando emitido na janela Comando.

Um NOWAIT implícito ocorrerá se você abrir mais de uma janela de edição com um único
comando MODIFY COMMAND. Por exemplo:

MODIFY COMMAND *.PRG.

RANGE nCaractereInicial, nCaractereFinal Especifica um intervalo de caracteres selecionados


quando a janela de edição é aberta. Os caracteres são selecionados a partir da posição especificada
com nCaractereInicial até (mas não inclusive) a posição do nCaractereFinal. Se nCaractereInicial
for igual a nCaractereFinal, nenhum caractere será selecionado e o cursor será colocado na posição
especificada com nCaractereInicial.

WINDOW NomeJanela1 Especifica uma janela cujas características são assumidas pela janela de
edição. Por exemplo, se a janela for criada com a opção FLOAT de DEFINE WINDOW, a janela de
edição poderá ser movida. A janela não precisa estar ativa ou visível, mas ela deve estar definida.

IN [WINDOW] NomeJanela2 Especifica uma janela pai em que a janela de edição é aberta. A
janela de edição não assume as características da janela pai e não pode ser movida para fora da
janela pai. Se você mover a janela pai, moverá a janela de edição junto com ela.

A janela pai deve em primeiro lugar ser definida com DEFINE WINDOW e deve estar visível para
o acesso à janela de edição.

IN SCREEN Abre explicitamente a janela de edição na janela principal do Visual FoxPro, após ser
colocada na janela pai. Uma janela de edição é colocada em uma janela pai ao incluir a cláusula IN
WINDOW.

AS nPáginaCódigo Converte automaticamente caracteres acentuados em um arquivo de programa


criado em uma outra plataforma do Visual FoxPro. A expressão numérica nPáginaCódigo
especifica a página de código da plataforma do Visual FoxPro em que o arquivo de programa foi
criado. O arquivo será salvo nesta página de código a menos que você selecione Salvar como no
menu Arquivo para salvar o arquivo em uma página de código diferente.

SAME Impede que a janela de edição seja trazida para a frente como a janela ativa. Caso esteja
oculta, ela será exibida, mas não se tornará a janela ativa.
SAVE Deixa a janela de edição aberta depois que uma outra janela é ativada. Se você omitir
SAVE, a janela de edição será fechada quando uma outra janela for ativada. A inclusão de SAVE
não tem qualquer efeito quando emitido da janela Comando.

Comentários

Quando você faz modificações em um arquivo de programa, o arquivo atualizado é gravado no


disco. No Visual FoxPro, um arquivo backup com a extensão .BAK será criado se você selecionar a
caixa de verificação Criar cópia de backup na guia Editar da caixa de diálogo Opções, que aparece
quando você seleciona Opções no menu Ferramentas.

O editor interno do Visual FoxPro será utilizado, a menos que você especifique um editor externo
com TEDIT no arquivo de configuração.

MODIFY DATABASE, comando

Abre o Criador de bancos de dados, possibilitando a modificação interativa do banco de dados


atual.

Sintaxe

MODIFY DATABASE [NomeBancoDados | ?]


[NOWAIT] [NOEDIT]

Argumentos

NomeBancoDados Especifica o nome do banco de dados a ser modificado.

? Exibe a caixa de diálogo Abrir, onde você pode especificar o nome do banco de dados a ser
modificado.

NOWAIT Continua a execução do programa após a abertura do Criador de bancos de dados. O


programa não aguarda o fechamento do Criador de bancos de dados, mas continua a execução na
linha do programa imediatamente seguinte à linha que contém MODIFY DATABASE NOWAIT.
Se você omitir NOWAIT quando MODIFY DATABASE for emitido em um programa, o Criador
de bancos de dados será aberto e a execução do programa será colocada em pausa até o seu
fechamento.

NOWAIT só tem efeito quando emitido dentro de um programa. Ele não tem qualquer efeito em
MODIFY CLASS quando emitido na janela Comando.

NOEDIT Evita alterações no banco de dados.


Comentários

Para obter maiores informações sobre como modificar de forma interativa um banco de dados com
o Criador de bancos de dados, consulte os tópicos Criador de bancos de dados e Barra de
ferramentas criador de bancos de dados e o capítulo 3, “Reunindo tabelas em um banco de dados”,
no Guia do Usuário.

MODIFY DATABASE, exemplo do comando

O seguinte exemplo exibe o Criador de bancos de dados com as tabelas no banco de dados testdata.

CLOSE DATABASES
SET PATH TO (HOME( ) + 'samples\data\') && Define o caminho para o banco de dados
MODIFY DATABASE testdata && Abre o banco de dados testdata

MODIFY FILE, comando

Abre uma janela de edição para que você possa modificar ou criar um arquivo de texto.

Sintaxe

MODIFY FILE [NomeArquivo | ?]


[NOEDIT]
[NOMENU]
[NOWAIT]
[RANGE nCaractereInicial, nCaractereFinal]
[[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]]
[AS nPáginaCódigo]
[SAME]
[SAVE]

Argumentos

NomeArquivo Especifica o nome do arquivo de texto. Se você não especificar uma extensão junto
com o nome do novo arquivo texto, o Visual FoxPro automaticamente atribuirá uma extensão
.TXT. MODIFY FILE suporta uma estrutura de arquivo que pode conter os curingas asterisco (*) e
ponto de interrogação (?). Uma janela de edição é aberta para cada arquivo de texto cujo nome
corresponda à estrutura de arquivo.

Se você omitir o nome de arquivo, será aberta uma janela de edição para um arquivo inicialmente
denominado FILE1. Quando fechar a janela de edição, você poderá salvar o arquivo com um nome
diferente.

? Exibe a caixa de diálogo Abrir na qual você pode selecionar um arquivo de texto.

NOEDIT Especifica que o arquivo de texto não pode ser alterado, mas pode ser visualizado e
copiado para a Área de transferência.

NOMENU Remove o título do menu Formatar da barra de menu do sistema do Visual FoxPro,
impedindo alterações de fonte, tamanho de fonte, espaço entre linhas e recuo.

NOWAIT Continua a execução do programa após a abertura da janela de edição. O programa não
aguarda o fechamento da janela de edição, mas continua a execução na linha do programa
imediatamente seguinte à linha que contém MODIFY FILE NOWAIT. Se você omitir NOWAIT ,
quando emitir MODIFY FILE em um programa, a janela de edição será aberta e a execução do
programa será colocada em pausa até o seu fechamento.

NOWAIT só tem efeito dentro de um programa. Ele não tem qualquer efeito em MODIFY FILE
quando emitido na janela Comando.

Um NOWAIT implícito ocorrerá se você abrir mais de uma janela de edição com um único
comando MODIFY FILE. Por exemplo:

MODIFY FILE *.TXT

RANGE nCaractereInicial, nCaractereFinal Especifica um intervalo de caracteres selecionado,


quando você abre uma janela de edição. Os caracteres são selecionados a partir da posição
especificada com nCaractereInicial até (mas não inclusive) a posição do nCaractereFinal. Se
nCaractereInicial for igual a nCaractereFinal, não será selecionado nenhum caractere e o cursor será
colocado na posição especificada com nCaractereInicial
.

WINDOW NomeJanela1 Especifica uma janela cujas características são assumidas pela janela de
edição. Por exemplo, se a janela for criada com a opção FLOAT de DEFINE WINDOW, a janela de
edição poderá ser movida. A janela não precisa estar ativa ou visível, mas ela deve estar definida.

IN [WINDOW] NomeJanela2 Especifica uma janela pai em que a janela de edição é aberta. A
janela de edição não assume as características da janela pai e não é possível movê-la para fora dela.
Se você mover a janela pai, moverá a janela de edição junto com ela.

A janela pai deve, em primeiro lugar, ser definida com DEFINE WINDOW e deve estar visível
para o acesso à janela de edição.

IN SCREEN Abre explicitamente a janela de edição na janela principal do Visual FoxPro, após ser
colocada na janela pai. Uma janela de edição é colocada em uma janela pai ao incluir a cláusula IN
WINDOW.

AS nPáginaCódigo Converte automaticamente caracteres acentuados em um arquivo de texto


criado em uma outra plataforma do Visual FoxPro. A expressão numérica nPáginaCódigo
especifica a página de código da plataforma do Visual FoxPro em que o arquivo de texto foi criado.
O arquivo será salvo nesta página de código a menos que você selecione Salvar como no menu
Arquivo para salvar o arquivo em uma página de código diferente.

SAME Impede que a janela de edição seja adiantada como a janela ativa. Caso esteja oculta, ela
será exibida, mas não se tornará a janela ativa.

SAVE Deixa a janela de edição aberta depois que uma outra janela é ativada. Se você omitir
SAVE, a janela de edição será fechada quando uma outra janela for ativada. A inclusão de SAVE
não tem qualquer efeito quando emitido na janela Comando.

Comentários

Quando são feitas modificações em um arquivo de texto, o arquivo atualizado é gravado no disco.
No Visual FoxPro, um arquivo backup com a extensão .BAK será criado se você selecionar a caixa
de verificação Criar cópia de backup na guia Editar da caixa de diálogo Opções, que aparecem
quando você seleciona Opções no menu Ferramentas. Nas versões anteriores do FoxPro, um
arquivo backup com a extensão .BAK será criado se você selecionar a caixa de verificação Backup
na caixa de diálogo Preferências, que aparece ao selecionar Preferências no menu Editar.

O editor do Visual FoxPro será utilizado, a menos que você especifique um editor externo com
TEDIT no arquivo de configuração.
MODIFY GENERAL, comando

Abre janelas de edição de campos gerais do registro atual.

Sintaxe

MODIFY GENERAL CampoGeral1 [, CampoGeral2 ...]


[NOMODIFY]
[NOWAIT]
[[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]]

Argumentos

CampoGeral1 [, CampoGeral2 ...] Especificam os nomes dos campos gerais que devem ser
abertos. Para abrir uma janela de edição para um campo Geral de uma tabela aberta em uma Área
de trabalho, que não seja a atual, inclua o alias de tabela com o nome do campo. Para abrir vários
campos gerais no registro atual, inclua uma lista de campos gerais separados por vírgulas.

NOMODIFY Especifica que o objeto de OLE contido no campo Geral não pode ser alterado, mas
pode ser visualizado e copiado para a Área de transferência.

NOWAIT Continua a execução do programa após a abertura da janela de edição de campo Geral.
O programa não aguarda o fechamento desta janela, mas continua a execução na linha do programa
imediatamente seguinte à linha que contém MODIFY GENERAL NOWAIT. Se você omitir
NOWAIT, quando emitir MODIFY GENERAL em um programa, será aberta uma janela de edição
e a execução do programa será colocada em pausa até o fechamento desta janela.

NOWAIT só tem efeito quando emitido dentro de um programa. Ele não tem qualquer efeito em
MODIFY GENERAL quando emitido na janela Comando.

WINDOW NomeJanela1 Especifica uma janela cujas características são assumidas pela janela de
edição de campo Geral. Por exemplo, se a janela for criada com a opção FLOAT de DEFINE
WINDOW, a janela de edição de campo Geral poderá ser movida. A janela não precisa estar ativa
ou visível, mas ela deve estar definida.

IN [WINDOW] NomeJanela2 Especifica uma janela pai na qual a janela de edição de campo
Geral é aberta. A janela de campo Geral não assume as características da janela pai e não é possível
movê-la para fora desta janela. Se você mover a janela pai, moverá a janela de campo Geral
também.
A janela pai deve em primeiro lugar ser definida com DEFINE WINDOW e deve estar visível para
o acesso à janela de campo Geral.

IN SCREEN Abre explicitamente a janela de campo Geral na janela principal do Visual FoxPro,
após ser colocada na janela pai. Uma janela de campo Geral é colocada em uma janela pai ao incluir
a cláusula IN WINDOW.

Comentários

Quando uma janela de edição está aberta, você pode inserir, modificar ou excluir um objeto de
OLE.

Para obter maiores informações sobre objetos de OLE no Visual FoxPro, consulte “Adicionando
objetos de OLE a tabelas” no capítulo 16, “Adicionando a OLE,” no Guia do Desenvolvedor.

MODIFY MEMO, comando


Abre uma janela de edição de um campo Memo no registro atual.

Sintaxe

MODIFY MEMO CampoMemo1 [, CampoMemo2 ...]


[NOEDIT]
[NOMENU]
[NOWAIT]
[RANGE nCaractereInicial, nCaractereFinal]
[[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]]
[SAME]
[SAVE]

Argumentos

CampoMemo1 [, CampoMemo2 ...] Especifica os nomes dos campos Memo que serão editados.
Para abrir uma janela de edição de um campo Memo, contido em uma tabela aberta em uma outra
Área de trabalho, inclua o alias de tabela junto com o nome do campo.

NOEDIT Especifica que o campo Memo aberto não pode ser alterado, mas pode ser visualizado e
copiado para a Área de transferência.

NOMENU Remove o título do menu Formatar da barra de menu do sistema do Visual FoxPro,
impedindo alterações de fonte, tamanho de fonte, espaço entre linhas e recuo.

NOWAIT Continua a execução do programa após a abertura da janela de edição. O programa não
aguarda o fechamento da janela de edição, mas continua a execução na linha do programa
imediatamente seguinte à linha que contém MODIFY MEMO NOWAIT. Se você omitir NOWAIT,
quando emitir MODIFY MEMO em um programa, uma janela de edição será aberta e a execução
do programa será colocada em pausa até o seu fechamento.

NOWAIT só tem efeito dentro de um programa. Ele não tem qualquer efeito em MODIFY MEMO
quando emitido na janela Comando.

RANGE nCaractereInicial, nCaractereFinal Especifica um intervalo de caracteres selecionados


quando a janela de edição é aberta. Os caracteres são selecionados a partir da posição especificada
com nCaractereInicial até (mas não inclusive) a posição do nCaractereFinal. Se nCaractereInicial
for igual a nCaractereFinal, não será selecionado nenhum caractere e o cursor será colocado na
posição especificada com nCaractereInicial.

WINDOW NomeJanela1 Especifica uma janela cujas características a janela de edição assume.
Por exemplo, se a janela for criada com a opção FLOAT de DEFINE WINDOW, a janela de edição
poderá ser movida. A janela não precisa estar ativa ou visível, mas ela deve estar definida.

IN [WINDOW] NomeJanela2 Especifica uma janela pai em que a janela de edição é aberta. A
janela de edição não assume as características da janela pai e não é possível movê-la para fora desta
janela. Se você mover a janela pai, moverá a janela de edição também.
A janela pai deve em primeiro lugar ser definida com DEFINE WINDOW, e deve estar visível para
o acesso da janela de edição.

IN SCREEN Abre explicitamente a janela de edição na janela principal do Visual FoxPro, após ser
colocada na janela pai. Uma janela de edição é colocada em uma janela pai ao incluir a cláusula IN
WINDOW.

SAME Impede que a janela de edição seja adiantada como a janela ativa. Caso esteja oculta, ela
será exibida, mas não se tornará a janela ativa.

SAVE Deixa a janela de edição aberta após uma outra janela ser ativada. Se você omitir SAVE, a
janela de edição será fechada quando uma outra janela for ativada. A inclusão de SAVE não tem
qualquer efeito quando emitido na janela Comando.

Comentários

É possível visualizar ou alterar o conteúdo do campo Memo na janela de edição.

Em uma tabela aberta para acesso compartilhado em uma rede, o registro atual é bloqueado
automaticamente quando a edição começa em um de seus campos Memo.

MODIFY MEMO, exemplo do comando

O seguinte exemplo abre o campo Memo notes para o primeiro registro em employee em uma
janela de edição com um intervalo realçado.

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE employee && Abre a tabela Employee
MODIFY MEMO notes NOEDIT RANGE 1,10 && Os primeiros 10 caracteres selecionados
USE
MODIFY MENU, comando

Abre o Criador de menus para que você possa modificar ou criar um sistema de menus.

Sintaxe

MODIFY MENU [NomeArquivo | ?]


[[WINDOW NomeJanela1]
[IN [WINDOW] NomeJanela2 | IN SCREEN]]
[NOWAIT]
[SAVE]

Argumentos

NomeArquivo Especifica o nome do arquivo para o menu. Caso uma extensão para o nome de
arquivo não seja especificada, o Visual FoxPro atribui automaticamente uma extensão .MNX.

? Exibe a caixa de diálogo Abrir na qual você pode selecionar um arquivo de menu existente ou
digitar o nome de um novo menu a ser criado.

WINDOW NomeJanela1 Especifica a janela cujas características o Criador de menus assume. Por
exemplo, se a janela for criada com a opção FLOAT de DEFINE WINDOW, o Criador de menus
poderá ser movido. A janela não precisa estar ativa ou visível, mas deve estar definida.

IN [WINDOW] NomeJanela2 Especifica uma janela pai em que o Criador de menus é aberto. O
Criador de menus não assume as características da janela pai e não é possível movê-lo para fora
dessa janela. Se você mover a janela pai, moverá o Criador de menus junto com ela.

A janela pai deve, em primeiro lugar, ser definida com DEFINE WINDOW e deve estar visível para
o acesso ao Criador de menus.
IN SCREEN Abre explicitamente o Criador de menus na janela principal do Visual FoxPro, após
ser colocado em uma janela pai. O Criador de menus é colocado em uma janela pai ao incluir a
cláusula IN WINDOW.

NOWAIT Continua a execução do programa após a abertura do Criador de menus. O programa


não aguarda o fechamento do Criador de menus, mas continua a execução na linha do programa
imediatamente a seguir da linha que contém MODIFY MENU NOWAIT. Se você omitir NOWAIT
quando emitir MODIFY MENU em um programa, o Criador de menus será aberto e a execução do
programa será colocada em pausa até o seu fechamento.

NOWAIT somente tem efeito quando emitido dentro de um programa. Ele não tem nenhum efeito
em MODIFY MENU quando emitido na janela Comando.

Se você emitir MODIFY MENU a partir da janela Comando sem um nome de menu e incluir
NOWAIT, o diálogo Novo menu não será exibido. O diálogo Novo menu permite que você
especifique o tipo de menu (padrão ou tecla de atalho) criado.

SAVE Deixa o Criador de menus aberto depois que uma outra janela é ativada. Se você omitir
SAVE, o Criador de menus será fechado quando uma outra janela for ativada. A inclusão de SAVE
não tem nenhum efeito quando emitido na janela Comando.

Comentários

Para obter maiores informações sobre a criação de menus, consulte “Criando um sistema de
menus”, no capítulo 11, “Criando menus e barras de ferramentas”, no Guia do Desenvolvedor.
MODIFY STRUCTURE, comando

Exibe o Criador de tabelas, permitindo modificar a estrutura de uma tabela.

Sintaxe

MODIFY STRUCTURE

Comentários

Em versões anteriores do FoxPro, MODIFY STRUCTURE abre a caixa de diálogo Estrutura da


tabela.

Caso uma tabela não esteja aberta atualmente na Área de trabalho selecionada, será exibida a caixa
de diálogo Abrir que permite selecionar uma tabela a ser modificada.

As alterações que podem ser feitas na estrutura de uma tabela incluem adicionar e excluir campos;
modificar nomes, tamanhos e tipos de dados de campos; adicionar, excluir ou modificar marcas de
índice e especificar suporte de valor nulo para campos.

Você pode também modificar a estrutura de uma tabela utilizando a interface. Para obter maiores
informações, consulte “Modificando tabelas” no capítulo 2, “Criando tabelas e índices”, no Guia do
Usuário.

Cuidado Se você alterar o tipo de dado de um campo para outro tipo de dado, o conteúdo do
campo poderá não ser transferido corretamente, ou poderá nem mesmo ser transferido. Por
exemplo, se você converter um campo de data para um tipo numérico, o conteúdo do campo não
será transferido.

O Visual FoxPro faz automaticamente uma cópia de backup da tabela atual antes de você alterar a
estrutura da tabela. Depois de concluídas as modificações, os dados contidos na cópia de backup da
tabela são incluídos na estrutura da tabela recém-modificada. Se a tabela tiver um campo Memo,
também será criado um arquivo de backup de memo. O arquivo de backup da tabela tem a extensão
.BAK e o arquivo de backup de memo tem a extensão .TBK.

Se você aceitar as alterações feitas na estrutura e, em seguida, interromper o processo de cópia dos
dados, o novo arquivo não conterá todos os registros da tabela original.
Lembre-se de que o Visual FoxPro cria um arquivo .BAK para o arquivo da tabela original e, se a
tabela tiver um campo memo, uma cópia .TBK do arquivo de memo original. Em caso de
problemas com MODIFY STRUCTURE, exclua o(s) novo(s) arquivo(s) e renomeie o arquivo
.BAK e o arquivo .TBK, se houver algum, com as extensões de arquivo originais (.DBF and .FPT).

Quando você modifica a estrutura de uma tabela que tem um campo memo, o tamanho de bloco do
arquivo de memo é definido como a definição de tamanho de bloco atual. Você pode especificar o
tamanho de bloco do arquivo de memo com SET BLOCKSIZE.

MODIFY WINDOW, comando

Modifica uma janela definida pelo usuário ou a janela principal do Visual FoxPro.

Sintaxe

MODIFY WINDOW NomeJanela | SCREEN


[FROM nLinha1, nColuna1 TO nLinha2, nColuna2
| AT nLinha3, nColuna3 SIZE nLinha4, nColuna4]
[FONT cNomeFonte [, nTamanhoFonte]]
[STYLE cEstiloFonte]
[TITLE cTextoTítulo]
[HALFHEIGHT]
[DOUBLE | PANEL | NONE | SYSTEM]
[CLOSE | NOCLOSE]
[FLOAT | NOFLOAT]
[GROW | NOGROW]
[MINIMIZE | NOMINIMIZE]
[SHADOW | NOSHADOW]
[ZOOM | NOZOOM]
[ICON FILE NomeArquivo1]
[FILL FILE NomeArquivo2]
[COLOR SCHEME nNúmeroEsquema
| COLOR ListaParesCores]

Argumentos

NomeJanela Especifica a janela definida pelo usuário a ser modificada. Primeiro é necessário criar
a janela especificada com DEFINE WINDOW.

SCREEN Especifica a janela principal do Visual FoxPro como a janela a ser modificada. Não
abrevie SCREEN, caso contrário, o Visual FoxPro gerará uma mensagem de erro. Para retornar a
janela principal do Visual FoxPro à sua configuração de inicialização, emita o comando abaixo sem
nenhuma cláusula adicional:
MODIFY WINDOW SCREEN

Dica Utilize MODIFY WINDOW SCREEN NOCLOSE para evitar que você mesmo finalize
acidentalmente o Visual FoxPro antes da hora.

Para obter maiores informações sobre as cláusulas MODIFY WINDOW, consulte DEFINE
WINDOW.

Comentários

MODIFY WINDOW altera os atributos de uma janela existente definida pelo usuário (uma janela
criada com DEFINE WINDOW) ou a janela principal do Visual FoxPro. MODIFY WINDOW não
pode ser utilizado para alterar os atributos de janelas do sistema do Visual FoxPro (como as janelas
Comando e Pesquisar).

Utilize MODIFY WINDOW para alterar a localização, a fonte padrão, o título, a borda, os
controles, o ícone, o papel de parede e a cor de uma janela definida pelo usuário ou da janela
principal do Visual FoxPro. Você pode alterar qualquer um desses atributos ao incluir as cláusulas
opcionais para o comando MODIFY WINDOW. (Observe que se alterar as cores, você deve utilizar
CLEAR para aplicar as alterações.)

Por exemplo, inclua as cláusulas FROM e TO ou AT e SIZE para especificar uma nova localização
ou um novo tamanho para uma janela definida pelo usuário ou para a janela principal do Visual
FoxPro. Para evitar que uma janela definida pelo usuário ou a janela principal do Visual FoxPro
sejam movidas, inclua a palavra-chave NOFLOAT.

MODIFY WINDOW, exemplo do comando

O exemplo a seguir altera o conteúdo da barra de título da janela principal do Visual FoxPro.

MODIFY WINDOW SCREEN TITLE 'Meu aplicativo'


MONTH( ), função

Retorna o número do mês de uma expressão de Data ou de DataHora especificada.

Sintaxe

MONTH(dExpressão | tExpressão)

Tipos de retorno

Numérico

Argumentos

dExpressão Especifica a expressão de Data para a qual você deseja que MONTH( ) retorne o
número do mês.

tExpressão Especifica a expressão de DataHora para a qual você deseja que MONTH( ) retorne o
número do mês.

Comentários

MONTH( ) retorna um número de 1 a 12. Janeiro é o mês 1 e dezembro é o mês 12.

MONTH( ), exemplo da função

CLEAR
? DATE( ) && Exibe a data atual
? MONTH(DATE( )) && Exibe o número do mês
STORE {05/03/95} TO gdBuy
STORE MONTH(gdBuy + 31) TO gdMonth
? gdMonth
MOVE POPUP, comando

Move um menu definido pelo usuário criado com DEFINE POPUP para uma nova localização.

Sintaxe

MOVE POPUP NomeMenu TO nLinha1, nColuna1 | BY nLinha2, nColuna2

Argumentos

NomeMenu Especifica o menu a ser movido.

No Visual FoxPro, não é possível mover o menu do sistema.

TO nLinha1, nColuna1 Move o menu para uma localização especificada por nLinha1, nColuna1
, em uma janela definida pelo usuário ou na janela principal do Visual FoxPro.

BY nLInha2, nColuna2 Move o menu para uma localização relativa à sua posição atual. nLinha2
especifica o número de linhas que o menu deve ser movido (para baixo se nLinha2 for positiva, para
cima se for negativa). A expressão numérica nColuna2 especifica o número de colunas que o menu
deve ser movido (para a direita se nColuna2 for positiva, para a esquerda se for negativa).
Comentários

É possível mover um menu para uma posição específica ou para uma posição relativa à sua posição
atual. Se estiver definido, o menu poderá ser movido; não é necessário que ele esteja ativo ou
visível.

MOVE POPUP, exemplo do comando

· próximo exemplo define e ativa um menu e, em seguida, move e altera seu tamanho.

CLOSE DATABASE
CLEAR
DEFINE POPUP popMovIn FROM 2,2 TO 7, 14 PROMPT FILES LIKE *.PRG ;
TITLE 'Programas'
ACTIVATE POPUP popMovIn NOWAIT
=CHRSAW(2)
MOVE POPUP popMovIn BY 5,5 && Move o menu para baixo
=CHRSAW(2)
SIZE POPUP popMovIn BY 5,5 && Aumenta o menu
=CHRSAW(2)
SIZE POPUP popMovIn BY -5,-5 && Diminui o menu
=CHRSAW(2)
MOVE POPUP popMovIn BY -5,-5 && Move o menu para cima
=CHRSAW(2)
DEACTIVATE POPUP popMovIn

RELEASE POPUP popMovIn

MOVE WINDOW, comando

Move uma janela definida pelo usuário criada com DEFINE WINDOW ou uma janela do sistema
do Visual FoxPro (como a janela Comando ou a janela Pesquisar) para uma nova localização.

Sintaxe

MOVE WINDOW NomeJanela TO nLinha1, nColuna1


| BY nLinha2, nColuna2 | CENTER

Argumentos
NomeJanela Especifica o nome da janela a ser movida.

TO nLinha1, nColuna1 Move a janela para uma localização, especificada por nLinha1, nColuna1,
na janela principal do Visual FoxPro ou em uma janela definida pelo usuário.

BY nLinha2, nColuna2 Move a janela para uma localização relativa à sua posição atual. A
expressão numérica nLinha2 especifica o número de linhas que a janela deve ser movida (para
baixo se nLinha2 for positiva, para cima se for negativa). A expressão numérica coluna nColuna2
especifica o número de colunas que a janela deve ser movida (para a direita se nColuna2 for
positiva, para a esquerda se for negativa).

CENTER Centraliza uma janela na janela principal do Visual FoxPro ou na sua janela pai.

Comentários

É possível mover uma janela para uma posição específica ou para uma posição relativa à sua
posição atual. Se estiver definida, a janela poderá ser movida; não é necessário que ela esteja ativa
ou visível.

Para mover uma janela do sistema ou uma barra de ferramentas (no Visual FoxPro), coloque o
nome da janela ou da barra de ferramentas entre aspas. Por exemplo, para mover a barra de
ferramentas Controles de relatório (quando não está ancorada) no Visual FoxPro, emita o comando
a seguir:

MOVE WINDOW "Controles de relatório" BY 1,1

MOVE WINDOW, exemplo do comando

No exemplo a seguir, após a definição e ativação da janela denominada wEnter, a janela será
movida.

DEFINE WINDOW wEnter FROM 10,4 TO 15,54 SYSTEM ;


TITLE "Nomadic Window"
ACTIVATE WINDOW wEnter
WAIT WINDOW 'Pressione qualquer tecla para mover a janela'
MOVE WINDOW wEnter TO 20,15
WAIT WINDOW 'Pressione qualquer tecla para centralizar a janela'
MOVE WINDOW wEnter CENTER
WAIT WINDOW 'Pressione qualquer tecla para liberar a janela'
RELEASE WINDOW wEnter
MTON( ), função

Retorna um valor Numérico de uma expressão de Moeda.

Sintaxe

MTON(mExpressão)

Tipos de retorno

Numérico

Argumentos

mExpressão Especifica uma expressão de Moeda cujo valor é retornado por MTON( ).
mExpressão deve resultar em um valor Moeda válido; caso contrário, o Visual FoxPro gera um
erro.

Os valores do tipo Moeda são criados colocando-se um cifrão ($) imediatamente antes de um valor
Numérico.

Comentários

MTON( ) retorna um valor Numérico com quatro casas decimais.


MTON( ), exemplo da função

O exemplo abaixo cria uma variável de tipo Moeda denominada gyMoney. TYPE( ) exibe Y,
indicando que a variável é de tipo Moeda. MTON( ) é utilizada para converter a variável a um tipo
Numérico e TYPE( ) agora exibe N, indicando que a variável é de tipo Numérico após a conversão.

STORE $24.95 TO gyMoney && Cria uma variável de memória tipo Moeda
CLEAR
? "gyMoney é do tipo: "
?? TYPE('gyMoney') && Exibe Y, valor de tipo Moeda

gyMoney = MTON(gyMoney) && Converte gyMoney para um valor Numérico


? "gyMoney é agora do tipo: "
?? TYPE('gyMoney') && Exibe N, valor de tipo Numérico
NDX, função ( )

Retorna o nome de um arquivo de índice aberto (.IDX) para a tabela atual ou especificada.

Sintaxe

NDX(nNúmeroÍndice [, nÁreaTrabalho | cAliasTabela])

Tipos de retorno

Caractere

Argumentos

nNúmeroÍndice Especifica qual nome de arquivo .IDX será retornado. USE e SET INDEX
suportam uma lista de arquivos de índice que permite que você abra arquivos .IDX para uma tabela.
A ordem dos nomes de arquivos nessa lista determina o nome do arquivo .IDX retornado por
NDX( ). Por exemplo, se nNúmeroÍndice for igual a 1, NDX( ) retornará o nome do primeiro
arquivo .IDX na lista de arquivos de índice, se nNúmeroÍndice for igual a 2, NDX( ) retornará o
nome do segundo arquivo .IDX, e assim por diante. NDX( ) ignora os nomes dos arquivos de índice
composto (.CDX) na lista de arquivos de índice.

NDX( ) retornará uma seqüência vazia se nNúmeroÍndice for maior do que o número de arquivos
.IDX na lista de arquivos de índice.

nÁreaTrabalho Especifica o número da Área de trabalho para arquivos .IDX abertos em uma Área
de trabalho diferente da atual. NDX( ) retornará uma seqüência vazia se nenhuma tabela estiver
aberta na Área de trabalho especificada. Se você omitir nÁreaTrabalho, NDX( ) retornará os nomes
dos arquivos .IDX abertos com a tabela na Área de trabalho atual.

cAliasTabela Especifica o alias de tabela para os arquivos .IDX abertos em uma Área de trabalho
diferente da atual. Caso nenhuma tabela apresente o alias que você incluiu, o Visual FoxPro exibirá
uma mensagem de erro. Se você omitir cAliasTabela, NDX( ) retornará os nomes dos arquivos
.IDX abertos com a tabela na Área de trabalho atual.

Comentários

As funções CDX( ) e MDX( ) podem ser utilizadas para retornar os nomes dos arquivos de índice
composto abertos (.CDX).

No Visual FoxPro para Windows, quando SET FULLPATH está ativado (ON), NDX( ) retorna o
caminho do arquivo .IDX junto com o nome do arquivo .IDX. Quando SET FULLPATH está
desativado (OFF), NDX( ) retorna a unidade de disco onde o arquivo .IDX reside junto com o nome
de arquivo .IDX.

NORMALIZE( ), função

Converte uma expressão de caracteres, fornecida por um usuário, de uma forma que pode ser
comparada com os valores de retorno de função do Visual FoxPro.

Sintaxe

NORMALIZE(cExpressão)

Tipos de retorno

Caractere

Argumentos

cExpressão Especifica a expressão de caracteres a ser normalizada.

Comentários
NORMALIZE( ) retorna uma seqüência de caracteres a partir da expressão de caracteres
cExpressão com as seguintes alterações::

· A expressão de caracteres é convertida em maiúsculas. Contudo, as seqüências embutidas


não são alteradas. Um exemplo de uma seqüência embutida é "Alô" na expressão de caracteres
"LEFT('Alô',1)".
· As palavras-chave abreviadas do Visual FoxPro na expressão de caracteres são expandidas,
ficando escritas por extenso.
· Os operadores -> separando aliases de nomes de campos são convertidos em pontos.
· A sintaxe de qualquer comando ou função do Visual FoxPro dentro da expressão de
caracteres é verificada, embora a expressão não seja avaliada. Se a sintaxe não estiver correta, o
Visual FoxPro irá gerar um erro de sintaxe. NORMALIZE( ) não verifica a existência de campos,
tabelas, variáveis de memória, funções definidas pelo usuário ou outras referências na expressão de
caracteres.

Por exemplo, um usuário pode digitar no Construtor de expressões uma expressão de índice igual à
seguinte:

UPPE(cust->lname) + UPPE(cust->fname)

Embora seja uma expressão de chave de índice válida do Visual FoxPro, é difícil compará-la com
os valores de retorno de uma função do Visual FoxPro como KEY( ).NORMALIZE( ) retorna a
seguinte seqüência de caracteres para a expressão acima:

UPPER(CUST.LNAME) + UPPER(CUST.FNAME)

Ela pode ser facilmente comparada com o valor retornado por uma função como KEY( ),
permitindo que você, neste exemplo, determine se já existe um índice ou marca de índice com a
expressão de índice fornecida pelo usuário.

NOTE, comando

Indica o início de uma linha de comentário não executável em um arquivo de programa.

Sintaxe

NOTE [Comentários]

Argumentos
Comentário Especifica o comentário.

Comentários

Coloque um ponto-e-vírgula (;) no final de cada linha de comentário que continua na linha seguinte.

NOTE, exemplo do comando

NOTE Inicializa o número de página;


variable.
STORE 1 to gnPageNum
* Inicializa o Loop
DO WHILE gnPageNum <= 25 && loop 25 vezes
gnPageNum = gnPageNum + 1
ENDDO && DO WHILE gnPageNum <= 25

NTOM( ), função

Retorna um valor Moeda com quatro casas decimais a partir de uma expressão numérica.

Sintaxe

NTOM(nExpressão)

Tipos de retorno

Moeda

Argumentos

nExpressão Especifica uma expressão numérica cujo valor Moeda é retornado por NTOM( ). Se
nExpressão tiver mais de quatro casas decimais, ele será arredondado para quatro casas decimais.
Se nExpressão tiver menos de 4 casas decimais, será preenchido com zeros até que sejam criadas
quatro casas decimais.

NTOM( ), exemplo da função

O exemplo que se segue cria uma variável de tipo numérico denominada gnNumeric. TYPE( ) exibe
N, indicando que a variável é um tipo numérico. NTOM( ) é utilizado para converter a variável em
um tipo de moeda e TYPE( ) agora exibe Y, indicando que a variável é um tipo de moeda após a
conversão.
STORE 24.95 TO gnNumeric && Cria uma variável de memória tipo numérica
CLEAR
? "gnNumeric é digitado: "
?? TYPE('gnNumeric') && Exibe N, tipo valor numérico

gnNumeric= NTOM(gnNumeric) && Converte gnNumérico para um valor atual


? "gnNumeric agora é digitado: "
?? TYPE('gnNumeric') && Exibe Y, valor tipo atual

NUMLOCK( ), função

Retorna o modo atual da tecla NUM LOCK ou define o modo da tecla NUM LOCK como ativada
ou desativada.

Sintaxe

NUMLOCK([lExpressão])

Tipos de retorno

Lógico
Argumentos

lExpressão Define a tecla NUM LOCK como ativada ou desativada. Se lExpressão for verdadeiro
(.T.), a tecla NUM LOCK será ativada; se lExpressão for falso (.F.), a tecla NUM LOCK será
desativada. NUMLOCK( ) retornará um valor lógico correspondente à definição da tecla NUM
LOCK antes da emissão de NUMLOCK(.T.) ou NUMLOCK(.F.).

Comentários

NUMLOCK( ) retornará verdadeiro (.T.) se a tecla NUM LOCK estiver ativada (pressionar uma
tecla no teclado numérico retorna um número), ou falso (.F.) se NUM LOCK estiver desativada
(pressionar uma tecla no teclado numérico move o cursor).

No Visual FoxPro for Macintosh, a definição da tecla NUM LOCK pode ser alterada pressionando-
se SHIFT+CLEAR.

NUMLOCK( ), exemplo da função

No exemplo a seguir, o sinal de igual (=) é utilizado para executar NUMLOCK( ) sem retornar um
valor.

gcOldLock = NUMLOCK( ) && Salva configuração original


WAIT WINDOW 'Pressione uma tecla para ativar NumLock'
= NUMLOCK(.T.) && Ativa NumLock
WAIT WINDOW 'Pressione uma tecla para desativar NumLock'
= NUMLOCK(!NUMLOCK( )) && Alterna NumLock para valor oposto
WAIT WINDOW 'Pressione uma tecla para recuperar a definição original de NumLock'
= NUMLOCK(gcOldLock) && Retorna à definição original

NVL( ), função
Retorna um valor não-nulo a partir de duas expressões.

Sintaxe

NVL(eExpressão1, eExpressão2)

Tipos de retorno

Caractere, Data, DataHora, Numérico, Moeda, Lógico ou valor nulo

Argumentos

eExpressão1, eExpressão2 NVL( ) retornará eExpressão2 se eExpressão1 resultar em um valor


nulo. NVL( ) retornará eExpressão1se eExpressão1 não for um valor nulo. eExpressão1 e
eExpressão2 podem ser formados por qualquer tipo de dados. NVL( ) retornará .NULL. se tanto
eExpressão