Você está na página 1de 47

12/01/2021 VFP Brasil: Dicas e Truques VFP

Apostila Mais
Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Forum Bloger

VFP Brasil
Fox Pro

domingo, 1 de maio de 2016

Dicas e Truques VFP Aula 1

Aula
Whatsapp

M E N U vfp

Apostila Programacao
Blog Videos No Yotube
Inicio
01-a FLOCK bloquear registro para gravar o registro em Rede
Links Uteis

* Programas com Fonte


Videos Programacao V
vobina=.t.
Skype de Contato
Do while vobina

if flock()

update tabela set campos where condicao

unlock all

wobina=.f.
Visitas

exit contado
Camis

endif
Seguidores
Enddo Seguidores (9)

Seguir

Video vfp 10 64 bits instalacao


link da instalcao Quem sou eu

Alceu11 Visual Fox


vfp 9 portable Pro
Visualizar meu perfil
completo

01-)Abrir 1 arquivo do MS Word VFP


Declare INTEGER ShellExecute IN SHELL32.DLL INTEGER, String CDIR, String CFILE, ;
STRING , STRING, INTEGER
cArqDoc=getfile('DOC','Selecione o arquivo','Selecione' , 1,'Escolha 1 Arq DOC')
If File(cArqDoc) && *p/ imprimr arq. "print" no lugar do open,p/imprimir direto
ShellExecute(0, "Open", cArqDoc,"", Fullpath(""),0)
Else
Wait Window ' O arquivo nao esta na pasta!! ' Timeout 2
EndifLink para gerar um arquivo MsWord no Vfp
Link baixar os fontes
**Mais uma forma de abrir Doc do Ms-word
loShell = CREATEOBJECT("Shell.Application")
arqui=getfile('doc','Escolha o arquivo','Selecione' , 1,'Escolha 1 Arq doc')
loShell.ShellExecute(arqui)
RELEASE loShell

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 1/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

01-a) Impressora padrao


Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
cPrinter = SET('PRINTER', 2) Forum Bloger
? cprinter
1-b** chamar uma class dentro de um form
PUBLIC oForm1 as Form
oForm1 = NEWOBJECT("editor","comandos.vcx")
oForm1.Show()
** debug comando= set step on **seek //set near on antes

1-A) pegar o maior codigo em uma tabela


SELECT MAX(cl_codigo) as num FROM clientes INTO CURSOR Sei READWRITE
select Sei
if _tally>0
wnum=sei num+1
else
wnum=1
endif

1-C--Backup necessario ter na pasta o 7z.exe e a 7-zip.dll


local warq
warq='bkpdbf'+LEFT(DTOC(DATE()),2)+LTRIM(STR(YEAR(DATE())))+'.zip'
close tables all

CD e:\ct
CD GETDIR()
IF FILE('7z.exe')
* RUN /n 7z a -t7z back.7z ..\backup
RUN /n 7z a -r &warq *.scx *.sct *.cdx *.pj* *.vc* *.prg *.MNT *.MPX *.dbf *.png *.bmp
CLOSE TABLES all
** COPY FILE &warq TO \ct\backup\&warq

WAIT WINDOW 'Fiz a copia 7z.exe ' TIMEOUT 2


else
WAIT WINDOW 'Nao achei compactador 7z.exe ' TIMEOUT 1
ENDIF

no report
TRANSFORM(Tabela.oCampo,"9.999.99 " )

1-D PEGAR O MAX VALOR EM UM CAMPO DE UM TABELA


*Crie um metodo com o nome prox_cod e coloque:
SELECT MAX(NR) FROM CLIENTE INTO ARRAY M_Temp
lcRetVal = IIF(!ISNULL(M_Temp(1)), M_Temp(1)+1, "1")
*THISFORM.txtCampo.VALUE = lcRetVal
OU
TEMPO='B'+SYS(2015)
SELECT MAX(PE_NUMERO) as numero2 FROM PEDIDOS INTO CURSOR TEMPO
IF _TALLY>0
WVRNR=TEMPO.NUMERO2
ENDIF

1- E- Comando Getdir() abrir 1 Dbf


Set safety off
gcTable = GETFILE('DBF')
DO CASE
CASE EMPTY(gcTable)
RETURN
CASE LASTKEY()=27
QUIT
OTHERWISE
SELE 0
USE &gcTable ALIAS TABLA
SELECT tabla
DEFINE WINDOW wBrowse FROM 02,10 TO 48,100 CLOSE GROW COLOR SCHEME 20
BROWSE WINDOW WBrowse
USE

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 2/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
RELEASE WINDOW wBrowse
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
ENDCASE
Forum Bloger

1-D Verificar se existe um determinado arquivo . dbf ou txt


SET SAFETY OFF
CREATE CURSOR lixos (tabela c(50))
LOCAL lnTab, lnCntA
LOCAL ARRAY laTab(1)
lnTab = ADIR(laTab, 'c:\motos\*.txt')
FOR lnCntA = 1 TO lnTab
*MESSAGEBOX(laTab(lnCntA,1),48,'tabela', 500)
INSERT INTO lixos( tabela) values(laTab(lnCntA,1))
ENDFOR
SELECT lixos
IF RECCOUNT()>0
WAIT WINDOW 'Sim tem arquivo' TIMEOUT 1
endif
browse

1-E) Formatar a coluna da grid tamanho


x=Thisform.txtEditar.Value
y=Thisform.txtEditar.Value
select codforn1,codforn2,codforn3,codforn4,codforn5,;
requisicao,item,qtde,unidade,descricao,data,ano ;
from requisicao into cursor Pesquisa READWRITE ;
where BETWEEN(requisicao,x,y) order by item
Thisform.grid1.recordSource = 'pesquisa'
Thisform.grid1.column1.ControlSource="pesquisa.item"
Thisform.grid1.column2.controlsource="pesquisa.unidade"
Thisform.grid1.column3.controlsource="pesquisa.qtde"
Thisform.grid1.column4.controlsource="pesquisa.descricao"
Thisform.grid1.column1.header1.Caption="Item"
Thisform.grid1.column2.header1.caption="Und"
Thisform.grid1.column3.header1.caption="Quant."
Thisform.grid1.column4.header1.caption="Descrição"
Thisform.grid1.column1.Width=40
Thisform.grid1.column2.width=46
Thisform.grid1.column3.width=106
Thisform.grid1.column4.width=451
Thisform.grid1.refresh()
Thisform.grid1.ReadOnly=.F.

1-F) Gerar um documento novo no Ms Word em VFP


oWord = CreateObject("Word.Application")
oDocument = oWord.Documents.Add() && Use the Normal template
oRange = oDocument.Range()
**chr(13)+chr(10) enter para pular um linha
oRange.InsertAfter('A Primeira linha em Negrito'+CHR(13)+CHR(10))
oRange.Font.Bold = .t.
oRange.Collapse( 0 )
oRange.End = oRange.End + 1 && to allow assignment to font
oRange.InsertAfter(' Segundo Normal'+CHR(13)+CHR(10))
oRange.Font.Bold = .F.
oRange.Collapse( 0 )
oRange.End = oRange.End + 1 && to allow assignment to font
oRange.InsertAfter('Ola mundo negrito e terceirta itálico'+CHR(13)+CHR(10))
oRange.words[1].Font.Bold = .T.
oRange.words[3].Font.italic = .T.
oRange.Collapse( 0 )
oRange.End = oRange.End + 1 && to allow assignment to font
oDocument.SaveAs('c:\teste.doc')
oword.visible=.t.

Abrir um documento ja existente do Ms.Word e inserir uma Palavra "Ola mundo"


SeuArquivoDoc="c:\pedro\doc1.doc"
DECLARE INTEGER SetForegroundWindow IN user32.dll INTEGER
oWord = createobject("Word.Application")

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 3/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
oWord.Visible = .T.
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
oWord = GetObject(,"word.basic")
Forum Bloger
oWord.FileOpen(SeuArquivoDoc)
oWord.AppMaximize()
oWord.AppShow()
oWord.Insert("Olá mundo")
*
1-G COMO FAZER O MAPA ENTRE DOIS CEPS PELO GOOGLE
DECLARE INTEGER SetForegroundWindow IN user32.dll INTEGER
origem="02727-000"
destino="02728-090"
oIE = CREATEOBJECT("Internetexplorer.application")
oIE.navigate("http://maps.google.com.br/maps?hl=pt-BR&cp=29&gs_id=5&xhr=t&q=from:+"+origem+"+to:+"+de
oIE.Visible = .T.
=SetForegroundWindow(oIE.HWND)

1-h ) LISTAR ARQUIVOS DE 1 PASTA


LOCAL m.diretorios AS STRING
*!* Lê os arquivos contidos na unidade C:\
m.diretorios = filesinfolder("C:\")
SELECT(m.diretorios)
GO TOP
BROWSE
USE IN SELECT(m.diretorios)
RETURN

1-I) o comando iif

condicao IIf
Mvar=MONTH(DATE())
Mvar=iif(Mvar=1,'Janeiro',Iif(Mvar=2,'Fevereiro',IIF(Mvar=3,'Marco', Iif(Mvar=4,'Abril',IIF(Mvar=5,'M
WAIT WINDOW Mvar TIMEOUT 2
***

FUNCTION filesinfolder AS COLLECTION


* It returns all files, contained in a paste.
LPARAMETERS cpath AS STRING
LOCAL pathdefault AS STRING
LOCAL totalfiles AS INTEGER
LOCAL counter AS INTEGER
LOCAL nomecursor AS STRING
m.cpath = IIF(EMPTY(m.cpath), "", ADDBS(m.cpath))
m.pathdefault = SYS(5)+CURDIR()
m.totalfiles = 0
m.nomecursor = SYS(2015) && Nome do cursor que armazenará os arquivos
CREATE CURSOR (m.nomecursor) (filename c(254), filesize i(4), dateltmodified d(8), timeltmodified c(
IF DIRECTORY(m.cpath) THEN
CHDIR (m.cpath)
m.totalfiles = ADIR(myfiles, "*.*","D")
FOR m.counter = 1 TO m.totalfiles
INSERT INTO (m.nomecursor) VALUES ;
(myfiles[m.counter, 1], myfiles[m.counter, 2], myfiles[m.counter, 3], ;
myfiles[m.counter, 4], STRTRAN(myfiles[m.counter, 5], ".", ""))
ENDFOR
SET DEFAULT TO (m.pathdefault)
ENDIF
RETURN m.nomecursor
ENDFUNC
*FIM*
LOCALIZAR UNIDADE DE REDE
IF DISKSPACE("V:") = -1
MESSAGEBOX("Unidade de rede ou Drive Não Localizado...",48,"Aviso ",2800)
RETURN .F.
ENDIF

Se Existe o diretorio
IF directory("H:\teste")

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 4/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
WAIT WINDOW 'existe' timeout 2
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
ELSE && se nao existir
Forum Bloger
WAIT WINDOW ' nao existe a unidade, ou nao foi mapeada' timeout 4
endif
1-g- Gerar uma planilha em vfp
CLOSE DATABASES
IF !FILE('CLIENTE.DBF')
CREATE TABLE CLIENTE (NUMERO N(4,0),NOME_CLI C(30), ENDERECO C(40), BAIRRO C(20), CIDADE C(30), UF C(
SELECT CLIENTE
INDEX on nome_cli TAG clienteset orde to cliente
FOR I=1 TO 20
INSERT INTO CLIENTE (NUMERO,noME_CLI,ENDERECO) VALUES (I,"CLIENTE "+STR(I), 'RUA ')
ENDFOR
ENDIF
IF !USED("CLIENTE")
USE CLIENTE IN 0 ALIAS CLIENTE SHARED
ENDIF
SELECT CLIENTE
xFinal = RECCOUNT("cliente")
xInicio = 1
WAIT windows "Aguarde, abrindo o excel e montando a Planilia..." NOWAIT NOCLEAR
Oexcel=createobject("Excel.application")
Oexcel.workbooks.add
Oexcel.visible=.t.
x = 1
SELECT cliente
GO TOP
DO WHILE x <= xFinal
IF X = 1
Oexcel.cells(x,1).font.size=10
Oexcel.cells(x,1).font.color=rgb(180,0,0)
Oexcel.cells(x,1).font.bold=.t.
OExcel.Range("B1").Value = 500
Oexcel.cells(x,1).value='Tabela de precos' &&xPedidos
ELSE
Oexcel.cells(x,1).font.size=12
Oexcel.cells(x,1).font.color=rgb(0,0,255)
Oexcel.cells(x,1).font.bold=.f.
Oexcel.cells(x,1).value=cliente.NUMERO
Oexcel.cells(x,2).font.size=12
Oexcel.cells(x,2).font.color=rgb(0,0,255)
Oexcel.cells(x,2).font.bold=.f.
Oexcel.cells(x,2).value=cliente.noME_CLI
Oexcel.cells(x,3).font.size=12
Oexcel.cells(x,3).font.color=rgb(0,0,255)
Oexcel.cells(x,3).font.bold=.f.
Oexcel.cells(x,3).value=cliente.endERECO
ENDIF
SELECT cliente
SKIP
x=x+1
ENDDO
WAIT CLEAR
*****
condicao IIf
Mvar=MONTH(DATE())
Mvar=iif(Mvar=1,'Janeiro',Iif(Mvar=2,'Fevereiro',IIF(Mvar=3,'Marco', Iif(Mvar=4,'Abril',IIF(Mvar=5,'M
WAIT WINDOW Mvar TIMEOUT 2
***

1-j -Conexao mysql con VFP

Conexao Mysql Vfp codigo o seguinte


Private StrConexao,privConexao
privStrConexao="DRIVER={MySQL ODBC 3.51 Driver};
SERVER='http://www.motote.host.sk';
DATABASE='odonto';
USER='galeu';
PASSWORD='45623';
OPTION=3;
";

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 5/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
privConexao = Sqlstringconnect(privStrConexao)
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
If privConexao > 0
Forum Bloger
Wait Window 'conectei' Timeout 1
SQLExec(privConexao,'Select * from pacientes ' ,'cur_cat' )
Select cur_cat
Browse Normal
If 6=Messagebox('deseja descontecta',4+32,'perguta')
= SQLDisconnect(privConexao)
Endif
Else
Messagebox( 'Nao foi possivel conectar-se ao Banco de Dados [ondonto], fale com TI !',48,'Atenca
Endif
Return .T.
*Obs nao esqueca de instalar o driver odbc Mysql 3.51
* NO BLOG TEM COMO BAIXAR O odbc 3,51

1-L impressaora virual dopdf

Depois apos ter instalado a Impressora


Codigo
IF NOT FILE('BAIRRO.DBF')
CREATE TABLE BAIRRO (CODBAIRRO C(3),NOMBAIRRO C(20))
SELECT BAIRRO
INSERT INTO BAIRRO VALUES('001','VL.CAROLINA')
INSERT INTO BAIRRO VALUES('002','VL.CARMONA')
ENDIF
if not USED('BAIRRO')
USE BAIRRO
endif
Select BAIRRO
if not file('bairros.frx')
Create Report Bairros From BAIRRO && BAIRRO e o DBF
endif
SET PRINTER TO NAME GETPRINTER() &&"novaPDF"
SET PRINTER TO NAME "novaPDF"
REPORT FORM BAIRROS TO PRINTER PROMPT NOCONSOLE
***fim do gerar pdf

01-H) Abrir calculadora do windows com valores.


Local lnHWND, loWSH
* Declaramos funcoes do API de Windows
DECLARE LONG FindWindow IN WIN32API AS FindWindow STRING @a, STRING @b
DECLARE LONG SetForegroundWindow IN WIN32API LONG
* Buscamos una instancia da aplicación para obtener seu Handler
lnHWND = FindWindow(0, "Calculator")
If lnHWND = 0
* Si no se está ejecutando, la ejecutamos
Run /N Calc.EXE
* Y obtenemos su Handler
lnHWND = FindWindow(0, "Calculator")
Endif
* Instanciamos el Windows Scripting Host
loWSH = CreateObject("WScript.Shell")
* Enviamos la aplicación a primer plano
SetForegroundWindow(lnHWND)
INKEY(0.2)
* Por último enviamos a sequencia de teclas
loWSH.SendKeys("140{+}200")
loWSH.SendKeys("{enter}")
**
FUNCTION ESTALIVRE(cArquivo)
* Retorna se o arquivo está em uso ou não
* USO: ESTALIVRE('c:\nomedoarquivo.dbf')
* RETORNA: .T. ou .F.
LPARAMETERS m.tabela

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 6/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
lnarquivo = FOPEN(m.tabela,1)
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
IF lnarquivo > 0
Forum Bloger
FCLOSE(lnArquivo)
ELSE
RETURN .F.
ENDIF
ENDFUNC
*
SELECT vendedor
SET ORDER TO COD_VEND && COD_VEND
SET MULTILOCKS ON
IF NOT EMPTY(ALIAS())
CURSORSETPROP("buffering",3)
ENDIF
IF reccount() > 0
GO bottom
wnr=INT(VAL(vendedor_.Cod_vend)+1 )
WnR=str(WnR,6)
WnR=STRTRAN(WNR,' ', '0')
ELSE
wnr='000001'
ENDIF
***
**gravar campo memo
lckeyWorkorderDetail = vWorkorderDetail.keyWorkorderDetail
SELECT * ;
FROM vWorkorderDetail ;
WHERE keyWorkorderDetail = lckeyWorkorderDetail ;
INTO CURSOR cWorkorderDetail READWRITE

SELECT cWorkorderDetail
SCATTER MEMO MEMVAR
m.CatOrder = ALLTRIM(ThisForm.txtCatOrder.Value)
SELECT vWorkorderDetail
GATHER MEMO MEMVAR

llTestValue=TABLEUPDATE(.T.)
****
Grid a linha ficar inteira selecionada ao inves de apenas a celula.
Propriedade da GRID HighLightStyle 2

Calculo de horas com datetime()


wdata=DATETIME()-180
WAIT WINDOW wdata TIMEOUT 1
wdata1=DATETIME()
? Dif_HDMS(Datetime(), Dtot(Date()-22))
wre= Dif_HDMS(Datetime(), Dtot(Date()-22))
WAIT WINDOW wre TIMEOUT 1
wfala=dif_hdms(wdata,wdata1)
MESSAGEBOX( wfala,0+0,'aviso') &&,2500)
***
Function Dif_HDMS (tDateTime1, tDateTime2)
Local cRet, nS
cRet = ""
If! Vartype(tDateTime1)= "T" Or !Vartype(tDateTime2)= "T"
cRet = "E"
Endif
If Empty(cRet)
If tDateTime2 > tDateTime1
nS = tDateTime2 - tDateTime1
Else
nS = tDateTime1 - tDateTime2
Endif
nS = Int(nS)
cTime = Transform(Int(nS/86400),"9999")+" dias :"+ ;
Transform(MOD(Int(nS/3600),24),"9999")+" horas :"+ ;
Transform(Mod(Int(nS/60),60),"99")+" min :"+ ;
Transform(Mod(nS,60)," 99")+" seg "
Return cTime
Else
=Messagebox("Valores tem que ser Date e time")
Return ""
Endif

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 7/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Endfunc
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
*Fim de calculo de horas
Forum Bloger

**
Dica ,Tirando os pontos e o traco
WCPF='012.052.418-29'
WCPF=CHRTRAN(WCPF,".", "")
WCPF=CHRTRAN(WCPF,"-", "")
MESSAGEBOX(WCPF)
****pegar dados do xml
CLOSE DATABASES ALL
SET SAFETY off
IF !file('c:\PEDRO\nota.xml')
WAIT WINDOW 'nao encontrei o xml' TIMEOUT 2
RETURN .F.
ENDIF
IF file ('c:\PEDRO\nota.xml')
cfile=FILETOSTR('c:\PEDRO\nota.xml')
cTag=STREXTRACT(cFile,'','',1)
MESSAGEBOX(CTAG,48,'Atencao',1000)
**Pegar so o nome do emitente dentro da arquivo nfe
cTag1=STREXTRACT(cFile,'','',1)
MESSAGEBOX('Emitente '+ CTAG1,48,'Aviso o Emitente',1000)
***aqui vou pegar o endereco do emitente
cTag2=STREXTRACT(cFile,'','',1)
cTag3=STREXTRACT(cFile,'','',1)
endif

***Pegar somente o item 1 do xml


IF STREXTRACT(cfile,'',1)="1"
vrprodutos1=STREXTRACT(cfile,'')
WRE= STREXTRACT(cfile,'',1)
MESSAGEBOX(vrprodutos1+chr(13)+' do item 1',48,'atencao item 1',1500)
ELSE
MESSAGEBOX("1 IF Não tinha itens",48,'atencoa',1000)
ENDIF
***vou comecar pelo item 1 e vou ate o iten 50
n=1
FOR I =1 TO 50
IF STREXTRACT(cfile,'',n)=ALLTRIM(STR(n))
wre=STREXTRACT(cfile,'',n)
* WAIT WINDOW 'item nr '+WRE TIMEOUT 1
vrprodutos2=STREXTRACT(cfile,'',n)
MESSAGEBOX(vrprodutos2,48+0,'Atencao'+wre,900)
n=n+1
ELSE
**se nao encontro n=50 para fechar o loop do for next
n=50
WAIT WINDOW 'Fim dos 50 itens nfe' TIMEOUT 1
EXIT
ENDIF
ENDFOR
*aqui vou inserir as tag que busquei e gravei em uma tabela
CREATE TABLE TAGO( N_CAMPO C(10),CAMPO C(60))
SELECT TAGO
INSERT INTO tago (N_CAMPO,CAMPO) VALUES ('CNPJ',ctag)
INSERT INTO tago (N_CAMPO,CAMPO) VALUES ('nome',ctag1)
INSERT INTO tago (N_CAMPO,CAMPO) VALUES ('lgr',ctag2)
INSERT INTO tago (N_CAMPO,CAMPO) VALUES ('UF',ctag3)
n = 1
FOR n = 1 TO 50
IF STREXTRACT(cfile,'',n)=ALLTRIM(STR(n))
wre=STREXTRACT(cfile,'',n)
VCFOP = STREXTRACT(CFILE,'','',n)
XVCFOP = LEFT(ALLTRIM(VCFOP),2)
VICMSST = IIF(XVCFOP="51","",STREXTRACT(CFILE,'','',n))
INSERT INTO tago (N_CAMPO,CAMPO) VALUES ('iten '+wre, "CFOP="+VCFOP+" SUBTRIB = "+VICMSST )

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 8/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
ELSE
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
**se nao encontro n=50 para fechar o loop do for next
Forum Bloger
n=50
WAIT WINDOW 'Fim dos 50 itens nfe' TIMEOUT 0.5
EXIT
ENDIF
ENDFOR
BROWSE LAST normal
SELECT tago
COPY TO arq45.txt sdf
MODIFY COMMAND arq45.txt

IF SEEK(SUA VARIAVEL) && RERTONAR .T. SE ENCONTRAR


SEEK SUAVARIAVEL
IF FOUND() && SE ENCONTROU
COMANDOS....
ENDIF

Dicas para colocar mascara de digitacao nos textboxPara valores numericoss


Ex Valor
Inputmask 9,999,999.99
Value = 0
**
Para Caracter
Ex Telefone
Inputmask = ( ) -
**
Para Date e Datetime
format=RK
INPUTMASK=:
value = {}
**
Para Letras Maiusculas
Fomat = !

***Config.fpw

TITLE = Sistema EPR Magic


PATH = Graficos;Dados;Menus;Forms;Libs;Prgs;Relats
Default= EPR
CODEPAGE=AUTO
COLLATE=GENERAL
RESOURCE=OFF
TALK=OFF
Deleted =ON
POINT=","
SEPARATOR="."
TMPFILES=C:\WINDOWS\TEMP
SYSFORMATS = OFF
CENTURY = ON
SYSMENU = OFF
safey=off
Confirm=OFF
DATE = DMY
DELETED=ON

RESOURCE = C:\WINDOWS\TEMP\alteracoes_do_projeto.dbf

**Main.prg***
Close all
Close databases all

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 9/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Close tables all
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Set Deleted On
Forum Bloger
Set Lock Off
Set Multilocks On
Set Ansi Off
Set Talk Off
Set Safety Off
Set Confirm Off
Set Notify Off
Set Console Off
Set Bell Off
Set Exclusive Off
Set Hours To 24
SET PATH TO Dados
SET DATE TO DMY
Set Date To British
SET CENTURY ON
SET DELETED ON
SET CURRENCY TO 'R$ '
SET POINT TO '.'
SET SEPARATOR TO ','
Set Reprocess To 2 Seconds
SET REPROCESS TO AUTOMATIC
SET REFRESH TO 5
SET EXCLUSIVE OFF
Set Sysmenu To
Set Sysmenu off
Set message on
Set statu bar on
SET CLOCK STATUS
SET DEFAULT TO (ADDBS(JUSTPATH(SYS(16,0))))
SET PATH TO data;forms;progs;reports
_SCREEN .windowstate=2
_SCREEN .CLOSABLE=.T.
_SCREEN.caption='Sitema Versao 25.07 Hoje '+DTOC(DATE())
_screen.Visible = .T.
_screen.icon = 'BRAZIL.ICO'
_screen.FORECOLOR=rgb( 0,0,255)
_screen.backcolor = RGB(255,255,255)
do form main.scx
read events

02-)Codigo para abrir arquivo PDF no VFP


LOCAL loShell as Shell.Application
loShell = CREATEOBJECT("Shell.Application")
arqui=getfile('pdf','Escolha o arquivo','Selecione' , 1,'Escolha 1 Arq Pdf')
**se for xls //arqui=getfile('Xls','Escolha o arquivo','Selecione' , 1,'Escolha 1 Xls')
loShell.ShellExecute(arqui)
RELEASE loShell
*
*Abrir o Internet Explorer com Google em uma pesquisa
DECLARE INTEGER SetForegroundWindow IN user32.dll INTEGER
oIE = CREATEOBJECT("internetexplorer.application")
oIE.navigate("http://www.google.com/search?q="+"erro script IE"+"")
oIE.Visible = .T.
=SetForegroundWindow(oIE.HWND)
**
*Como saber o codigo AscII
=Tecla()
Function Tecla
janela( 01,01,24,79,'Esc->Sair Tecla precione 1 tecla p/ saber o codigo Asc')
do while lastkey () != 27
clear
@ 10, 10 say 'Tecle Algo..:'
inkey (0)
@ 10, 30 say lastkey ()
inkey (0)
if lastkey () = 27
RELEASE WINDOWS xy
WAIT WINDOW 'saindo ' TIMEOUT 1
RETURN
endif

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 10/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
loop
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
enddo
Forum Bloger
RETURN
ENDFUNC
FUNCTION janela(LI, CI, LF, CF,CTITLE)
if type('cTitle') != 'C'
cTitle = " "
ENDIF
DEFINE WINDOW XY in desktop AT LI,CI SIZE LF,CF title cTitle ;
Font "MS Sans Serif", 8 STYLE "B" float close SYSTEM color rgb(,,,2402,240,240)
MOVE WINDOW xy center
ACTIVATE WINDOW XY
endfunc

2-browses 2 tabela simultaneas

*Dois (2) BROWSES set relation


CLOSE DATABASES all
SET SAFETY off
CREATE TABLE pedido(codigo c(4),data d(8),codcli c(4),valor n(8,2))
INSERT INTO pedido VALUES ('0001',DATE(),'0001',100)
INSERT INTO pedido VALUES ('0002',DATE()+10,'0002',100)
INSERT INTO pedido VALUES ('0003',DATE(),'0001',100)
INDEX ON CODIGO TAG CODIGO
CREATE TABLE MovPed(codped c(4),codprod c(4),quant n(4), valvend n(8,2))
INSERT INTO movped values('0001','0001',6,60)
INSERT INTO movped values('0001','0002',2,40)
INSERT INTO movped values('0002','0001',5,50)
INSERT INTO movped values('0002','0002',6,60)
INSERT INTO movped values('0002','0003',2,40)
INSERT INTO movped values('0003','0001',6,60)
INSERT INTO movped values('0003','0002',2,40)
INDEX ON CODPED TAG CODPED
CREATE table produto(codigo c(4),descricao c(30),valor n(8,2))
INSERT INTO produto values('0001','CIMENTO TIPO 1 ',10)
INSERT INTO produto values('0002','AREIA TIPO 2 ',10)
INSERT INTO produto values('0003','PEDRA TIPO 2 ',10)
DEFINE WINDOW pedidos FROM 0,0 TO 18,125 TITLE 'pedidos' FLOAT close
DEFINE WINDOW movimento FROM 20,0 TO 40,125 TITLE 'movimento' FLOAT close
CLOSE DATABASES ALL
SELECT 0
USE movped
SET ORDER TO codped
SELECT 0
USE pedido
SET ORDER TO codigo
SET RELATION TO codigo INTO movped additive
SELECT movped
ACTIVATE WINDOW movimento
BROWSE NOWAIT IN WINDOW movimento
SELECT pedido
ACTIVATE WINDOW pedidos
BROWSE IN WINDOW pedidos
CLOSE ALL
**
*Scather (ler) e Gather (gravar)
CLOSE DATABASES ALL
SET SAFETY OFF
CREATE TABLE CATALOGO (CODIGO N(4),NOMES C(30))
CREATE TABLE CATA9 (CODIGO N(4),NOMES C(30))
FOR I=1 TO 20
INSERT INTO CATA9 (CODIGO,noMES) VALUES (I,"CLIENTE "+STR(I))
ENDFOR
Close DATABASES
USE CATA9 IN 1
use CATALOGO IN 2
Select 1
Go Top
Do While !eof()
Scatter memvar
Select 2
Append Blank

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 11/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Gather memvar
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Select 1
Forum Bloger
Skip
Enddo
SELECT 2
BROWSE LAST
***

*Gerar um txt
CLOSE DATABASES
CREATE table TABELA ( MeuMemo M )
IF FILE('OTESTO.TXT')
DELETE FILE OTESTO.TXT
ENDIF && Gerando arquivo txt
SET TEXTMERGE OFF
TEXT TO cMemo TEXTMERGE NOSHOW
linha 1 CARTAO VISAO 34,50
linha 2 CHEQUE NR.178 73,40
linha 3 DINHEIRO 22,10
linha 4 DINHEIRO 10,11
linha 5 CARTAO VISA 6,50
linha 6 CH BRADESCO 11,10
linha 7 CH ITAU 9,50
linha 8 CH BOSTON 12,22
linha 9 CH.ITAU 11,10
linha 10 CH BRADESCO 22,10
ENDTEXT
MESSAGEBOX( textmerge(cMemo),48,'texto gerado',2000)
INSERT INTO TABELA (MeuMemo) VALUES (cMemo) && browse
*GERO O UM TESTO DO CAMPO MEMO "MEUMEMO" LINHA A LINHA
**NOME DO ARQUIVO GERADO OTESTO.TXT
CREATE CURSOR JULIO (CONTEM C(90),LINHA N (4))
SET MEMOWIDTH TO 126
n=1
VTOTALLINHAS = MEMLINES(TABELA.MEUmemo)
FOR SEQUENCIADOR = 1 TO VTOTALLINHAS
VLINHA = MLINE(TABELA.MEUmemo,SEQUENCIADOR)
INSERT INTO julio (contem,linha) VALUES (vlinha,n)
StrTOfile(TRANSFORM(VLINHA)+CHR(13)+CHR(10),"OTESTO.TXT",.T.)
n=n+1
ENDFOR
* MODIFY COMMAND OTESTO.TXT
DELETE FILE OTESTO.TXT
****
Select JULIO
WVARIAVEL=""
GO 1
WVARIAVEL=ALLTRIM(JULIO.CONTEM)+' '
GO 4
WVARIAVEL=WVARIAVEL+ALLTRIM(JULIO.CONTEM)+' '
GO 7
WVARIAVEL=WVARIAVEL+ALLTRIM(JULIO.CONTEM)+' '
GO 10
WVARIAVEL=WVARIAVEL+ALLTRIM(JULIO.CONTEM)+' '
Select JULIO
WVARIA=""
GO 2
WVARIA=ALLTRIM(JULIO.CONTEM)+' '
GO 5
WVARIA=WVARIA+ALLTRIM(JULIO.CONTEM)+' '
GO 8
WVARIA=WVARIA+ALLTRIM(JULIO.CONTEM)+' '
WAIT WINDOW ' gerando o relatorio' NOWAIT NOCLEAR
Create TABLE Tabla1 (Txt C(78))
Insert Into Tabla1 Values ("Relatorio do Julio colunar "+DTOC(DATE()))
Insert Into Tabla1 Values ("=============================== ")
Insert Into Tabla1 Values (WVARIAVEL)
Insert Into Tabla1 Values (wVARIA)
Insert Into Tabla1 Values ("=============================== ")
Insert Into Tabla1 Values ("EU JULIO fiz este Report sem abrir o VFP, ")

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 12/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Insert Into Tabla1 Values ("Sao Paulo, 26/1/2011 ")
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Insert Into Tabla1 Values (" ")
Forum Bloger
Insert Into Tabla1 Values ("====================== ")
SELECT tabla1
WAIT CLEAR
Create Report Reporte1 From Tabla1
USE reporte1.frx IN 0
SELECT reporte1
REPLACE fontface with "Courier New", fontsize WITH 14, STYLE WITH "B", fontstyle WITH 1 FOR objtype =
USE IN reporte1
SELECT Tabla1
Report Form Reporte1 Preview Nowait
CLOSE DATABASES all

*Encripitar uma Data *


CLOSE DATABASES all
Local dExemplo1 As Date
CREATE cursor adatas (datas1 d(8) ,segu c(22))
INSERT INTO adatas(datas1) VALUES (DATE())
dExemplo1 = adatas.datas1 &&{^2011-07-06}
Messagebox(dExemplo1 ,48+0+0,"A variavel data é",2000)
Messagebox(criptDate(dExemplo1),48,"criptou",3129 )
mdata=criptDate(dExemplo1)
replace adatas.segu WITH mdata
BROWSE LAST normal
Messagebox(decriptDate(adatas.segu),68,'Descriptou Campo',2000)
Messagebox(decriptDate(criptDate(dExemplo1)),68,'descriptou',2000)
Function criptDate(dData As Date) As String
Local strRetorno As String,dDataBase As Date,iDias As Number,strDias As String
dDataBase = {^1900-01-01} && data inicial basica
iDias = dData - dDataBase && Valor inteiro que corresponde a data
* Aqui fasso uma criptografia simpres como exemplo
Do Case
Case iDias >50000
strRetorno = "A"
Case iDias >40000
strRetorno = "B"
Case iDias >30000
strRetorno = "C"
Case iDias >20000
strRetorno = "D"
Case iDias >10000
strRetorno = "E"
Otherwise
strRetorno = "F"
Endcase
strDias = Padl(iDias ,5,[0])
strRetorno = strRetorno + Chr(Val(Substr(strDias ,2,2))+50)
strRetorno = strRetorno + Chr(Val(Substr(strDias ,4,2))+50)
*** Fim - Aqui fasso uma criptografia simpres como exemplo
Return strRetorno
Endfunc
Function decriptDate(strCript As String) As Date
Local dRetorno As Date,dDataBase As Date,iDias As Number,strDias As String
dDataBase = {^1900-01-01} && data inicial basica
*** Aqui descfasso uma criptografia simpres como exemplo
Do Case
Case Substr(strCript,1,1) == "A"
strDias = "5"
Case Substr(strCript,1,1) == "B"
strDias = "4"
Case Substr(strCript,1,1) == "C"
strDias = "3"
Case Substr(strCript,1,1) == "D"
strDias = "2"
Case Substr(strCript,1,1) == "E"
strDias = "1"
Case Substr(strCript,1,1) == "F"
strDias = "0"

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 13/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Otherwise
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Return Null
Forum Bloger
Endcase
strDias = strDias + Padl(Asc(Substr(strCript,2,1))-50,2,[0])
strDias = strDias + Padl(Asc(Substr(strCript,3,1))-50,2,[0])
iDias = Val(strDias ) && Valor inteiro que corresponde a data
dRetorno = dDataBase + iDias
*** Fim - Aqui fasso uma criptografia simpres como exemplo
Return dRetorno
Endfunc
*
*** Fim da rotina cript

wvar=1500
wre=strzero(wvar,8)
MESSAGEBOX(wre)
**00001500
function STRZERO(Var1, Var2, Var3)
Local WVar1
if (PCount() = 3)
WVar1 = Str(Var1, Var2, Var3)
endif
if (PCount() = 2)
WVar1 = Str(Var1, Var2)
endif
if (PCount() = 1)
WVar1 = Str(Var1)
endif
return Replicate("0", Len(WVar1) - Len(LTrim(WVar1))) + LTrim(WVar1)
**
right('000'+this.value,3)
**

Exemplo: impressora matricial


*-- direciona a impressoa
SET PRINTER TO NAME GETPRINTER( )
??? "Imprime onde esta o carro da impressora"
??? chr(13)+chr(10) &&-- pula linha
??? "Imprime na proxima linha"
*-- pula 10 linhas
for i=1 to 10
??? chr(13)+chr(10) &&-- pula linha
next
*-- despeja o buffer
SET PRINTER TO

Chamar form com retorno de variavel


1-No init do form1(chamador) publica as variaveis :
public m.ValorRetorno, m.valorretorno2
2-chame o form2
do form2 with valor1,valor2
3-no destroy do form2 atribua os valores as variaveis
m.ValorRetorno = seu_valor1
m.valorretorno2 = seu_valor2
4- No destroy do form1 libere as variaveis
release m.ValorRetorno, m.valorretorno2
Outra forma de fazer
******
FormA e FormB
Do form formB with thisform.valorvai.value to m.valorvolta
Altere a propriedade WINDOWTYPE do formB chamado para 1-MODAL.
Crie 2 propriedades no FormB - valorreceb e valorretor.
No Init do formB :
Lparam m.valorchegado
Thisform.valorreceb = m.valorchegado
Preencha m.valorretor com algum valor e dê um Thisform.Release ( onde achar melhor ).
No Evento Unload do formB :
Return Thisform.ValorRetor
*** REGISTROS DUPLICADO

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 14/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
CLEAR ALL
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
CLOSE DATABASES ALL
Forum Bloger
SET SAFETY OFF
SET DELETED ON
SELECT * FROM MUSICA WHERE !EMPTY(CANTOR) INTO TABLE CANTOR
*BROWSE
USE
LOCAL wo
c = 0
d = 0
CLOSE DATABASES ALL
USE CANTOR IN 0 ALIAS CANTOR
SELECT CANTOR
INDEX on CANTOR TO ssA
GO TOP IN CANTOR
DO WHILE ( Not Eof( "CANTOR" ) )
wo= CANTOR.CANTOR
SKIP IN CANTOR
DO WHILE ( CANTOR.CANTOR = wo And Not Eof( "CANTOR" ) )
DELETE IN CANTOR
c = c + 1
WAIT WINDOW 'Registros Duplicados Apagados '+ str(c) TIMEOUT 0.05
SKIP IN CANTOR
ENDDO
d = d+1
WAIT WINDOW 'Registros Lidos '+ str(d) TIMEOUT 0.1
ENDDO

**Store procedure mysql


Stored Procedure no Mysql 5.1
Obs: Para criar Stored Procedure nesse exemplo, utilizarei o mysql-front.
Primeiro vamos criar a tabela que iremos utilizar:
Código:
CREATE TABLE tbl_cliente (
cli_id int(5) auto_increment primary key unique,
cli_nome varchar(60) not null,
cli_cpf varchar(20) not null unique
);
Inserindo alguns dados na tabela tbl_cliente:
Código:
insert into tbl_cliente(cli_nome,cli_cpf)values('Fernanda','00000');
insert into tbl_cliente(cli_nome,cli_cpf)values('Vanessa','11111');
insert into tbl_cliente(cli_nome,cli_cpf)values('Cristina','22222');
insert into tbl_cliente(cli_nome,cli_cpf)values('Poliana','33333');
insert into tbl_cliente(cli_nome,cli_cpf)values('Sandra','44444');
insert into tbl_cliente(cli_nome,cli_cpf)values('Carla','55555');
Podemos usar 3 tipos de parametros existentes em uma SP no mysql
IN - Para entrada de dados.
OUT - Para saida de dados.
INOUT - Para entrada e saida de dados.
Criaremos nossas procedures com as funcoes de INSERIR,DELETAR,ATULIZAR e MOSTRAR DADOS DA TABELA, com
Criando Stored procedure para inserir dados em nossa tabela tbl_cliente
Código:
create procedure add_cliente
(
IN p_nome varchar(50),
IN p_cpf varchar(20)
)
Begin
insert into tbl_cliente ( cli_nome, cli_cpf ) values( p_nome, p_cpf );
end;
Para chamar essa Stored Procedure criada usamos Call().
Vamos inserir alguns dados utilizando essa Stored Procedure add_cliente().
Código:
call add_cliente('suellen','66666');
call add_cliente('claudia','77777');

Se verificar em sua tabela vera que os dados foram inseridos.


------

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 15/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Criando Stored procedure para apagar dados em nossa tabela tbl_cliente
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Código:
Forum Bloger
create procedure del_cliente
(IN p_cod int(5) )
Begin
delete from tbl_cliente where cli_id = p_cod;
end;
Vamos apagar alguns dados da nossa tabela tbl_cliente
Código:
Call del_cliente(2);
Call del_cliente(4);
Repare em sua tabela que os clientes com os codigos 2 e 4 foram apagados.
----
Criando Stored procedure para atualizar dados em nossa tabela tbl_cliente
Código:
create procedure update_cliente
(
IN p_cod int,
IN p_nome varchar(60),
IN p_cpf int(5)
)
Begin
update tbl_cliente
set
cli_nome = p_nome,
cli_cpf = p_cpf
where
cli_id = p_cod;
end;
vamos atualizar alguns dados da nossa tabela tbl_cliente
Código:
Call update_cliente(1,'MARIA',99999);
Call update_cliente(3,'SOLANGE',88888);
Note que atualizamos os clientes com codigos 1 e 3.
----
Criando Stored procedure para mostra os dados da nossa tabela tbl_cliente
Obs: Nesse caso voce pode utilizar de parametros ou nao.Caso queira
utilizar parametros a ideia e a mesma para os exemplos acima.
Código:
create procedure mostra_cliente()
Begin
select * from tbl_cliente;
end;
Vamos chamar nossa Stored procedure para mostrar os dados da tabela.
Código:
Call mostra_cliente();
---fim store procedure
***Codigo inicio no teu main.prg
ON SHUTDOWN QUIT
On Error Do errores With Error( ),Message( ),Message(1),Program( ),Lineno( )
Procedure Errores
PARAMETER merror, mess, mess1, mprog, mlineno
nOpc= MESSAGEBOX("Ocorreu un error:"+CHR(13)+CHR(13)+;
"Data/Hora.: "+TTOC(DATETIME())+CHR(13)+;
'Número de error: ' + LTRIM(STR(merror))+CHR(13)+ ;
'Menssage do error: ' + mess+ CHR(13)+ ;
'Línha do código com error: ' + mess1+CHR(13)+ ;
'Número da línha do erro : ' +;
LTRIM(STR(mlineno))+CHR(13)+ ;
'Programa com error: ' + mprog, 2+48)
DO CASE
CASE nOpc = 3 && Anular
CANCEL
CASE nOpc = 4 && Reintentar
RETRY
CASE nOpc = 5 && Ignorar
RETURN .T.
ENDCASE
RETURN

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 16/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

Store procedure mysql


Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Stored Procedure no Mysql 5.1 Forum Bloger
Obs: Para criar Stored Procedure nesse exemplo, utilizarei o mysql-front.
Primeiro vamos criar a tabela que iremos utilizar:
Código:
CREATE TABLE tbl_cliente (
cli_id int(5) auto_increment primary key unique,
cli_nome varchar(60) not null,
cli_cpf varchar(20) not null unique
);
Inserindo alguns dados na tabela tbl_cliente:
Código:
insert into tbl_cliente(cli_nome,cli_cpf)values('Fernanda','00000');
insert into tbl_cliente(cli_nome,cli_cpf)values('Vanessa','11111');
insert into tbl_cliente(cli_nome,cli_cpf)values('Cristina','22222');
insert into tbl_cliente(cli_nome,cli_cpf)values('Poliana','33333');
insert into tbl_cliente(cli_nome,cli_cpf)values('Sandra','44444');
insert into tbl_cliente(cli_nome,cli_cpf)values('Carla','55555');
Podemos usar 3 tipos de parametros existentes em uma SP no mysql
IN - Para entrada de dados.
OUT - Para saida de dados.
INOUT - Para entrada e saida de dados.
Criaremos nossas procedures com as funcoes de INSERIR,DELETAR,ATULIZAR e MOSTRAR DADOS DA TABELA, com
Criando Stored procedure para inserir dados em nossa tabela tbl_cliente
Código:
create procedure add_cliente
(
IN p_nome varchar(50),
IN p_cpf varchar(20)
)
Begin
insert into tbl_cliente ( cli_nome, cli_cpf ) values( p_nome, p_cpf );
end;
Para chamar essa Stored Procedure criada usamos Call().
Vamos inserir alguns dados utilizando essa Stored Procedure add_cliente().
Código:
call add_cliente('suellen','66666');
call add_cliente('claudia','77777');

Se verificar em sua tabela vera que os dados foram inseridos.


------
Criando Stored procedure para apagar dados em nossa tabela tbl_cliente
Código:
create procedure del_cliente
(IN p_cod int(5) )
Begin
delete from tbl_cliente where cli_id = p_cod;
end;
Vamos apagar alguns dados da nossa tabela tbl_cliente
Código:
Call del_cliente(2);
Call del_cliente(4);
Repare em sua tabela que os clientes com os codigos 2 e 4 foram apagados.
----
Criando Stored procedure para atualizar dados em nossa tabela tbl_cliente
Código:
create procedure update_cliente
(
IN p_cod int,
IN p_nome varchar(60),
IN p_cpf int(5)
)
Begin
update tbl_cliente
set
cli_nome = p_nome,
cli_cpf = p_cpf
where
cli_id = p_cod;
end;
vamos atualizar alguns dados da nossa tabela tbl_cliente
Código:
Call update_cliente(1,'MARIA',99999);
Call update_cliente(3,'SOLANGE',88888);

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 17/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Note que atualizamos os clientes com codigos 1 e 3.
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
----
Forum Bloger
Criando Stored procedure para mostra os dados da nossa tabela tbl_cliente
Obs: Nesse caso voce pode utilizar de parametros ou nao.Caso queira
utilizar parametros a ideia e a mesma para os exemplos acima.
Código:
create procedure mostra_cliente()
Begin
select * from tbl_cliente;
end;
Vamos chamar nossa Stored procedure para mostrar os dados da tabela.
Código:
Call mostra_cliente();
---fim store procedure
***Codigo inicio no teu main.prg
ON SHUTDOWN QUIT
On Error Do errores With Error( ),Message( ),Message(1),Program( ),Lineno( )
Procedure Errores
PARAMETER merror, mess, mess1, mprog, mlineno
nOpc= MESSAGEBOX("Ocorreu un error:"+CHR(13)+CHR(13)+;
"Data/Hora.: "+TTOC(DATETIME())+CHR(13)+;
'Número de error: ' + LTRIM(STR(merror))+CHR(13)+ ;
'Menssage do error: ' + mess+ CHR(13)+ ;
'Línha do código com error: ' + mess1+CHR(13)+ ;
'Número da línha do erro : ' +;
LTRIM(STR(mlineno))+CHR(13)+ ;
'Programa com error: ' + mprog, 2+48)
DO CASE
CASE nOpc = 3 && Anular
CANCEL
CASE nOpc = 4 && Reintentar
RETRY
CASE nOpc = 5 && Ignorar
RETURN .T.
ENDCASE
RETURN
**
wa=diaext(DATE())
wait window wa timeout(2)
?diaext(DATE())
FUNCTION diaext(DATA)
dia=DOW(DATA)
DIMENSION semana[7]
semana[1]="DOMINGO"
semana[2]="SEGUNDA"
semana[3]="TERÇA"
semana[4]="QUARTA"
semana[5]="QUINTA"
semana[6]="SÁBADO"
semana[7]="DOMINGO"
? semana[DIA]
RETURN (semana[DIA])
ENDFUNC
***como fazer uma funcao
Funciton nomedela
Parameters nomeretorno
...Seu codigo
Return(nomeRetorno)
Endfunc
* Exemplo
*Data por extenso
SET DATE BRITISH
SET CENTURY on
DATA1=CTOD('14/11/2012') && *DATA1=DATE()
= DATAEXT(DATA1)
***
FUNCTION DATAEXT()
PARAMETERS data1,alou,DIA,WVALOR
IF EMPTY(data1)
WAIT WINDOW 'vc nao informou a data' TIMEOUT 1
RETURN .f.
ENDIF
WVALOR=''
mes=MONTH(data1 )

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 18/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
DIMENSION DIA(31)
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
DIA(1) = "UM"
Forum Bloger
DIA(2) = "DOIS"
DIA(3) = "TRES"
DIA(4) = "QUATRO"
DIA(5) = "CINCO"
DIA(6) = "SEIS"
DIA(7) = "SETE"
DIA(8) = "OITO"
DIA(9) = "NOVE"
DIA(10) = "DEZ"
DIA(11) = "ONZE"
DIA(12) = "DOZE"
DIA(13) = "TREZE"
DIA(14) = "QUATROZE"
DIA(15) = "QUINZE"
DIA(16) = "DEZESSEIS"
DIA(17) = "DEZESETE"
DIA(18) = "DEZOITO"
DIA(19) = "DEZENOVE"
DIA(20) = "VINTE"
DIA(21) = "VINTE UM"
DIA(22) = "VINTE DOIS"
DIA(23) = "VINTE E TRES"
DIA(24) = "VINTE E QUATRO"
DIA(25) = "VINTE E CINCO"
DIA(26) = "VINTE SEIS"
DIA(27) = "VINTE SETE"
DIA(28) = "VINTE OITO"
DIA(29) = "VINTE NOVE"
DIA(30) = "TRINTA"
DIA(31) = "TRINTA UM"
DIMENSION alou(12)
alou(1) = "Janeiro"
alou(2) = "Fevereiro"
alou(3) = "Marco"
alou(4) = "ABRIL"
alou(5) = "MAIO"
alou(6) = "JUNHO"
alou(7) = "JULHO"
alou(8) = "AGOSTO"
alou(9) = "SETEMBRO"
alou(10) = "OUTUBRO"
alou(11) = "NOVEMBRO"
alou(12) = "DEZEMBRO"
*? DIA(DAY(DATA1))
wvalor=DIA(DAY(DATA1))+" de " +alou(mes)+ " de " +LTRIM(STR(YEAR(data1 )))
WAIT WINDOW WVALOR TIMEOUT 1
RETURN (wvalor)
**

Dica sobre ERROR LOADING FILE RECORD NUMBER 18


USE seuform.scx
REPLACE ALL objcode WITH ''
CLOSE DATABASES
COMPILE FORM seuform.scx

* 1 Ex.livro caixa (entrada de edados) .crie 1 tabela de nome Caixa ,


* com DATA,HIS.DEB,CRE,SAL e a tabela deve ter o nome de CAIXA.
* Veja um livro caixa ,
Close Databases
Set Safety Off
ON KEY LABEL f2 funcao1()
ON KEY LABEL f3 funcao2()
if not file('caixa.dbf')
Create Table caixa( data d(8) , his c(30), deb N(10,2),cre N(10,2), sal N(10,2) )
Select caixa

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 19/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
use in caixa
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
endif
Forum Bloger
clear
use caixa
a=0
browse fields data,his :w=funcao1(),deb,cre,sal :w=funcao2()
function funcao1
append blank
Function Funcao2
a=a+deb-cre
replace sal with a
*Fim Livro Caixa
02-memoria do computador
DECLARE GlobalMemoryStatus IN Win32API STRING @MemStat
cResul2 = ""
cResul3 = ""
cEnter2 = CHR(13)
cBuffer = fLong2str( 32 ) + REPLICATE( CHR( 0 ), 28 )
GlobalMemoryStatus( @cBuffer )
nMemoryLoad = fStr2long( SUBSTR( cBuffer, 5, 4 ))
nTotalPhys = fStr2long( SUBSTR( cBuffer, 9, 4 )) / 1024
nAvailPhys = fStr2long( SUBSTR( cBuffer, 13, 4 )) / 1024
nTotalPageFile = fStr2long( SUBSTR( cBuffer, 17, 4 )) / 1024
nAvailPageFile = fStr2long( SUBSTR( cBuffer, 21, 4 )) / 1024
nTotalVirtual = fStr2long( SUBSTR( cBuffer, 25, 4 )) / 1024
nAvailVirtual = fStr2long( SUBSTR( cBuffer, 29, 4 )) / 1024
CLEAR
cResul2 = cResul2 + "Memoria Lida:" + TRANSFORM( nMemoryLoad, "999,999,999" ) + "%" +cEnter2
cResul2 = cResul2 + "Memoria Fisca:" + TRANSFORM( nTotalPhys, "999,999,999" ) + "k" +cEnter2
cResul2 = cResul2 + "Memória Disponível:" + TRANSFORM( nAvailPhys, "999,999,999" ) + "k" +cEnter2
cResul3 = cResul3 + "Arquivo:" + TRANSFORM( nTotalPageFile, "999,999,999" ) + "k" +cEnter2
cResul3 = cResul3 + "Disponivel para arquivo:" + TRANSFORM( nAvailPageFile, "999,999,999" ) + "k" +c
cResul3 = cResul3 + "Total de Memoria Virtual:" + TRANSFORM( nTotalVirtual, "999,999,999" ) + "k" +
cResul3 = cResul3 + "Memoria Virtual disponível:" + TRANSFORM( nAvailVirtual, "999,999,999" ) + "k"
WAIT WINDOW cResul2 TIMEOUT 14
WAIT window cResul3
*********
FUNCTION fLong2str( iLongVal )
LOCAL iBit, cResult
cResult = ""
FOR iBit = 24 TO 0 STEP -8
cResult = CHR( INT( iLongVal / (2^iBit) )) + cResult
iLongVal = MOD( iLongVal, (2^iBit) )
NEXT
RETURN cResult
ENDFUNC && flong2str( iLongVal ).
*********
FUNCTION fStr2long( cLong )
LOCAL iBit, iResult
iResult = 0
FOR iBit = 0 TO 24 STEP 8
iResult = iResult + (ASC(cLong) * (2^iBit))
cLong = RIGHT( cLong, LEN(cLong) - 1 )
NEXT
RETURN iResult
ENDFUNC && fStr2long( cLong ).

02-c Verficar se ha conexao na internet


DECLARE INTEGER SetForegroundWindow IN user32.dll INTEGER
oIE = CREATEOBJECT("internetexplorer.application")oIE.navigate("http://online.webng.com/atualizacaosi
=SetForegroundWindow(oIE.HWND)
**outro exemplo
DECLARE LONG InternetGetConnectedState IN "wininet.dll" LONG lpdwFlags, LONG dwReservedIF InternetGet
RUN /n explorer.exe http://motosline.webng.com/atualizacaosistema.rar
wait windo "Baixando 1 arquivo em http OK!" timeout(1)
ELSEMESSAGEBOX("Conexão com a Internet não disponível!",48,'Atencao',1000)
ENDIF***De Outra forma
******** Firewall não barra
declare integer InternetGetConnectedState in WinInet.dll integer @lpdwFlags, integer dwReserved
nFlags = 0

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 20/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
nResult = InternetGetConnectedState (@nFlags, 0)
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
**? iif (nResult = 1, "Connected.", "Not connected.")
Forum Bloger
IF nResult = 1
MESSAGEBOX('Conectado')
ELSE
MESSAGEBOX('Desconectado')
ENDIF
****** Firewall barra
DECLARE INTEGER InternetCheckConnection;
IN wininet;
STRING lpszUrl,;
INTEGER dwFlags,;
INTEGER dwReserved
IF InternetCheckConnection("http://yahoo.com.br",1,0) = 0
=MESSAGEBOX("O Computador Não está Conectado a Internet, ou Há um Bloqueio do Firewall ou o Servidor
ENDIF
**

03-)Função para verificar a impressora default


SET CONSOLE OFF
SET NOTIFY off
SET SAFETY OFF
APRINTERS(gaprinters, 1)
CREATE CURSOR imprs (caminho c(50), porta c(50), nomeimp c(50), COMMEN c(50))
INSERT INTO imprs FROM ARRAY gaprinters
SELECT imprs
GO TOP
*aqui o browse e so pra voce ver depos exluir alinha browse
BROWSE NORMAL NODELETE TITLE ' Sair'
Declare Integer GetDefaultPrinter In winspool.drv String @pszBuffer, Integer @pcchBuffer
nBufsize = 250
cPrinter = Replicate(Chr(0), nBufsize)
= GetDefaultPrinter(@cPrinter, @nBufsize)
cPrinter = Substr(cPrinter, 1, At(Chr(0),cPrinter)-1)
Select imprs.nomeimp From imprs Where imprs.caminho = Alltrim(cPrinter) Into Cursor impbusca
Select impbusca
Public impdefaut
impdefault = impbusca.nomeimp
MESSAGEBOX('a impressora padrao é:'+CHR(13)+impdefault,48,'aviso')
SET PRINTER TO NAME GETPRINTER()
**ou nomeservidornome da impressora
SET PRINTER TO NAME &impdefault
REPORT FORM nomedoseureport TO PRINTER console
ou
direto
_screen.windowstate = 2
set print to name getprinter()
report form listcli1.frx to printer console
return
****
ou
****
IF APRINTERS(gaprinters) < 1 && Se nao houver drivers de impressora instalada
WAIT windows 'Nenhuma impressora instalada'
ELSE
SET PRINTER TO NAME "novaPDF" && Para colocar impressora padrao no fox
SELECT Pesquisa
REPORT FORM proposta NOCONSOLE TO PRINTER prompt
ENDIF
***
ou
SET PRINTER TO NAME "ZEBRA" && depois confirma a impressora
SET DEVICE TO PRINT
SET PRINTER FONT 'MS Sans Serif', 10 STYLE "B"
**REPORT FORM RELATORIO TO PRINTER && aqui imprimir o Log da empresa
SET PRINTER TO arq.txt
l=1
@ l+1,0 say "Teste da Impressora" FONT 'Courier', 12 STYLE "B"
? CHR(13)+CHR(10)

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 21/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
@ l+1,0 say "na linha de cima pular uma linha ou usar uma ?"
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
@ L+1,0 SAY '***'
Forum Bloger
@ l+1,0 say "CAXAMBU EVENTOS"+CHR(18)
@ l+1,0 say "Centro de DIVERSÃO " +CHR(14)
@ l+1,0 say " Rua Azilo,56 VL.JO SAO PAUL0"
?
SET PRINTER to
MODIFY file arq.txt
IF FILE('arq.txt')
RUN /n TYPE arq.TXT > LPT1
ELSE
WAIT WINDOW 'nao encontrei' TIMEOUT 1
endif
ou
**
SYS(2040) onde: 0 = impressao finnalizada
1 = modo preview
2 = imprimindo ou sendo enviado
Report Form cotacao.frx TO PRINTER NODIALOG NOCONSOLE
Do while .t.
if sys(2040) = "0" && verifica se terminou a impressao
exit && sai do loop e continua o resto da rotina
endif
inkey(.5) && espera .5 segundo para nova verificacao
Enddo
**

gerando um arquivo.txt rapido


*****
TEMP=FCREATE("ARQUIVO.TXT") && Cria o Arquivo.txt
FOR I=1 TO 20 && conta de 1 a 20
** GRAVAR AS 20 LINHAS
=Fputs(TEMP,"txt GRAVANDO a LINHA"+STR(I,3)+CHR(13)+CHR(10))
NEXT
FCLOSE(TEMP) && fECHAR O ARQUIVO
CLOSE all
MODIFY FILE arquivo.txt && abrindo o editor

Para gerar o pdf direto, estou usando a versao 90. funcionou


primeiro vc tera ke baixar o FOXyPreviewer para pdf no link
http://foxypreviewer.codeplex.com/releases/view/49471
codigo estou gerando um pdf teste1.pdf, com um report da pasta solution
***
SET PROCEDURE TO LOCFILE("FoxyPreviewer.App") ADDITIVE
SET REPORTBEHAVIOR 90
LOCAL loReport as "PreviewHelper" OF "FoxyPreviewer.App"
loReport = CREATEOBJECT("PreviewHelper")
WITH loReport as ReportHelper
.AddReport(_Samples + "\Solution\Reports\percent.frx", "NODIALOG")
.cDestFile = "c:\Teste1.pdf" && Use para criar uma previsão de saída
.RunReport()
ENDWITH
loReport = NULL
RUN /N Explorer.Exe c:\Teste1.pdf

03a-)Codigo para Abrir uma pagina no internet Explorer pelo VFP


DECLARE INTEGER SetForegroundWindow IN user32.dll INTEGER
oIE = CREATEOBJECT("Internetexplorer.application")
oIE.navigate("http://www.google.com.br")
oIE.Visible = .T.
=SetForegroundWindow(oIE.HWND)
*ou
LOCAL teste
oForm = CREATEOBJECT("teste")
oForm.SHOW(1)
* Definição do Form

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 22/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
DEFINE CLASS teste AS FORM
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
CAPTION = "Abrindo uma Pagina na Internet pelo Vfp"
Forum Bloger
BACKCOLOR = RGB(255,255,255)
ICON = ""
DESKTOP = .T.
MINBUTTON = .T.
MAXBUTTON = .T.
top=0
left=0
height=580
width=800
ADD OBJECT oleIE AS OLECONTROL WITH ;
TOP = 0, LEFT = 0, WIDTH = 795, HEIGHT = 575, OLECLASS = "Shell.Explorer.2"
PROCEDURE oleIE.REFRESH
NODEFAULT
ENDPROC
PROCEDURE INIT
THISFORM.oleIE.navigate("http://www.google.com.br")
ENDPROC

03-b) Incluir um campo em uma tabela com comando ALTER TABLE


IF NOT USED('pedidos')
USE pedidos IN 0 EXCLUSIVE ALIAS pedidos
ENDIF
SELECT pedidos
IF TYPE('pedidos.cidade')='U'
ALTER TABLE pedidos ADD cidade c(25)
ALTER TABLE pedidos ADD ufs c(2)
ELSE
WAIT WINDOW 'o campo Cidade ja existe na tabela ' TIMEOUT 1
ENDIF
GO TOP IN pedidos
BROWSE LAST NORMAL FIELDS cidade,uf,nome

04-)*Codigo para Corrigndo indices


WAIT WINDOW "Verifico se o Arq.Danificou Espere" nowait
nReparos = 0
nTotReg = Adir(aDbfs,"*.dbf")
For nFor = 1 To nTotReg
cArq = aDbfs(nFor,1)
WAIT WINDOW "Verifico se Arq "+cArq+" Danificou Aguarde" nowait
If Upper(cArq) <> "FOXUSER.DBF"
nError = 0
lError = .F.
Use (cArq) In 1 Exclusive
**
If lError
=Aerror(aArrErr)
nError = aArrErr(1,1)
Endif
******
If nError = 2091 Or nError = 2065
If Messagebox("Encontrou 1 arq Corrompido"+Chr(13)+;"Deseja tentar recuperar ?",4+32+256,"CUIDADO") =
** A linha abaixo usar somente no fox 9
* Set TABLEVALIDATE To 0
nError = 0
lError = .F.
Use In 1
Use (cArq) In 1 Exclusive
If lError
=Aerror(aArrErr)
nError = aArrErr(1,1)
Endif
If nError = 0
lcColumnName = Substr(Sys(2015),1,10)
Alter Table &cArq Add Column (lcColumnName) c(1)
Alter Table &cArq Drop Column (lcColumnName)
USE
nReparos = nReparos + 1
Else

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 23/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Messagebox("O arquivo "+cArq+" ainda esta corrompido",48,"ATENÇÃO")
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Endif
Forum Bloger
nError = 0
lError = .F.
** A linha abaixo usar somente no fox 9
*Set TABLEVALIDATE TO 3
Use (cArq) In 1 Exclusive
If lError
=Aerror(aArrErr)
nError = aArrErr(1,1)
Endif
Endif
Endif
If nError <> 0
Messagebox("Nao foi possivel reparar o arquivo " + cArq, 48,"ATENÇÃO")
Sele (cArq)
Use
nError = 0
Else
Sele (cArq)
Use
Endif
Endif
NEXT
IF nReparos <> 0
Messagebox("Foram reparados "+TRANSFORM(nReparos)+" arquivos")
Endif
*

05-) Busca de cep


* Para uzar dll ChilkatXml.dll, copie a mesma para * C:\WINDOWS\system32 e *execute o seguinte comand
regsvr32 C:\WINDOWS\system32\ChilkatXml.dll
IF FILE("C:WINDOWSsystem32ChilkatXml.dll") = .F.MessageBox('O arquivo necessário para utilizar esta r
RETURN
ENDIF
* LEITURA DO XML ATRAVES DE UM OBJETO CHILKAT
LOCAL LOXML, LNSUCCESS, LOXMLCEP, mURL, mRESULTADO
wcep1='02728-090' &&ou '02728090'IF EMPTY(wCEP1)MessageBox('PREENCHA O CEP',48+0+0,'Atenção...')
RETURN
ELSEmURL='http://cep.republicavirtual.com.br/web_cep.php?cep=' + ALLTRIM(STRTRAN(wCEP1,'-','')) + '&f
LOXML=CREATEOBJECT('Chilkat.Xml')LOXMLCEP=LOXML.HTTPGET(mURL)
IF ISNULL(LOXMLCEP) = .T.MessageBox('Não há conexão com Internet / Serviço não disponível.',48+0+0,'A
ELSEmRESULTADO=LOXMLCEP.GETCHILDCONTENT("resultado")STORE " " TO wende,wbairo,wcidade,westaIF mRESULT
ENDIF

8-) Colacar uma Imagem Centralizada de fundo no Screen do seu Aplicativo


Autor :Julio membro do Blog
m.largura = SYSMETRIC(1)
m.altura = SYSMETRIC(2)
cCaminho = "C:\sistema\background\screen.jpg"
_SCREEN.ADDOBJECT("LOGO","Image")
_SCREEN.LOGO.PICTURE= cCaminho && alterei aqui
_SCREEN.LOGO.LEFT=0
_SCREEN.LOGO.TOP =0
_SCREEN.LOGO.BACKSTYLE = 0
_SCREEN.LOGO.STRETCH = 2
_SCREEN.LOGO.VISIBLE = .T.
_SCREEN.LOGO.WIDTH = m.largura && alterei aqui
_SCREEN.LOGO.HEIGHT =m.altura && alterei aqui
*na Procedure*
m.largura = SYSMETRIC(1)
m.altura = SYSMETRIC(2)
PUBLIC ohandler
ohandler=NEWOBJECT("myhandler")
BINDEVENT(_SCREEN,"Resize",ohandler,"myresize")

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 24/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
DEFINE CLASS myhandler AS SESSION
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
PROCEDURE myresize
Forum Bloger
_SCREEN.LOGO.WIDTH = m.largura && alterei aqui
_SCREEN.LOGO.HEIGHT =m.altura && alterei aqui
ENDPROC
ENDDEFINE
CLbusca=UPPER(INPUTBOX("Nome ", "A Pesquisar", "", 0, "", "FOICANCELADO"))
IF CLbusca = "FOICANCELADO"MESSAGEBOX("O botão do InputBox foi pressionado")
ENDIF
09-PISCAR LABEL - EFEITO BLINK
Coloque um objeto do tipo container em seu form com a propriedade BACKSTYLE = 0
Despeje um objeto LABEL e um TIMER no CONTAINER.
Defina a propriedade Interval do objeto TIMER para 300
(este valor você pode alterar conforme sua preferência) e inclua a linha abaixo ao método TIMER :
Código:
This.Parent.label1.Visible = ! This.Parent.label1.Visible
10-VERIFICAR INSCRIÇÃO ESTADUAL
Para verificar a consistência das Inscrições estaduais dos diversos estados, a Secretaria
da Receita disponibilizou uma DLL que faz a verificação com base no ESTADO
e no NUMERO DE I.E. fornecido.

Inicialmente, é preciso se fazer o download da DLL.


Para baixá-la, clique no link abaixo.
Baixar a Dll em http://www.sintegra.gov.br/DLL3.zip
Salve em qualquer pasta, de preferência em ..\WINDOWS\SYSTEM
Usá-la é bastante simples :
Primeiramente, é preciso "declarar" a DLL
Declare Integer ConsisteInscricaoEstadual In DllInscE32.DLL String, String

Crie um programa PROINSC.PRG ou adicione o código abaixo em seu arquivo de procedures:

* FUNCAO....: PROINSC()
* OBJETIVO..: Fazer checagem de INSCRIÇÃO ESTADUAL
* RETORNO...: .T. se for correto ou .F. se for errado
* PARÂMETROS: INSCRIÇÃO ESTADUAL (caracter)
* ESTADO (caracter)

FUNCTION PROINSC
Parameters IE, UF
** "limpar" a inscrição estadual para a verificação
IE = STRTRAN(IE,'.','')
IE = STRTRAN(IE,'-','')
IE = STRTRAN(IE,'/','')
IE = STRTRAN(IE,',','')
IE = STRTRAN(IE,'ME','')
IE = STRTRAN(IE,' ','')
IE = STRTRAN(IE,'P','')
IE = ALLTRIM(IE)
Return ConsisteInscricaoEstadual(IE, UF)=0

Para verificar o valor digitado pode-se colocar o código abaixo no VALID do Textbox.
IF NOT PROINSC(THIS.Value,This.Parent.CmbCli_Estado.Value)
= MESSAGEBOX('INSCRIÇÃO ESTADUAL INVÁLIDA !', 48, 'Atenção')
RETURN .F.
ENDIF
RETURN
***

*!* Quebra da string por delimitador "\"


#DEFINE _enter CHR(10)+CHR(13)
#DEFINE delimitador "\"
*!* Define o valor de entrada
LOCAL entrada AS STRING
m.entrada = "c:\ Pedidos\backup\tabelas\Resta.dbf"
FOR m.contador=1 TO GETWORDCOUNT(m.entrada,delimitador)
resp = GETWORDNUM(m.entrada,m.contador,delimitador)
ENDFOR
MESSAGEBOX(resp,48,'Nome da tabela',2900)
ou*
m.entrada = "c:\Vfoxpro\aplicacao\tabelas\teste.dbf"

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 25/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
messagebox( JUSTFNAME(m.entrada) ) && teste.dbf
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
***fim
Forum Bloger
*Criar um arquivo txt
a=FCREATE('c:\prfifod\Restas.txt')
FPUTS(a,'txtnomedaempresa')
FPUTS(a,'txtcgc')
FCLOSE(a)
*fin
VARIAVEL1 = FILETOSTR("Restas.txt")
*!* encripta dados
FUNCTION SCRIPTA(cDADO)
LOCAL cCRIP
MCOMP = LEN(cDADO)
FOR J = 1 TO MCOMP
IF J = 1
cCRIP = CHR(256-ASC(SUBSTR(cDADO,J,1)))
ELSE
cCRIP=cCRIP+CHR(256-ASC(SUBSTR(cDADO,J,1)))
ENDIF
NEXT
RETURN(cCRIP)
ENDFUNC

*!* Descripta dados


FUNCTION SDRIPTA(cDADO)
LOCAL cCRIP
MCOMP = LEN(cDADO)
FOR J = 1 TO MCOMP
IF J = 1
cCRIP = CHR(256-ASC(SUBSTR(cDADO,J,1)))
ELSE
cCRIP=cCRIP+CHR(256-ASC(SUBSTR(cDADO,J,1)))
ENDIF
NEXT
RETURN(cCRIP)
ENDFUNC

11-VERIFICAR CNPJ
FUNCTION proCNPJ
* Parametro : CNPJ a verificar (C14)
* Retorna : .T. se confirmado
PARAMETERS wcgc
wn1 = VAL(SUBS(wcgc,01,1))
wn2 = VAL(SUBS(wcgc,02,1))
wn3 = VAL(SUBS(wcgc,03,1))
wn4 = VAL(SUBS(wcgc,04,1))
wn5 = VAL(SUBS(wcgc,05,1))
wn6 = VAL(SUBS(wcgc,06,1))
wn7 = VAL(SUBS(wcgc,07,1))
wn8 = VAL(SUBS(wcgc,08,1))
wn9 = VAL(SUBS(wcgc,09,1))
wn10 = VAL(SUBS(wcgc,10,1))
wn11 = VAL(SUBS(wcgc,11,1))
wn12 = VAL(SUBS(wcgc,12,1))
wn13 = VAL(SUBS(wcgc,13,1))
wn14 = VAL(SUBS(wcgc,14,1))
* CALCULO DO 13o ALGARISMO
soma1 = wn1*5+wn2*4+wn3*3+wn4*2+wn5*9+wn6*8+wn7*7+wn8*6+wn9*5+wn10*4+wn11*3+wn12*2
dig1 = 11 - MOD(soma1,11)
IF dig1 = 10 .OR. dig1 = 11
dig1 = 0
ENDIF
IF dig1 <> wn13
RETURN .F.
ENDIF
* CALCULO DO 14o ALGARISMO
soma2 = wn1*6+wn2*5+wn3*4+wn4*3+wn5*2+wn6*9+wn7*8+wn8*7+wn9*6+wn10*5+wn11*4+wn12*3+
wn13*2
dig2 = 11 - MOD(soma2,11)
IF dig2 = 10 .OR. dig2 = 11

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 26/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
dig2 = 0
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
ENDIF
Forum Bloger
IF dig2 <> wn14
RETURN .F.
ENDIF
RETURN .T.

12-VERIFICAR CPF
FUNCTION proCPF
* Parametro : CPF a verificar (C11)
* Retorna : .T. se confirmado
PARAMETERS wcpf
wn1 = VAL(SUBS(wcpf,01,1))
wn2 = VAL(SUBS(wcpf,02,1))
wn3 = VAL(SUBS(wcpf,03,1))
wn4 = VAL(SUBS(wcpf,04,1))
wn5 = VAL(SUBS(wcpf,05,1))
wn6 = VAL(SUBS(wcpf,06,1))
wn7 = VAL(SUBS(wcpf,07,1))
wn8 = VAL(SUBS(wcpf,08,1))
wn9 = VAL(SUBS(wcpf,09,1))
wn10 = VAL(SUBS(wcpf,10,1))
wn11 = VAL(SUBS(wcpf,11,1))
* CALCULO DO 1o digito
* --------------------
soma1 = wn1*10+wn2*9+wn3*8+wn4*7+wn5*6+wn6*5+wn7*4+wn8*3+wn9*2
dig1 = 11 - MOD(soma1,11)
IF dig1 = 10 .OR. dig1 = 11
dig1 = 0
ENDIF
IF dig1 <> wn10
RETURN .F.
ENDIF
* CALCULO DO 2o digito
soma2 = wn1*11+wn2*10+wn3*9+wn4*8+wn5*7+wn6*6+wn7*5+wn8*4+wn9*3+wn10*2
dig2 = 11 - MOD(soma2,11)
IF dig2 = 10 .OR. dig2 = 11
dig2 = 0
ENDIF
IF dig2 <> wn11
RETURN .F.
ENDIF
RETURN .T.
ENDFUNC
*
13-SABER SE UMA VARIÁVEL EXISTE
Use a função TYPE() :
IF TYPE("Var")
=MessageBox("Variável Existe",0,"")
ENDIF

15-Importar e Exportar Arquivos


Crie um Botão ou Em qualquer metodo e coloque assim
Importar
append from nome_do_arquivo.xls ou txt type xls ou txt

16-Exportar
copy to nome_do_arquivo.xls ou txt type xls ou txt

18-A Resolucao de Video


_screen.AddObject("LOGO","Image")
_screen.LOGO.Picture="nome_da_imagem.png"
_screen.LOGO.left=(_Screen.width/2) - (_screen.LOGO.width/2)
_screen.LOGO.Top =(_Screen.Height/2) - (_screen.LOGO.Height/2)
_screen.LOGO.BackStyle = 0 && Transparente
_screen.LOGO.Visible = .T.

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 27/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

*Registrando Uma MOLEZIP.DLL


Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Close Databases Forum Bloger
SET DEFAULT TO SYS(5)+CURDIR()
Set Safety Off
SET EXACT OFF
Create Table teste1( codigo c(10) , descricao c(40), preco N(10,2))
Select teste1
INDEX on codigo TAG codigo
For i = 1 To 15
Insert Into teste1 (codigo,descricao,preco) Values ( Alltrim(Str(i,6)), 'Produto '+Str(i), i)
NEXT
WAIT WINDOW 'Incio backup.zip Aguarde..... ' NOWAIT noclear
**Registra DLL MOLEZIP.DLL
DECLARE LONG DllRegisterServer IN molezip.dll
IF DllRegisterServer() = 0
WAIT WINDOW 'molezip. dll REGISTRADO !!!' TIMEOUT 0.3
ELSE
messagebox('NÃO REGISTRADO !!!')
RETURN .f.
ENDIF
gcDirBackup = SYS(5)+CURDIR()
SET defa TO SYS(5)+CURDIR()
Close Table All
Close Database All
Local cArquivo, x
Versao1='V10171012'
cArquivo = 'Backup'
cArquivo = AllTrim(gcDirBackup)+cArquivo
cArquivo = AllTrim(cArquivo) + '.Zip'
oZip = CreateObject("molezip.zipfile")
oZip.Create(cArquivo)
?? chr(7)
*Aqui adiciono todos os dbf ao arquivo criado pelo molezip chamado oZip
nArquivos = Adir(aArquivos,"*.DBF" ) && *.dbf
For x = 1 To nArquivos
Inkey(0.01,'H')
oZip.PackInplace(aArquivos(x,1),aArquivos(x,1),1)
EndFor
nArquivos = Adir(aArquivos,'*.CDX') && *.CDX
For x = 1 To nArquivos
Inkey(0.01,'H')
oZip.PackInplace(aArquivos(x,1),aArquivos(x,1),1)
EndFor
nArquivos = Adir(aArquivos,'TESTE.BAK')
For x = 1 To nArquivos
Inkey(0.01,'H')
oZip.PackInplace(aArquivos(x,1),aArquivos(x,1),1)
ENDFOR
OZip.Close
WAIT WINDOW 'fim do backup' TIMEOUT 0.7
WAIT clear
Link da dll molezip.zip
19-Como saber SE 1 OBJETO TEM OU NÃO UMA PROPRIEDADE / MÉTODO
* se existe o método Release, executa
IF pemstatus(Thisform, 'RELEASE',5)
Thisform.Release
ENDIF

20-NÃO Deuxe ke Seu EXECUTÁVEL RODE SIMULTANEAMENTE Na MESMA ESTAÇÃO


Normalmente, não queremos que um executável seja executado ao mesmo tempo mais de uma vez. Existem v
Modo de uso :
Coloque no programa inicial do seu sistema nas primeiras linhas:
Código:
IF NOT validar_sistema()
QUIT
ENDIF

Salve como validar_sistema.PRG ou inclua em seu arquivo de procedures


Código:
FUNCTION validar_sistema

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 28/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
LOCAL lcOldCaption
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
lcOldCaption = _screen.Caption
Forum Bloger
_screen.Caption = SYS(3)
LOCAL lnhwnd
DECLARE INTEGER FindWindow IN Win32API STRING lpClassName, STRING lpWindowName
DECLARE INTEGER BringWindowToTop IN Win32API INTEGER HWND
DECLARE INTEGER SendMessage IN Win32API INTEGER HWND, INTEGER Msg, INTEGER WParam, INTEGER LPARAM
lnhwnd = findwindow( 0, lcOldCaption)
_screen.Caption = lcOldCaption
IF lnhwnd > 0
bringwindowtotop(lnhwnd) && Mandar la ventana de la aplicación al frente
sendmessage(lnhwnd, 274, 61488, 0) && Maximizar la ventana de la aplicación
RETURN .F.
ENDIF
RETURN .T.
***
Ou
Local lnWinHandle
Declare Integer FindWindow In Win32API Integer, String
lnWinHandle = FindWindow( 0, 'Nome da Tela do seu programa' )
If lnWinHandle # 0
=Messagebox( "O aplicativo já está sendo executado!",16,'Nome da Tela do seu programa' )
clear events
QUIT
Endif

21-REMOVER UMA ABA DE UM PAGEFRAME


*-- Esconder a 2a pagina do PageFrame
thisform.PageFrame1.RemoveObject("Page2")

22-SABER SE UMA PASTA EXISTE


1 exemplo cria uma pasta no sistema caso não exista uma com o nome desejado.

IF NOT DIRECTORY('c:\TEMP\')
MKDIR ('c:\TEMP\')
ELSE
WAIT WINDOW 'PASTA JA EXISTE' TIMEOUT 1
ENDIF

23-COMO FECHAR TODOS OS FORMS


FOR i = 1 TO _Screen.formCount
_Screen.forms(i).release
ENDFOR

ou então
Código:
LOCAL loForm
FOR EACH loForm IN _SCREEN.FORM
loForm.RELEASE()
NEXT
***
DEFINIR PROPRIEDADES DE VÁRIOS OBJETOS DE uma SÓ VEZ
FOR EACH Objeto in Thisform.ObjectsIf Objeto.BaseClass=="Label" Then
Objeto.Left=Objeto.Left+10EndifNEXT
******
24-OBTER O IP LOCAL DA MÁQUINA
oSocket = CreateObject("MSWinsock.Winsock")
? oSocket.LocalIP
******ou
Veja tambem o comando SYS(0)
ELE traz o nome da maquina e o usuario logado
*ou

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 29/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Public usuario
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
declare integer GetUserName in advapi32 String@, Integer@ && identifica usuario logado no computador
Forum Bloger
lcnomeusuario = replicate(chr(0),255)
lres = getusername(@lcnomeusuario,255)
if lres # 0 then
usuario = left(lcnomeusuario,at(chr(0),lcnomeusuario)-1)
***aqui o seu textbox de usuario
* thisform.text1.value = left(lcnomeusuario,at(chr(0),lcnomeusuario)-1)
endif
wait windo usuario timeout 3
24-A abri
oShell = Createobject("Shell.Application")
oShell.Open('C:\arquiv~1\TeamViewer\Version7\teamViewer.exe ')
WAIT WINDOW 'aguarde ' TIMEOUT 3

26A-Label na screen
ON SHUTDOWN QUIT
ON KEY LABEL F2 QUIT
_SCREEN.WindowState = 2
_SCREEN.BackColor = RGB(255,255,255)
_SCREEN.Caption='TESTE DE SISTEMA F2 SAIR '
_screen.AddObject("lblTeste","label")
_screen.lblTeste.top = 280
_screen.lblTeste.left = 80
_screen.lblTeste.AutoSize = .t.
_screen.lblTeste.caption = "Site http://teste.com/ TEL.nome-11-99999986"
_screen.lblTeste.Visible = .T.
_screen.lblTeste.BackStyle = 0
_screen.lblTeste.fontbold = .t.
_screen.lbLTESTE.FontSize = 8
_screen.lbLTESTE.forecolor =rgb(0,0,255)

26-CRIAR UM EXECUTÁVEL RAPIDAMENTE A PARTIR DE UM PRG


BUILD PROJECT TempProj FROM myprg
BUILD EXE myexe FROM TempProj
ERASE TempProj.pj?

27-FINALIZAR TODAS AS TRANSAÇÕES ABERTAS


Eventualmente, em situações de erro no programa, precisamos finalizar todas as transações abertas.
Código:
DO WHILE TXNLEVEL() > 0
ROLLBACK
ENDDO

28-MOVER O CURSOR PARA O INICIO DO TEXTBOX


Eventualmente alguém pede para que o cursor vá automaticamente para o início do texto qdo um TEXTBOX
No evento CLICK do Textbox, basta colocar :
Código:
This.SelStart = 0
****
29-Data invalida metodo lostfocus
Validação de campo pelo metodo lostfocus.
IF EMPTY(CTOD(THIS.VALUE)) THEN
MESSAGEBOX("Data Inválida!")
NODEFAULT
ENDIF
ou pelo Metodo valid
Para validar 1 data no método VALID de um TEXTBOX:
IF EMPTY(CTOD(THIS.VALUE)) THEN
= MESSAGEBOX("Data Inválida!")
RETURN 0
ENDIF

29A-DESABILITAR A CAIXA DE TEXTO DE UM SPINNER


no Evento KEYPRESS, coloque :
Código:
NODEFAULT

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 30/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
30-SABER SE PROGRAMA ESTA SENDO EXECUTADO A PARTIR DO EXE OU NO PROJETO
Forum Bloger
IF VERSION(2) = 0 && RunTime
MESSAGEBOX("EXECUTÁVEL")
ELSE
MESSAGEBOX("DESENVOLVIMENTO")
ENDIF

31-SINCRONIZAR HORARIO COM O SERVIDOR


Há várias maneiras de se fazer isso, aí vai uma delas:
SET MEMOWIDTH TO 126

tcserver = "\\ServidorNt"
_cTextBat = GETENV("TEMP")+"\"+SUBSTR(SYS(2015), 3, 8)+".bat"
_cTextShell = "NET TIME "+tcserver+" /SET /Y"
STRTOFILE(_cTextShell, _cTextBat)
DECLARE LONG WinExec;
IN KERNEL32;
STRING lpCmdLine, LONG nCmdShow
winexec(_cTextBat, 0)
=INKEY(.2, "H")

32-CONTROLAR SAÍDA DO BROWSE


Algumas pessoas ainda não estão totalmente acostumadas ao uso de Grids, então vai uma dica antiga, p

ON KEY LABEL ENTER KEYBOARD '{CTRL+W}'


USE suaTabela
BROWSE
ON KEY LABEL ENTER

Outro modo interessante, agora usando a função SYS(18), que retorna o campo em que se estava:
Código:
ON KEY LABEL ENTER do teste
USE clientes
BROWSE
ON KEY LABEL ENTER
RETURN

PROCEDURE teste
MESSAGEBOX("Campo selecionado :" + SYS(18))
KEYBOARD '{CTRL+W}'
ENDPROC

32-CONTROLAR SAÍDA DO BROWSE


Algumas pessoas ainda não estão totalmente acostumadas ao uso de Grids, então vai uma dica antiga, p

ON KEY LABEL ENTER KEYBOARD '{CTRL+W}'


USE suaTabela
BROWSE
ON KEY LABEL ENTER

Outro modo interessante, agora usando a função SYS(18), que retorna o campo em que se estava:
Código:
ON KEY LABEL ENTER do teste
USE clientes
BROWSE
ON KEY LABEL ENTER
RETURN

PROCEDURE teste
MESSAGEBOX("Campo selecionado :" + SYS(18))
KEYBOARD '{CTRL+W}'
ENDPROC

33-CONFIRMAÇÃO ANTES DE FECHAR O FORM


O evento QueryUnload é disparado ao se clicar no "X" para fechar um form. Para se evitar que

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 31/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
ele seja fechado, basta se colocar NODEFAULT, que o Form volta à execução normal.
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Para testar, coloque no evento QueryUnload do seu form :
Forum Bloger
Código:
IF MESSAGEBOX("Deseja encerrar ?",32+4,"Unload") <> 6 && Sim
NODEFAULT
ENDIF

35-IMPRIMIR ARQUIVO DIRETAMETE NA IMPRESSORA


DECLARE INTEGER ShellExecute IN SHELL32.DLL;
INTEGER nWinHandle,;
STRING cOperation,;
STRING cFileName,;
STRING cParameters,;
STRING cDirectory,;
INTEGER nShowWindow
ShellExecute(0, 'print', [MeuArquivo.xxx], '', '', 1)
Gerando txt
Close Databases
Set Safety Off
Create Table tabela( codigo c(10) , descricao c(40), preco N(10,2))
Select tabela && ** Gerando 1 TABELA com 15 registros.....
For i = 1 To 15
Insert Into tabela (codigo,descricao,preco) Values ( Alltrim(Str(i,6)), "Produto "+Str(i), i)
NEXT
BROWSE LAST NORMAL nodelete &&**MOSTRANDO OS DADOS
nomearq="Dados.txt"
arquivo = Fcreate(nomearq)
Select Tabela
Scan
conteudo = alltrim(tabela.codigo)+alltrim(tabela.descricao)
Fwrite(arquivo,conteudo+chr(13)+Chr(10))
Endscan
Fclose(arquivo)
RELEASE arquivo
CLOSE DATABASES
CLOSE all
MODIFY COMMAND dados.txt
ou
Close Tables AllIf Not Used('eventos')
Use eventos In 0 Alias eventos SharedEndifSelect eventos
Set Console Off
Set Notify Off
Set Safety Off
Set Alternate To testi.txt
Set Alternate On
gn=Fcount()
? 'Número de campos: ' + Alltrim(Str(gn -1))gnFieldcount = Afields(My) && Cria matrizFor N = 1 To gnF
?Scan? Alltrim(Str(codigo))+'|'+Alltrim(transport)+'|'+Alltrim(endereco)+Alltrim(endereco)Endscan?Set
Set Alternate Off
Set Console On
Modify Command testi.txt

38-b) APAGAR REGISTROS DUPLICADOS


CLEAR ALL
LOCAL wo
c = 0
d = 0
CLOSE DATABASES ALL
**TABELA IBGE CIDADE E UF
USE IBGE IN 0 ALIAS R1
SELECT R1
INDEX ON CIDADE to TEMP
GO TOP IN R1
DO WHILE ( Not Eof( "R1" ) )
wo= R1.CIDADE+R1.UF

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 32/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
SKIP IN R1
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
DO WHILE ( R1.CIDADE+R1.UF = wo And Not Eof( "R1" ) )
Forum Bloger
DELETE IN R1
c = c + 1
@05,10 say 'Registros Duplicados Apagados '+ str(c)
SKIP IN R1
ENDDO
d = d+1
@10,10 say 'Registros Lidos '+ str(d)
ENDDO
BROWSE NORMAL LAST

39-) Tira ascento


FUNCTION TiraAcento(tcStringInput)
*1) Indexe tirando o acento do campo. Ex.: TiraAcento(nm_empresa)
*2) Procure tirando, também, o acento da chave de pesquisa. Ex.: SEEK
*TiraAcento(lcNomedaEmpresa)
LOCAL lcStringFilterIn, lcStringFilterOut, lcStringOutput
lcStringFilterIn = "ÁÉÍÓÚáéíóúÀÈÌÒÙàèìòùÂÊÎÔÛâêîôûÄËÏÖÜäëïöüÃÕãõÇçÑñº"
lcStringFilterOut = "AEIOUaeiouAEIOUaeiouAEIOUaeiouAEIOUaeiouAOaoCcNno"
lcStringOutput = CHRTRAN(tcStringInput, lcStringFilterIn, lcStringFilterOut)
RETURN (lcStringOutput)
ENDFUNC
**
ou
LOCAL WFilterIn, WFilterOut, lcStringOut
CLOSE DATABASES
USE cepbrasil IN 0
SELECT cepbrasil
GO top
wende=ALLTRIM(cepbrasil.cidade)
DO WHILE !EOF()
WFilterIn = "ÁÉÍÓÚáéíóúÀÈÌÒÙàèìòùÂÊÎÔÛâêîôûÄËÏÖÜäëïöüÃÕãõÇçÑñº"
WFilterOut = "AEIOUaeiouAEIOUaeiouAEIOUaeiouAEIOUaeiouAOaoCcNno"
lcStringOut = CHRTRAN(WENDE, WFilterIn, WFilterOut)
replace cidade with UPPER(ALLTRIM(lcStringOut) )
lcStringOut =''
SKIP IN cepbrasil
wende=ALLTRIM(cepbrasil.cidade)
IF EOF()
EXIT
ENDIF
ENDDO
GO TOP
BROWSE LAST normal
**
ou
Close Databases
Select 0
Use cep_bras
Go Top
wcidade=cep_bras.cidade
Do While Not Eof()
cProcurarPor = "ÁÉÍÓÚáéíóúÀÈÌÒÙàèìòùÂÊÎÔÛâêîôûÄËÏÖÜäëïöüÃÕãõÇçÑñº"
cSubstituirPor = "AEIOUaeiouAEIOUaeiouAEIOUaeiouAEIOUaeiouAOaoCcNno"
wcidade = Chrtran(wcidade,cProcurarPor,cSubstituirPor)
Replace cidade With wcidade
Skip
wcidade=''
wcidade=cep_bras.cidade
If Eof()
Wait Window 'fim' Timeout 0.5
Exit
Endif
Enddo
Go Top
Browse last normal

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 33/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
39=) Converter numero em caracter sem perder o valor
Forum Bloger
wr=43170557096
y=Ferrari(wr)
WAIT WINDOW AT 25,35 y +1 TIMEOUT 2
FUNCTION Ferrari
parameters onumero
alltrim(str(onumero,100))
return(onumero)
***Funciton nomedela
Parameters nomeretorno
...Seu codigo
Return(nomeRetorno)
Endfunc
***Um exemplo
CLEAR
store 0 to A,B,C
DO PROCEDURE1 WITH A,B,C
? A+B+C
PROCEDURE PROCEDURE1
PARAMETERS A,B,C
A=90
B=90
C=90

41-a) Tabela corrompida


SET TABLEVALIDATE TO 0
USE tabela_corrompida EXCLUSIVE
COPY STRUCTURE TO manu_bk
USE manu_bk
APPEND FROM tabela_corrompida
USE IN manu_bk
USE tabela_corrompida EXCLUSIVE
ZAP
REINDEX COMPACT
APPEND FROM manu_bk
USE IN tabela_corrompida
***
Public oForm1
oForm1=newobject('Form1')
oForm1.show
return
define class Form1 as form
top = 0
left = 0
height = 177
width = 469
docreate = .T.
borderstyle = 2
caption = 'Teste '
windowtype = 1
name = 'FrmTeste'
add object Label0 as label with caption = 'codigo', height = 23, ;
left = 94, top = 56, width = 100, name = 'Label0'
add object TextBox1 as textbox with alignment = 1 , value = 0 , ;
height = 23, left = 233, top = 48, width = 100, name = 'TextBox1'
add object sair10 as commandbutton with top = 57, left = 339, ;
height = 23, width = 75, caption = 'Sair', name= 'Sair10'
PROCEDURE sair10.click()
IF 6=MESSAGEBOX("SAIR",+4+32,"QUER" )
close databases
THISFORM.RELEASE
ENDIF
endproc
Enddefine

42-) Impressora On line na rede


SET CONSOLE OFF

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 34/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
SET NOTIFY off
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
SET SAFETY OFF
Forum Bloger
APRINTERS(gaprinters, 1)CREATE CURSOR imprs (caminho c(50), porta c(50), nomeimp c(50), COMMEN c(50))
SELECT imprs
GO TOP*aqui o browse e so pra voce ver depos exluir alinha browse
BROWSE NORMAL NODELETE TITLE ' Sair'Declare Integer GetDefaultPrinter In winspool.drv String @pszBuff
nBufsize = 250
cPrinter = Replicate(Chr(0), nBufsize)
= GetDefaultPrinter(@cPrinter, @nBufsize)cPrinter = Substr(cPrinter, 1, At(Chr(0),cPrinter)-1)Select
Select impbuscaPublic impdefaut
impdefault = impbusca.nomeimp
MESSAGEBOX('a impressora padrao é:'+CHR(13)+impdefault,48,'aviso')
** primeira opcao
SET PRINTER TO NAME GETPRINTER()
**ou nomeservidornome da impressora
SET PRINTER TO NAME &impdefault
REPORT FORM nomedoseureport TO PRINTER console
**
**eject
l=0
SET CONSOLE OFF
SET ALTERNATE TO C:\temp\temp.txt
SET ALTERNATE ON
SET PRINTER TO &impressora
SET DEVICE TO PRINTER
SET PRINTER FONT 'DRAFT 10cpi',10
???CHR(27)+"C"+CHR(32)
@ l,1 say campo
l=l+2
@ l,1 say " "
EJECT
SET ALTERNATE OFF
SET ALTERNATE TO
SET PRINTER TO
SET DEVICE TO SCREEN
SET CONSOLE ON
***
sobre array
Para você criar um array:
Código:
DIMENSION LNEmpr[1]
Agora o array pode ser redimensionada ou criada após o seu SELECT
Código:
SELECT.....o seu código
DIMENSION LNEmpr[RECCOUNT()]
Use o comando FOR para o preenchimento da mesma.
Código:
FOR lnX = 1 to RECCOUNT()
LNEmpr[lnX]
NEXT
Código:
DIMENSION laTeste[1]
laTeste[1] = "Ops."
MESSAGEBOX(laTeste[1])
DIMENSION laTeste[4]
MESSAGEBOX(laTeste[1])
***
39-) exportar dbf para xls
CLOSE DATABASES all
SET SAFETY OFF
CREATE TABLE produto ( codigo n(6), grupo n(3), subgrupo n(3), descr c(30), preco n(10,2))
n=1
wdes='Produto '
FOR I = 1 TO 10
INSERT INTO produto values(n,n,n,wdes+STR(n),n)
n=n+1
NEXT
SELECT produto
copy to nomearq type xls
***ou
copy to nomearq2 type xl5
DECLARE INTEGER ShellExecute IN SHELL32.DLL INTEGER, STRING CDIR, STRING CFILE, ;
STRING , STRING, INTEGER
cArqDoc=getfile('xls','Selecione o arquivo','SelecionE')

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 35/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
If File(cArqDoc)
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
*p/ imprimr arq. "print" no lugar do Open,p/imprimir direto
Forum Bloger
*O Open serve para abrir o doc
ShellExecute(0, "Open", cArqDoc,"", Fullpath(""),0)
Else
Wait Window ' O arquivo nao esta na pasta!! ' Timeout 2
Endif
****
*ou simplesmente
use suatabela
copy to nomearq type xls
ou
copy to nomearq type xl5
**O processo inverso importar xls para um tabela ou cursor
CLOSE DATABASES all
*Então você cria 1 cursor temporario correspondente a tabela, por exemplo,
CREATE TABLE cursorprod ( codigo n(6), grupo n(3), subgrupo n(3), descr c(30), preco n(10,2))
*Agora para puxar os dados do arquivo XLS para dentro desta tabela temporária que criamos:
sele cursorProd
append from nomearq.xls TYPE XLS && xl5 para o nomearq2
BROWSE**
Baixe o arquivo com os fontes
***
Agora codigo para pegar memo no arquivo e transforma em Excel
******
Create Cursor test (mField m)
m.mField = '1234567' + Chr(13) + 'Erik Gomez' + Chr(13)+;
'Memo to Excel'
Insert Into test From Memvar
lnLine = Alines(laMemo,test.mField,.T.)
loExcel = Createobject('Excel.Application')
loWrkBk = loExcel.Workbooks.Add
loWrkSheet = loWrkBk.Worksheets(1)
For lnX = 1 To lnLine
lcCell = 'A' + Alltrim(Str(lnX))
loWrkSheet.Range(lcCell) = laMemo[lnX]
Next
loWrkBk.SaveAs('c:\PEDRO\MOTO\test.xls')
loWrkBk.Close
loExcel.Quit
loWrkSheet = .Null.
loWrkBk = .Null.
loExcel = .Null.fonte
http://www.foxite.com/archives/can-i-export-memo-fields-content-to-excel-0000021258.htm
ou
CLOSE DATABASES all
SET SAFETY OFF && Gero o Cursor TEst e insero 10 registros
Create Cursor test (registro c(4), desenho c(4), nomes c(15),mField m)
m.mField = '1234567' + Chr(13) + 'Erik Gomez' + Chr(13)+'Memo to Excel'
FOR i = 1 TO 10
Insert Into test values(STR(i,4),STR(i,4),'Firma '+STR(i,4), m.mField)
NEXT
SELECT registro, desenho,Nomes, Left(ALLTRIM(mfield),120) as OBS FROM test INTO CURSOR auxcli
*Path \pedro\moto mude para o seu path
copy to c:\pedro\moto\infocli.xls type xl5
***aqui vou abrir o excel para pegar sua planilha, infocli.xls
DECLARE INTEGER ShellExecute IN SHELL32.DLL INTEGER, STRING CDIR, STRING CFILE, ;
STRING , STRING, INTEGER
cArqDoc=getfile('xls','Escolha Xls','Selecione')
If File(cArqDoc)
*p/ imprimr arq. "print" no lugar do open,p/imprimir direto
ShellExecute(0, "Open", cArqDoc,"", Fullpath(""),0)
Else
Wait Window ' O arquivo nao esta na pasta!! ' Timeout 2
Endif
**
ou
CLOSE DATABASES all
SET SAFETY OFF && Gero o Cursor TEst e insero 10 registros
Create Cursor test (registro c(4), desenho c(4), nomes c(15),mField m)
m.mField = '1234567' + Chr(13) + 'Erik Gomez' + Chr(13)+'Memo to Excel'
FOR i = 1 TO 10
Insert Into test values(STR(i,4),STR(i,4),'Firma '+STR(i,4), m.mField)
NEXT

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 36/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
SELECT registro,desenho,Nomes, Left(RTRIM(mfield),120) as OBS FROM test INTO CURSOR auxcli
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
*** BROWSE normal && Gerei o cursor auxcli ,,,,,,para pegar obs.
Forum Bloger
m.contador=1
WAIT WINDOW 'Gerando Planilha e Abrindo o Exce l' NOWAIT
tmpsheet = GETOBJECT('','excel.sheet')
xlapp = tmpsheet.APPLICATION
xlapp.VISIBLE = .T.
xlapp.workbooks.ADD()
xlsheet = xlapp.activesheet
***nome das celulas
xlsheet.cells(1,1).VALUE = "Registro"
xlsheet.cells(1,2).VALUE = "Desenho"
xlsheet.cells(1,3).VALUE = "Clientes"
xlsheet.cells(1,4).VALUE = "OBS"
SCAN
xlsheet.cells(M.contador+1,1).VALUE=auxcli.registro
xlsheet.cells(M.contador+1,2).VALUE=auxcli.desenho
xlsheet.cells(M.contador+1,3).VALUE=auxcli.nomes
xlsheet.cells(M.contador+1,4).VALUE=auxcli.obs
m.contador=M.contador+1
ENDSCAN
WAIT WINDOW 'Veja a Barra de Tarefas Windows Excel aberto ' TIMEOUT 2
WAIT CLEAR

codigo COM INSTRUCAO Select


Esse exemplo seleciona os campos "Sobrenome" e "Nome" de todos os registros da tabela "Funcionários".
SELECT Sobrenome, Nome FROM Funcionários
Esse exemplo seleciona todos os campos da tabela "Funcionários".
SELECT Funcionários.* FROM Funcionários;
Esse exemplo conta o número de registros que têm uma entrada no campo "CódigoPostal" e nomeia o campo
SELECT Count(CódigoPostal) AS Tcp FROM Clientes;
Esse exemplo mostra qual seria o salário se cada funcionário recebesse um aumento de 10 porcento. Não
SELECT Sobrenome, Salário AS Atual, Salário * 1.1 AS Proposto FROM Funcionários;
Esse exemplo coloca o título Nome no topo da coluna "Sobrenome". O título Salário é exibido no topo d
SELECT Sobrenome AS Nome, Salário FROM Funcionários;
Esse exemplo mostra o número de funcionários e os salários médio e máximo.
SELECT Count(*) AS [Total de Funcionários], Avg(Salário) AS [Salário Médio], Max(Salário) AS [Salário
Para cada registro, mostra Sobrenome e Salário no primeiro e último campos. A seqüência de caracteres
SELECT Sobrenome, 'tem um salário de', Salário FROM Funcionários;
Exemplo de cláusula GROUP BY
SELECT cliente, SUM(pe_valor) as soma FROM receber GROUP BY receber.cliente ORDER BY cliente INTO C
e com soma com data e cliente ficaria
SELECT pe_data, cliente, SUM(pe_valor) as soma FROM receber GROUP BY receber.cliente,pe_data ORDER B
Esse exemplo cria uma lista de nomes de departamentos únicos e o número de funcionários em cada um de
SELECT Departamento, Count([Departamento]) AS Tbc FROM Funcionários
GROUP BY Departamento;
SELECT Country, AVG(Inv_Total)
FROM Invoices GROUP BY Country
Para cada título de função único, calcula o número de funcionários do departamento de Vendas que têm
SELECT Título, Count(Título) AS Tbc FROM Funcionários
WHERE Departamento = 'Vendas' GROUP BY Título;
Esse exemplo calcula o número de itens em estoque para cada combinação de número e cor do item.
SELECT Item, Sum(Unidades) AS Tbc FROM ItensEmEstoque
GROUP BY Item, Cor;
Exemplo de cláusula HAVING
Esse exemplo seleciona os títulos de cargos do departamento de Produção atribuídos a mais de 50 funci
SELECT Título, Count(Título) FROM Funcionários WHERE Departamento = 'Produção'
GROUP BY Título HAVING Count(Título) > 50;
Esse exemplo seleciona os departamentos que tenham mais de 100 funcionários.
SELECT Departamento, Count([Departamento]) FROM Funcionários
GROUP BY Departamento HAVING Count(Departamento) > 100;
Exemplo de cláusula ORDER BY
As instruções SQL mostradas abaixo usam a cláusula ORDER BY para classificar os registros em ordem al
Esse exemplo ordena os registros pelo sobrenome, em ordem descendente (Z-A).
SELECT Sobrenome, Nome FROM Funcionários ORDER BY Sobrenome DESC;
Esse exemplo ordena, primeiro, por categoria ID e depois por nome do produto.
SELECT CategoriaID, ProdutoNome, PreçoUnit FROM Produtos
ORDER BY CategoriaID, NomeProduto;
INSERT INTO destino [IN bancodedadosexterno] [(campo1[, campo2[, ...]])]

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 37/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
SELECT [origem.]campo1[, campo2[, ...]
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
FROM expressãodetabela
Forum Bloger
Consulta anexação de um único registro:
INSERT INTO destino [(campo1[, campo2[, ...]])]
VALUES (valor1[, valor2[, ...])
A instrução INSERT INTO tem as partes abaixo:
Parte Descrição
destino O nome da tabela ou consulta em que os registros devem ser anexados.
bancodedadosexterno O caminho para um banco de dados externo. Para uma descrição do
caminho, consulte a cláusula IN.
origem O nome da tabela ou consulta de onde os dados devem ser copiados.
campo1, campo2 Os nomes dos campos aos quais os dados devem ser anexados, se
estiverem após um argumento destino ou os nomes dos campos dos quais
se deve obter os dados, se estiverem após um argumento origem.
expressãodetabela O nome da tabela ou tabelas das quais registros são inseridos. Este
argumento pode ser um único nome de tabela ou uma combinação
resultante de uma operação INNER JOIN, LEFT JOIN ou RIGHT JOIN
Select cod,hr_inicio, hr_final,ctg_cod,ctg_data From Horas, Cadctpg WHERE cod=ctg_cod INTO CURSOR tes
ou de uma consulta gravada.
valor1, valor2 Os valores para inserir em campos específicos do novo registro. Cada valor
é inserido no campo que corresponde à posição do valor na lista: Valor1 é
inserido no campo1 do novo registro, valor2 no campo2 e assim por
diante. Você deve separar os valores com uma vírgula e colocar os
campos de textos entre aspas (" ").
Declaração UPDATE
Cria uma consulta atualização que altera os valores dos campos em uma tabela especificada com base em
Sintaxe
UPDATE tabela
SET valornovo
WHERE critério;
A instrução UPDATE tem as partes abaixo:
Parte Descrição
tabela O nome da tabela cujos os dados você quer modificar.
valornovo Uma expressão que determina o valor a ser inserido em um campo específico nos
registros atualizados.
critério Uma expressão que determina quais registros devem ser atualizados. Só os registros
que satisfazem a expressão são atualizados.
Comentários
UPDATE é especialmente útil quando você quer alterar registros ou quando os registros que você quer
UPDATE Pedidos SET ValorPedido = ValorPedido * 1.1, Frete = Frete * 1.03
WHERE PaísEmbarque = 'RU';
UPDATE não gera um conjunto de resultados. Se você quiser saber quais resultados serão alterados, exa
Exemplo de instrução UPDATE
Esse exemplo muda os valores no campo "RelatórioPara" para 5 para todos os registros de funcionários
UPDATE Funcionários SET RelatórioPara = 5 WHERE RelatórioPara = 2;
Esse exemplo aumenta o "PreçoUnit" de todos os produtos não suspensos do fornecedor 8 em 10 porcento.
UPDATE Produtos SET PreçoUnit = PreçoUnit * 1.1
WHERE FornecedorID = 8 AND Suspenso = No;
Amarzenando todos os dados de uma tabela num cursor, para leitura:
Código:SELECT * FROM nomeTabela INTO CURSOR nomeCursor
- Amarzenando todos os dados de uma tabela num cursor, para escrita:
Código:SELECT * FROM nomeTabela INTO CURSOR nomeCursor READWRITE
- Amarzenando alguns os dados de uma tabela num cursor, para leitura:
Código:SELECT campo1, campo2, campo3 FROM nomeTabela INTO CURSOR nomeCursor
- Amarzenando alguns os dados de uma tabela num cursor, para escrita:
Código:SELECT campo1, campo2, campo3 FROM nomeTabela INTO CURSOR nomeCursor READWRITE- No caso de tab
Código:SELECT TOP 100 campo1, campo2 FROM nomeTabela

Busca entre as duas tabelas, o campo RE que tem uma tabela, e que não tem na outra
sele a.re,a.nome from cadfunc a where a.re not in (select b.re from cadvt b)
Select RE from TABELA1 where RE not in (select RE from TABELA2) ****CodigoClose Databases
Set Safety Off
Create Table teste1( codigo c(10) , descricao c(40), preco N(10,2))
wcod =1
wdesc ='Produto '
valor =1
Select teste1
*** Gerando 1 arquivo com 15000 registros.....
For i = 1 To 15000

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 38/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
Insert Into teste1 (codigo,descricao,preco) Values ( Alltrim(Str(wcod,6)), wdesc+Str(wcod), valor)
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
wcod=wcod+1
Forum Bloger
valor=valor+1
Next
Use In teste1 && fechei o arquivo
*******
Create Table propdv( codpro c(10) , despro c(40), prepro N(10,2))
** Inserindo 15 mil registro de uma vez, so no arq. Propdv
Insert into propdv (codpro, despro, prepro) select codigo, descricao, preco FROM teste1
BROWSE normal
USE IN teste1
**Fazendo agora de outra forma com o comando scan se o registro for maior ke 14500
Create Table propdv( codpro c(10) , despro c(40), prepro N(10,2))
Sele 1
Use teste1
Go Top
If Not Eof()
Scan
Store codigo To cod
Store descricao To des
Store preco To pre
IF RECNO() >=14500
Insert Into propdv (codpro,despro,prepro) Values (cod,des,pre)
endif
ENDSCAN
Else
Wait Window 'nao tem registros para esta operacao' Timeout 1
Endif
Select propdv
BROWSE normal
USE IN propdv**Configuracao do seu video 800x 600 no vfp
veja como configurar no pRG .PRG PRINCIPAL NO seu projeto na aba code
no seu programa start na aba code do seu prrojeto
apos esta linha
codigo
***
IF SYSMETRIC(1) = 800 AND SYSMETRIC(2) = 600
_screen.WindowState = 2
WAIT WINDOW 'sua Resolucao de video é 800 x 600' time 1
ENDIF
IF SYSMETRIC(1) = 1024 AND SYSMETRIC(2) = 768
_screen.WindowState = 2
WAIT WINDOW AT 20,45 'Sua Resolucao de video é 1024 x 768'
ENDIF
IF SYSMETRIC(1) = 1280 AND SYSMETRIC(2) = 800
_screen.WindowState = 2
WAIT WINDOW AT 25,25 'A Resolucao de video é 1280 x 800'
ENDIFou
codigo
DO case
CASE SYSMETRIC(1)=800 AND SYSMETRIC(2)=600
_screen.WindowState = 2
WAIT WINDOW 'sua Resolucao de video é 800 x 600' time 1
CASE SYSMETRIC(1)=1024 AND SYSMETRIC(2)=768
_screen.WindowState = 2
WAIT WINDOW AT 20,45 'Sua Resolucao de video é 1024 x 768'
CASE SYSMETRIC(1)=1280 AND SYSMETRIC(2)=800
_screen.WindowState = 2
WAIT WINDOW AT 25,25 'A Resolucao de video é 1280 x 800'
ENDDO
*
on shutdow quit

99**dbf em html
CLOSE ALL
IF NOT FILE('FMOVEN.DBF')
CREATE TABLE FMOVEN(NNOTA C(6),OBS C(20), FORNEC C(45), VALOR N(12,2),EMISSAO D(8),VALOR1 C(14))
INSERT INTO FMOVEN VALUES('000001','SEM MOVIMENTO','EMPRESA TESTE 1',520,DATE(),'520,00' )
INSERT INTO FMOVEN VALUES('000001','SEM MOVIMENTO','EMPRESA TESTE 2',520.12,DATE(),'510,12' )
INSERT INTO FMOVEN VALUES('000001','SEM MOVIMENTO','EMPRESA TESTE 2',2510.12,DATE(),'2.510,12' )
use
ENDIF

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 39/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
SELECT 0
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
USE fmoven Shared
Forum Bloger
***Crio a tabela com o valor e caracter
CREATE TABLE teste(NNOTA C(6),OBS C(20), FORNEC C(45), VALOR c(14),EMISSAO D(8))
SELECT teste && na linha abaixo pego fmoven insiro na tabela, teste com o valor em caracter
INSERT INTO teste (nnota,obs,fornec,valor,emissao) SELECT nnota,obs,fornec,TRansform(valor,'99,999,99
SELECT teste
go top
SET POINT TO ","
SET DATE FRENCH
SET CENTURY ON
SET DECIMALS TO 2
SET SYSFORMATS ON
LOCAL obj AS OBJECT
LOCAL arquivo AS STRING
m.obj = NEWOBJECT("datatohtml")
m.arquivo = m.obj.tabletohtml("teste")
m.obj.shell_exec(m.arquivo)
m.obj = NULL
USE IN SELECT("teste")
***********
DEFINE CLASS datatohtml AS CUSTOM
*!* Converte um SELECT para HTML
FUNCTION selecttohtml AS STRING
LPARAMETERS cselect AS STRING, caminhoarquivo AS STRING
*!*
LOCAL cabecalho AS STRING
LOCAL rodapeh AS STRING
LOCAL conteudo AS STRING
LOCAL nometabela AS STRING
LOCAL totalcampos AS INTEGER
LOCAL contador AS INTEGER
LOCAL nomecursor AS STRING
LOCAL nomecoluna AS STRING
LOCAL cor AS STRING
*!*
IF (VARTYPE(m.cselect)!="C") THEN
RETURN ""
ENDIF
*!* Caminho onde o arquivo será armazenado (Informar a extensão do arquivo!)
IF (VARTYPE(m.caminhoarquivo)!="C") THEN
m.caminhoarquivo = SYS(5)+CURDIR() + SYS(2015)+".html"
ENDIF
*!*
m.nometabela = ALLTRIM(GETWORDNUM(STREXTRACT(UPPER(cselect),"FROM"),1))
m.nomecursor = SYS(2015)
*!*
IF !USED(m.nometabela) THEN
RETURN ""
ENDIF
*!*
m.cabecalho = ""
m.rodapeh = "
"
m.totalcampos = FCOUNT(m.nometabela)
m.conteudo = ""
*!*
m.conteudo = m.conteudo + ""
FOR m.contador=1 TO m.totalcampos
m.conteudo = m.conteudo + []+FIELD(m.contador)+""
ENDFOR
m.conteudo = m.conteudo + ""
*!*
EXECscript(m.cselect+" INTO CURSOR "+m.nomecursor)
*!*
IF (RECCOUNT(m.nomecursor)>0) THEN
SELECT(m.nomecursor)
SCAN
IF (RECNO()%2!=0) THEN
m.cor = "#EAF1FF"
ELSE
m.cor = "#DFEAFF"
ENDIF
m.conteudo = m.conteudo + ""

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 40/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
FOR m.contador=1 TO m.totalcampos
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
m.nomecoluna = FIELD(m.contador)
Forum Bloger
m.conteudo = m.conteudo + []+TRANSFORM(&nomecoluna)+""
ENDFOR
m.conteudo = m.conteudo + ""
WAIT WINDOW M.CONTEUDO TIMEOUT 1
ENDSCAN
ENDIF
WAIT WINDOW M.CONTEUDO TIMEOUT 1
WAIT WINDOW M.nometabela
*!*
USE IN SELECT(m.nomecursor)
*!*
STRTOFILE(m.cabecalho + m.conteudo + m.rodapeh,m.caminhoarquivo)
RETURN m.caminhoarquivo
ENDFUNC
*!* Converte dados de um cursor para HTML
FUNCTION tabletohtml AS STRING
LPARAMETERS nomeTabela AS STRING, caminhoarquivo AS STRING
*!*
LOCAL cabecalho AS STRING
LOCAL rodapeh AS STRING
LOCAL conteudo AS STRING
LOCAL totalcampos AS INTEGER
LOCAL contador AS INTEGER
LOCAL nomecoluna AS STRING
LOCAL cor AS STRING
*!*
IF (VARTYPE(m.nomeTabela)!="C") THEN
RETURN ""
ENDIF
*!* Caminho onde o arquivo será armazenado (Informar a extensão do arquivo!)
IF (VARTYPE(m.caminhoarquivo)!="C") THEN
m.caminhoarquivo = SYS(5)+CURDIR() + SYS(2015)+".html"
ENDIF
*!*
IF !USED(m.nometabela) THEN
RETURN ""
ENDIF
*!*
m.cabecalho = ""
m.rodapeh = "
"
m.totalcampos = FCOUNT(m.nometabela)
m.conteudo = ""
*!*
m.conteudo = m.conteudo + ""
FOR m.contador=1 TO m.totalcampos
m.conteudo = m.conteudo + []+FIELD(m.contador)+""
ENDFOR
m.conteudo = m.conteudo + ""
*!*
IF (RECCOUNT(m.nomeTabela)>0) THEN
SELECT(m.nomeTabela)
SCAN
IF (RECNO()%2!=0) THEN
m.cor = "#EAF1FF"
ELSE
m.cor = "#DFEAFF"
ENDIF
m.conteudo = m.conteudo + ""
FOR m.contador=1 TO m.totalcampos
m.nomecoluna = FIELD(m.contador)
m.conteudo = m.conteudo + []+TRANSFORM(&nomecoluna)+""
ENDFOR
m.conteudo = m.conteudo + ""
ENDSCAN
ENDIF
*!*
STRTOFILE(m.cabecalho + m.conteudo + m.rodapeh,m.caminhoarquivo)
RETURN m.caminhoarquivo
ENDFUNC
*!* Abre o arquivo
FUNCTION shell_exec

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 41/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
LPARAMETERS lclink, lcaction, lcparms, lcdir, nshowwindow
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
IF (VARTYPE(m.lclink)!="C") THEN
Forum Bloger
RETURN -1
ENDIF
DECLARE INTEGER FindWindow IN WIN32API AS WGFindWindow STRING, STRING
DECLARE INTEGER ShellExecute IN SHELL32.DLL AS WGShellExecute ;
INTEGER, STRING, STRING, STRING, STRING, INTEGER
m.lcaction = IIF(EMPTY(lcaction), "Open", lcaction)
m.lcparms = IIF(EMPTY(lcparms), "", lcparms)
m.lcdir = IIF(EMPTY(lcdir), "", lcdir)
m.nshowwindow = IIF(VARTYPE(m.nshowwindow) == "N", m.nshowwindow, 1)
RETURN wgshellexecute(wgfindwindow(0, _SCREEN.CAPTION), ;
@lcaction, @lclink, ;
@lcparms, @lcdir, ;
m.nshowwindow)
ENDFUNC
ENDDEFINE && fim do html

40_a) Valor por Extenso


Set Safety Off
=valor_extenso(2452.34)
wre=valor_extenso(2452.34)
Create Cursor Tabla1 (Txt C(78))
Insert Into Tabla1 Values ("RECIBO ")
Insert Into Tabla1 Values ("======== ")
Insert Into Tabla1 Values ("Valor R$ 2,452.34")
Insert Into Tabla1 Values (wre)
Insert Into Tabla1 Values ("Recebemos de Joao Grana, a importancia acima cidtada,ref.serv.prestados "
Insert Into Tabla1 Values ("Sao Paulo, 31/2/2010 ")
Insert Into Tabla1 Values (" ")
Insert Into Tabla1 Values ("======== ")
Create Report Reporte1 From Tabla1
Report Form Reporte1 Preview Nowait
FUNCTION valor_extenso
lPARAMETERS pvalor
local vextenso, flagbilhao, flagmilhao,flagcentavos
DIMENSION unidade[10], dez[10], dezena[10], centena[11]
STORE .F. TO flagbilhao,flagmilhao,flagcentavos
unidade[1] = ""
unidade[2] = "Um "
unidade[3] = "Dois "
unidade[4] = "Três "
unidade[5] = "Quatro "
unidade[6] = "Cinco "
unidade[7] = "Seis "
unidade[8] = "Sete "
unidade[9] = "Oito "
unidade[10] = "Nove "
dez[1] = "Dez "
dez[2] = "Onze "
dez[3] = "Doze "
dez[4] = "Treze "
dez[5] = "Quatorze "
dez[6] = "Quinze "
dez[7] = "Dezesseis "
dez[8] = "Dezessete "
dez[9] = "Dezoito "
dez[10] = "Dezenove "
dezena[1] = ""
dezena[2] = "Dez "
dezena[3] = "Vinte "
dezena[4] = "Trinta "
dezena[5] = "Quarenta "
dezena[6] = "Cinqüenta "
dezena[7] = "Sessenta "
dezena[8] = "Setenta "
dezena[9] = "Oitenta "
dezena[10] = "Noventa "
centena[1] = ""
centena[2] = "Cento "

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 42/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
centena[3] = "Duzentos "
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
centena[4] = "Trezentos "
Forum Bloger
centena[5] = "Quatrocentos "
centena[6] = "Quinhentos "
centena[7] = "Seiscentos "
centena[8] = "Setecentos "
centena[9] = "Oitocentos "
centena[10] = "Novecentos "
centena[11] = "Cem "
valorstr = STR(INT(pvalor * 100),14,0)
vextenso = " "
FOR i=1 TO 14
IF SUBSTR(valorstr,i,1) != " "
num = VAL(SUBSTR(valorstr,i,1))
DO CASE
* --- Bilhao
CASE i = 1
IF num = 1 .AND. VAL(SUBSTR(valorstr,i+1,2)) = 0
vextenso = centena[11]
ELSE
vextenso = centena[Num+1] + IIF(SUBSTR(valorstr,i+1,2) = "00" OR num=0, "", "e ")
ENDIF
flagbilhao = .T.
CASE i = 2
IF num != 1
vextenso = vextenso + dezena[Num+1] + IIF(SUBSTR(valorstr,i+1,1) = "0" .OR. num=0, "", "e ")
flagbilhao = .T.
ELSE
i=i+1
num = VAL(SUBSTR(valorstr,i,1))
vextenso = vextenso + dez[Num+1] + "Bilhões" + IIF(VAL(SUBSTR(valorstr,4))>0,", "," ")
ENDIF
CASE i = 3
IF !(flagbilhao)
flagbilhao = IIF(num>1,.T.,.F.)
ENDIF
vextenso = vextenso + unidade[Num+1] + IIF(flagbilhao,"Bilhões","Bilhão") + IIF(VAL(SUBSTR(valorstr,4
*---- Milhao
CASE i = 4
IF num = 1 .AND. VAL(SUBSTR(valorstr,i+1,2)) = 0
vextenso = vextenso + centena[11]
ELSE
vextenso = vextenso + centena[Num+1] + IIF(SUBSTR(valorstr,i+1,2) = "00" OR num=0, "", "e ")
ENDIF
flagmilhao = .T.
CASE i = 5
IF num != 1
vextenso = vextenso + dezena[Num+1] + IIF(SUBSTR(valorstr,i+1,1) = "0" .OR. num=0, "", "e ")
flagmilhao = .T.
ELSE
i=i+1
num = VAL(SUBSTR(valorstr,i,1))
vextenso = vextenso + dez[Num+1] + "Milhões" + IIF(VAL(SUBSTR(valorstr,7))>0,", "," ")
ENDIF
CASE i = 6
IF !(flagmilhao)
flagmilhao = IIF(num>1,.T.,.F.)
ENDIF
vextenso = vextenso + unidade[Num+1] + IIF(flagmilhao,"Milhões","Milhão") + IIF(VAL(SUBSTR(valorstr,7
*--- MILHAR
CASE i = 7
IF num = 1 .AND. VAL(SUBSTR(valorstr,i+1,2)) = 0
vextenso = vextenso + centena[11]
ELSE
vextenso = vextenso + centena[Num+1] + IIF(SUBSTR(valorstr,i+1,2) = "00" OR num=0, "", "e ")
ENDIF
CASE i = 8
IF num != 1
vextenso = vextenso + dezena[Num+1] + IIF(SUBSTR(valorstr,i+1,1) = "0" .OR. num=0, "", "e ")
ELSE
i=i+1
num = VAL(SUBSTR(valorstr,i,1))
vextenso = vextenso + dez[Num+1] + "Mil" + IIF(VAL(SUBSTR(valorstr,10))>0,", "," ")
ENDIF

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 43/47
12/01/2021 VFP Brasil: Dicas e Truques VFP
CASE i = 9
Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
vextenso = vextenso + unidade[Num+1] + "Mil" + IIF(VAL(SUBSTR(valorstr,10))>0,", "," ")
Forum Bloger
*--- Reais
CASE i = 10
IF num = 1 .AND. VAL(SUBSTR(valorstr,i+1,2)) = 0
vextenso = vextenso + centena[11]
ELSE
vextenso = vextenso + centena[Num+1] + IIF(SUBSTR(valorstr,i+1,2) = "00" OR num=0, "", "e ")
ENDIF
CASE i = 11
IF num != 1
vextenso = vextenso + dezena[Num+1] + IIF(SUBSTR(valorstr,i+1,1) = "0" .OR. num=0, "", "e ")
ELSE
i=i+1
num = VAL(SUBSTR(valorstr,i,1))
vextenso = vextenso + dez[Num+1] + "Reais" + IIF(VAL(SUBSTR(valorstr,13))>0," e "," ")
ENDIF
CASE i = 12
vextenso=vextenso+unidade[Num+1]+ IIF(EMPTY(vextenso) AND num=1,"Real","Reais") +IIF(VAL(SUBSTR(valor
*---- CENTAVOS
CASE i = 13
IF num != 1
vextenso = vextenso + dezena[Num+1]
flagcentavos = IIF(num>1,.T.,.F.)
ELSE
i=i+1
num = VAL(SUBSTR(valorstr,i,1))
vextenso = vextenso + dez[Num+1] + "Centavos"
flagcentavos = .T.
ENDIF
CASE i = 14
IF !(flagcentavos)
flagcentavos = IIF(num>1,.T.,.F.)
ENDIF
IF flagcentavos
vextenso = vextenso + unidade[Num+1] + IIF(flagcentavos,"Centavos","")
ELSE
IF num>0
vextenso = vextenso + unidade[Num+1] + "Centavo"
ENDIF
ENDIF
ENDCASE
ENDIF
ENDFOR
WAIT WINDOW 'vc digitou 2452.34 '+ALLTRIM(vextenso) TIMEOUT 0.2
RETURN ALLTRIM(vextenso)
**
39=) Converter numero em caracter sem perder o valor
wr=43170557096
y=Ferrari(wr)
WAIT WINDOW AT 25,35 y +1 TIMEOUT 2
FUNCTION Ferrari
parameters onumero
alltrim(str(onumero,100))
return(onumero)
***Funciton nomedela
Parameters nomeretorno
...Seu codigo
Return(nomeRetorno)
Endfunc
***Um exemplo
CLEAR
store 0 to A,B,C
DO PROCEDURE1 WITH A,B,C
? A+B+C
PROCEDURE PROCEDURE1
PARAMETERS A,B,C
A=90
B=90
C=90

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 44/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

* Impressão da Dicas
Apostila nota de vendaVideos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
Forum Bloger
* Mini cupom

*---------------------------------

SET DEVICE TO PRINT

DATA = DTOC(DATE())

TEMPO = TIME()

LETRA = "TIMES NEW ROMAM"

TAM = 8

@ PROW()+1, 01 SAY REPLICATE("-",70) FONT LETRA,TAM STYLE "T"

@ PROW()+1, 13 SAY "S E M V A L O R F I S C A L" FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY REPLICATE("-",70) FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY VFIRMA FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY ALLTRIM(VENDE_FIRMA) FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY ALLTRIM(VCID_FIRMA) + " Cep:" + VCEP_FIRMA + " - " + "Brasil" FONT LETRA,TAM
STYLE "T"

@ PROW()+1, 01 SAY "Atendente:" + NOME_VEND FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY "Mesa:" + STR(COD_MESA) FONT LETRA,TAM STYLE "T"

@ PROW() , 26 SAY "Nº Comanda: " + NR_VENDA FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY REPLICATE("-",70) FONT LETRA,TAM STYLE "T"

@ PROW()+1, 13 SAY "C U P O M C O N S U M O" FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY REPLICATE("-",70) FONT LETRA,TAM STYLE "T"

@ PROW()+1, 01 SAY "Descrição do Produto Qtd´s R$ Unit Total Item" FONT LETRA,7 STYLE "T"

@ PROW()+1, 01 SAY REPLICATE("-",70) FONT LETRA,TAM STYLE "T"

DO WHILE .NOT. EOF()

@ PROW()+1,01 SAY DES_PRODU PICTURE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" FONT LETRA,6 STYLE "T"

@ PROW() ,27 SAY QTD PICTURE "99.99" FONT LETRA,6 STYLE "T"

@ PROW() ,34 SAY PRECO_VEND PICTURE "999.99" FONT LETRA,6 STYLE "T"

@ PROW() ,43 SAY TOTAL_ITEM PICTURE "999.99" FONT LETRA,6 STYLE "T"

SKIP

IF EOF()

@ PROW()+1,01 SAY REPLICATE("-",70) FONT LETRA,TAM STYLE "T"

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 45/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
* Forum Bloger

IF VCOD_PGTO_1 <> 0.00

@ PROW()+1,01 SAY VDES_PGTO_1 FONT LETRA,TAM STYLE "T"

@ PROW() ,15 SAY VVLR_PGTO_1 PICTURE "999.99" FONT LETRA,TAM STYLE "T"

ENDIF

@ PROW() ,28 SAY "Consumo:" FONT LETRA,TAM STYLE "T"

@ PROW() ,43 SAY VTOT_VENDA PICTURE "999.99" FONT LETRA,TAM STYLE "T"

IF VCOD_PGTO_2 <> 0.00

@ PROW()+1,01 SAY VDES_PGTO_2 FONT LETRA,TAM STYLE "T"

@ PROW() ,15 SAY VVLR_PGTO_2 PICTURE "999.99" FONT LETRA,TAM STYLE "T"

@ PROW() ,28 SAY "Total Serviços" FONT LETRA,TAM STYLE "T"

@ PROW() ,43 SAY VTOT_SERVI PICTURE "999.99" FONT LETRA,TAM STYLE "T"

ELSE

@ PROW()+1,28 SAY "Total Serviços" FONT LETRA,TAM STYLE "T"

@ PROW() ,43 SAY VTOT_SERVI PICTURE "999.99" FONT LETRA,TAM STYLE "T"

ENDIF

IF VCOD_PGTO_3 <> 0.00

@ PROW()+1,01 SAY VDES_PGTO_3 FONT LETRA,TAM STYLE "T"

@ PROW() ,15 SAY VVLR_PGTO_3 PICTURE "999.99" FONT LETRA,TAM STYLE "T"

@ PROW() ,28 SAY "Total Geral:" FONT LETRA,TAM STYLE "T"

@ PROW() ,43 SAY VTOT_GERAL PICTURE "999.99" FONT LETRA,TAM STYLE "T"

ELSE

@ PROW()+1,28 SAY "Total Geral:" FONT LETRA,TAM STYLE "T"

@ PROW() ,43 SAY VTOT_GERAL PICTURE "999.99" FONT LETRA,TAM STYLE "T"

ENDIF

@ PROW()+2,01 SAY REPLICATE("-",70) FONT LETRA,TAM STYLE "T"

@ PROW()+1,12 SAY "OBRIGADO E VOLTE SEMPRE" FONT LETRA,TAM STYLE "T"

EXIT

ENDIF

ENDDO

SET PRINTER OFF

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 46/47
12/01/2021 VFP Brasil: Dicas e Truques VFP

Apostila Dicas Videos Codigos Musica Suave Nacional Traduzidas +Video +Musicas
SET PRINTER TO Forum Bloger

SET DEVICE TO SCREEN

Postado por Alceu11 Visual Fox Pro às 06:47

4 comentários:

Nayrob Santana 6 de abril de 2020 20:02


Excelente. Ainda há muito programa por ai rodando em VFP vamos manter este site vivo
Responder

Unknown 3 de maio de 2020 19:10


Vamos incluir mais coisas ai. VFP VIVE
Responder

Unknown 22 de maio de 2020 11:23


FoxPro na arteria
Responder

Alexandre Braga 26 de maio de 2020 12:43


Sim, tb ainda uso muito, VFP9, estou precisando gerar arquivo pdf com senha, pq agora estamos enviando por email,
alguem tem um solucao.
Responder

Digite seu comentário...

Comentar como: JRGA (Google Sair

Publicar Visualizar Notifique-me

Página inicial Postagem mais antiga

Assinar: Postar comentários (Atom)

Tema Simples. Tecnologia do Blogger.

alceu11.blogspot.com/2016/05/dicas-e-truques-vfp.html 47/47

Você também pode gostar