regsvr32 C:\WINDOWS\system32\activevfp.dll
01-a FLOCK bloquear registro para gravar o registro em Rede
*
vobina=.t.
Do while vobina
if flock()
update tabela set campos where condicao
unlock all
wobina=.f.
exit
endif
Enddo
Video vfp 10 64 bits instalacao link da instalcao
vfp 9 portable
soma quinzenal group by cliente
set date briti
set century on
set dele on
Set Enginebehavior 70
STORE CTOD('') TO VDATA1,VDATA2
VDATA1=ctod('01/02/2021')
VDATA2=ctod('15/02/2021')
SELECT cliente, SUM(pe_valor) as valor From pedidos ;
WHERE pedidos.pe_data>=VDATA1 AND pedidos.pe_data <=VDATA2 GROUP BY pedidos.cliente ORDER BY Cliente INTO CURSOR TESTE READWRITE
browse
copy to fechou.xls type xls
browse
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
01-a) Impressora padrao
cPrinter = SET('PRINTER', 2)
? 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
RELEASE WINDOW wBrowse
ENDCASE
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")
oWord.Visible = .T.
oWord = GetObject(,"word.basic")
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:+"+destino)
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,'Maio',Iif(Mvar=6,'JUNHO',IIF(Mvar=7,'JULHO',Iif(Mvar=8,'AGOSTO',IIF(Mvar=9,'SETEMBRO',Iif(Mvar=10,'OUTUBRO',IIF(Mvar=11,'NOVEMBRO','DEZEMBRO')))))))))))
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(10), fileattributes c(1))
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")
WAIT WINDOW 'existe' timeout 2
ELSE && se nao existir
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(2))
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,'Maio',Iif(Mvar=6,'JUNHO',IIF(Mvar=7,'JULHO',Iif(Mvar=8,'AGOSTO',IIF(Mvar=9,'SETEMBRO',Iif(Mvar=10,'OUTUBRO',IIF(Mvar=11,'NOVEMBRO','DEZEMBRO')))))))))))
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;
";
privConexao = Sqlstringconnect(privStrConexao)
If privConexao > 0
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,'Atencao' )
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
lnarquivo = FOPEN(m.tabela,1)
IF lnarquivo > 0
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
Endfunc
*Fim de calculo de horas
validar CPF
FUNCTION validates_cpf
LPARAMETERS number_cpf AS STRING
LOCAL validated AS logical
LOCAL nine_twelve_number AS STRING
LOCAL ten_twelve_number AS STRING
LOCAL multiplier AS INTEGER
LOCAL stored_value AS INTEGER
LOCAL rest_division AS INTEGER
m.validated = .F.
m.nine_twelve_number = SUBSTR(ALLTRIM(number_cpf), 1, 9)
m.multiplier = 9
m.stored_value = 0
TRY
IF (LEN(ALLTRIM(m.number_cpf)) == 11) THEN
FOR m.counter = LEN(m.nine_twelve_number) TO 1 STEP -1
m.stored_value = m.stored_value + ;
(VAL(SUBSTR(m.nine_twelve_number, m.counter, 1)) * m.multiplier)
m.multiplier = m.multiplier - 1
IF m.multiplier < 0 THEN
m.multiplier = 9
ENDIF
ENDFOR
m.rest_division = MOD(m.stored_value, 11)
IF (m.rest_division = 10) THEN
m.rest_division = 0
ENDIF
IF (m.rest_division = VAL(SUBSTR(ALLTRIM(number_cpf), 10, 1)))
m.multiplier = 9
m.stored_value = 0
m.ten_twelve_number = SUBSTR(ALLTRIM(number_cpf), 1, 10)
FOR m.counter = LEN(m.ten_twelve_number) TO 1 STEP -1
m.stored_value = m.stored_value + ;
(VAL(SUBSTR(m.ten_twelve_number, m.counter, 1)) * m.multiplier)
m.multiplier = m.multiplier - 1
IF m.multiplier < 0 THEN
m.multiplier = 9
ENDIF
ENDFOR
m.rest_division = MOD(m.stored_value, 11)
IF (m.rest_division = 10) THEN
m.rest_division = 0
ENDIF
IF (m.rest_division = VAL(SUBSTR(ALLTRIM(number_cpf), 11, 1)))
m.validated = .T.
ENDIF
ENDIF
ENDIF
CATCH TO oerr
LOCAL strerro AS STRING
m.strerro = ""
m.strerro = "" + m.strerro + "Date: " + DTOC(DATE()) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Hour: " + TIME() + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Error: " + ALLTRIM(STR(m.oerr.ERRORNO)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "LineNo: " + ALLTRIM(STR(m.oerr.LINENO)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Message: " + m.oerr.MESSAGE + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Procedure: " + m.oerr.PROCEDURE + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Details: " + m.oerr.DETAILS + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "StackLevel: " + ALLTRIM(STR(m.oerr.STACKLEVEL)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "LineContents: " + m.oerr.LINECONTENTS + CHR(13) + CHR(10) + CHR(13) + CHR(10)
STRTOFILE(m.strerro, SYS(5) + CURDIR() + "ErrosABT.log", 1)
MESSAGEBOX(m.strerro, 16, "ABTsistem")
ENDTRY
RETURN m.validated
ENDFUNC
**
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 )
ELSE
**se nao encontro n=50 para fechar o loop do for next
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
Close tables all
Set Deleted On
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
loop
enddo
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
Gather memvar
Select 1
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, ")
Insert Into Tabla1 Values ("Sao Paulo, 26/1/2011 ")
Insert Into Tabla1 Values (" ")
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 = 1
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"
Otherwise
Return Null
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
CLEAR ALL
CLOSE DATABASES ALL
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 entrada de parametros.
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);
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
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 entrada de parametros.
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);
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
**
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 )
DIMENSION DIA(31)
DIA(1) = "UM"
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
use in caixa
endif
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" +cEnter2
cResul3 = cResul3 + "Total de Memoria Virtual:" + TRANSFORM( nTotalVirtual, "999,999,999" ) + "k" +cEnter2
cResul3 = cResul3 + "Memoria Virtual disponível:" + TRANSFORM( nAvailVirtual, "999,999,999" ) + "k" +cEnter2
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/atualizacaosistema.rar")oIE.Visible = .T.
=SetForegroundWindow(oIE.HWND)
**outro exemplo
DECLARE LONG InternetGetConnectedState IN "wininet.dll" LONG lpdwFlags, LONG dwReservedIF InternetGetConnectedState(0, 0) = 1
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
nResult = InternetGetConnectedState (@nFlags, 0)
**? iif (nResult = 1, "Connected.", "Not connected.")
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 de Internet está fora do Ar!",64,"Aviso")
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)
@ l+1,0 say "na linha de cima pular uma linha ou usar uma ?"
@ L+1,0 SAY '***'
@ 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
DEFINE CLASS teste AS FORM
CAPTION = "Abrindo uma Pagina na Internet pelo Vfp"
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") = 6
** 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
Messagebox("O arquivo "+cArq+" ainda esta corrompido",48,"ATENÇÃO")
Endif
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 comando no executar
regsvr32 C:\WINDOWS\system32\ChilkatXml.dll
IF FILE("C:WINDOWSsystem32ChilkatXml.dll") = .F.MessageBox('O arquivo necessário para utilizar esta rotina não foi encontrado!',48+0+0,'Atenção...')
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,'-','')) + '&formato=xml'ENDIFmResultado=" "* OBJETO CHILKAT EXECUTA A LEITURA DO RETORNO DO WEBSERVICE EM XML
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,'Atenção...')
ELSEmRESULTADO=LOXMLCEP.GETCHILDCONTENT("resultado")STORE " " TO wende,wbairo,wcidade,westaIF mRESULTADO = "1"wENDE =UPPER(LOXMLCEP.GETCHILDCONTENT("tipo_logradouro")+' '+ LOXMLCEP.GETCHILDCONTENT("logradouro"))wBAIRRO=UPPER(LOXMLCEP.GETCHILDCONTENT("bairro"))wCIDADE=UPPER(LOXMLCEP.GETCHILDCONTENT("cidade"))wESTA=UPPER(LOXMLCEP.GETCHILDCONTENT("uf"))WAIT WINDOW AT 10,43 wende+CHR(13)+wbairro+CHR(13)+wcidade+CHR(13)+westa TIMEOUT 3ENDIF
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")
DEFINE CLASS myhandler AS SESSION
PROCEDURE myresize
_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"
messagebox( JUSTFNAME(m.entrada) ) && teste.dbf
***fim
*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-a validar CPF
FUNCTION validates_cpf
LPARAMETERS number_cpf AS STRING
LOCAL validated AS logical
LOCAL nine_twelve_number AS STRING
LOCAL ten_twelve_number AS STRING
LOCAL multiplier AS INTEGER
LOCAL stored_value AS INTEGER
LOCAL rest_division AS INTEGER
m.validated = .F.
m.nine_twelve_number = SUBSTR(ALLTRIM(number_cpf), 1, 9)
m.multiplier = 9
m.stored_value = 0
TRY
IF (LEN(ALLTRIM(m.number_cpf)) == 11) THEN
FOR m.counter = LEN(m.nine_twelve_number) TO 1 STEP -1
m.stored_value = m.stored_value + ;
(VAL(SUBSTR(m.nine_twelve_number, m.counter, 1)) * m.multiplier)
m.multiplier = m.multiplier - 1
IF m.multiplier < 0 THEN
m.multiplier = 9
ENDIF
ENDFOR
m.rest_division = MOD(m.stored_value, 11)
IF (m.rest_division = 10) THEN
m.rest_division = 0
ENDIF
IF (m.rest_division = VAL(SUBSTR(ALLTRIM(number_cpf), 10, 1)))
m.multiplier = 9
m.stored_value = 0
m.ten_twelve_number = SUBSTR(ALLTRIM(number_cpf), 1, 10)
FOR m.counter = LEN(m.ten_twelve_number) TO 1 STEP -1
m.stored_value = m.stored_value + ;
(VAL(SUBSTR(m.ten_twelve_number, m.counter, 1)) * m.multiplier)
m.multiplier = m.multiplier - 1
IF m.multiplier < 0 THEN
m.multiplier = 9
ENDIF
ENDFOR
m.rest_division = MOD(m.stored_value, 11)
IF (m.rest_division = 10) THEN
m.rest_division = 0
ENDIF
IF (m.rest_division = VAL(SUBSTR(ALLTRIM(number_cpf), 11, 1)))
m.validated = .T.
ENDIF
ENDIF
ENDIF
CATCH TO oerr
LOCAL strerro AS STRING
m.strerro = ""
m.strerro = "" + m.strerro + "Date: " + DTOC(DATE()) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Hour: " + TIME() + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Error: " + ALLTRIM(STR(m.oerr.ERRORNO)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "LineNo: " + ALLTRIM(STR(m.oerr.LINENO)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Message: " + m.oerr.MESSAGE + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Procedure: " + m.oerr.PROCEDURE + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Details: " + m.oerr.DETAILS + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "StackLevel: " + ALLTRIM(STR(m.oerr.STACKLEVEL)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "LineContents: " + m.oerr.LINECONTENTS + CHR(13) + CHR(10) + CHR(13) + CHR(10)
STRTOFILE(m.strerro, SYS(5) + CURDIR() + "ErrosABT.log", 1)
MESSAGEBOX(m.strerro, 16, "ABTsistem")
ENDTRY
RETURN m.validated
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
dig2 = 0
ENDIF
IF dig2 <> wn14
RETURN .F.
ENDIF
RETURN .T.
***********
valida cpf
FUNCTION validates_cpf
LPARAMETERS number_cpf AS STRING
LOCAL validated AS logical
LOCAL nine_twelve_number AS STRING
LOCAL ten_twelve_number AS STRING
LOCAL multiplier AS INTEGER
LOCAL stored_value AS INTEGER
LOCAL rest_division AS INTEGER
m.validated = .F.
m.nine_twelve_number = SUBSTR(ALLTRIM(number_cpf), 1, 9)
m.multiplier = 9
m.stored_value = 0
TRY
IF (LEN(ALLTRIM(m.number_cpf)) == 11) THEN
FOR m.counter = LEN(m.nine_twelve_number) TO 1 STEP -1
m.stored_value = m.stored_value + ;
(VAL(SUBSTR(m.nine_twelve_number, m.counter, 1)) * m.multiplier)
m.multiplier = m.multiplier - 1
IF m.multiplier < 0 THEN
m.multiplier = 9
ENDIF
ENDFOR
m.rest_division = MOD(m.stored_value, 11)
IF (m.rest_division = 10) THEN
m.rest_division = 0
ENDIF
IF (m.rest_division = VAL(SUBSTR(ALLTRIM(number_cpf), 10, 1)))
m.multiplier = 9
m.stored_value = 0
m.ten_twelve_number = SUBSTR(ALLTRIM(number_cpf), 1, 10)
FOR m.counter = LEN(m.ten_twelve_number) TO 1 STEP -1
m.stored_value = m.stored_value + ;
(VAL(SUBSTR(m.ten_twelve_number, m.counter, 1)) * m.multiplier)
m.multiplier = m.multiplier - 1
IF m.multiplier < 0 THEN
m.multiplier = 9
ENDIF
ENDFOR
m.rest_division = MOD(m.stored_value, 11)
IF (m.rest_division = 10) THEN
m.rest_division = 0
ENDIF
IF (m.rest_division = VAL(SUBSTR(ALLTRIM(number_cpf), 11, 1)))
m.validated = .T.
ENDIF
ENDIF
ENDIF
CATCH TO oerr
LOCAL strerro AS STRING
m.strerro = ""
m.strerro = "" + m.strerro + "Date: " + DTOC(DATE()) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Hour: " + TIME() + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Error: " + ALLTRIM(STR(m.oerr.ERRORNO)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "LineNo: " + ALLTRIM(STR(m.oerr.LINENO)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Message: " + m.oerr.MESSAGE + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Procedure: " + m.oerr.PROCEDURE + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "Details: " + m.oerr.DETAILS + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "StackLevel: " + ALLTRIM(STR(m.oerr.STACKLEVEL)) + CHR(13) + CHR(10)
m.strerro = "" + m.strerro + "LineContents: " + m.oerr.LINECONTENTS + CHR(13) + CHR(10) + CHR(13) + CHR(10)
STRTOFILE(m.strerro, SYS(5) + CURDIR() + "ErrosABT.log", 1)
MESSAGEBOX(m.strerro, 16, "ABTsistem")
ENDTRY
RETURN m.validated
ENDFUNC
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.
*Registrando Uma MOLEZIP.DLL
Close Databases
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ária técnicas para isso, aí vai uma delas.
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
LOCAL lcOldCaption
lcOldCaption = _screen.Caption
_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
Public usuario
declare integer GetUserName in advapi32 String@, Integer@ && identifica usuario logado no computador
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 é clicado.
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
30-SABER SE PROGRAMA ESTA SENDO EXECUTADO A PARTIR DO EXE OU NO PROJETO
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, para se fechar a tela do BROWSE com a tecla ENTER:
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, para se fechar a tela do BROWSE com a tecla ENTER:
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
ele seja fechado, basta se colocar NODEFAULT, que o Form volta à execução normal.
Para testar, coloque no evento QueryUnload do seu form :
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 gnFieldcount? My(N,1)+' - '+My(N,2)+ ' '+Str(My(N,3))+ ', '+Alltrim(Str(My(N,4)))Select eventosEndfor
?Scan? Alltrim(Str(codigo))+'|'+Alltrim(transport)+'|'+Alltrim(endereco)+Alltrim(endereco)Endscan?Set Alternate To
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
SKIP IN R1
DO WHILE ( R1.CIDADE+R1.UF = wo And Not Eof( "R1" ) )
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
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
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
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 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')
If File(cArqDoc)
*p/ imprimr arq. "print" no lugar do Open,p/imprimir direto
*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
SELECT registro,desenho,Nomes, Left(RTRIM(mfield),120) as OBS FROM test INTO CURSOR auxcli
*** BROWSE normal && Gerei o cursor auxcli ,,,,,,para pegar obs.
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 retornado como "Tcp".
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 altera o valor original dos salários.
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 da coluna "Salário".
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 Máximo] FROM Funcionários;
Para cada registro, mostra Sobrenome e Salário no primeiro e último campos. A seqüência de caracteres "tem um salário de" é retornada como o campo do meio de cada registro.
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 CURSOR teste
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 BY cliente,pe_data INTO CURSOR teste
Esse exemplo cria uma lista de nomes de departamentos únicos e o número de funcionários em cada um destes departamentos.
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 este título.
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 funcionários.
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 alfabética e depois por categoria.
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[, ...]])]
SELECT [origem.]campo1[, campo2[, ...]
FROM expressãodetabela
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 testar
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 critérios específicos.
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 alterar estão em várias tabelas. Você pode alterar vários campos ao mesmo tempo. O exemplo abaixo aumenta o Valor do Pedido em 10 por cento e o valor do Frete em 3 por cento para embarques do Reino Unido:
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, examine primeiro os resultados da consulta seleção que use os mesmos critérios e então execute a consulta atualização.
Exemplo de instrução UPDATE
Esse exemplo muda os valores no campo "RelatórioPara" para 5 para todos os registros de funcionários que atualmente têm valores de RelatórioPara de 2.
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 tabelas grandes, podemos utilizar TOP para definir a quantidade de registro que queremos trabalhar. Exemplo com 100 registros:
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
Insert Into teste1 (codigo,descricao,preco) Values ( Alltrim(Str(wcod,6)), wdesc+Str(wcod), valor)
wcod=wcod+1
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
SELECT 0
USE fmoven Shared
***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,999.99'),emissao from fmoven
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 + ""
FOR m.contador=1 TO m.totalcampos
m.nomecoluna = FIELD(m.contador)
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
LPARAMETERS lclink, lcaction, lcparms, lcdir, nshowwindow
IF (VARTYPE(m.lclink)!="C") THEN
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 "
centena[3] = "Duzentos "
centena[4] = "Trezentos "
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))>0,", "," ")
*---- 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))>0,", "," ")
*--- 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
CASE i = 9
vextenso = vextenso + unidade[Num+1] + "Mil" + IIF(VAL(SUBSTR(valorstr,10))>0,", "," ")
*--- 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(valorstr,13))>0," e "," ")
*---- 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
* Impressão da nota de venda
* 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"
*
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
SET PRINTER TO
SET DEVICE TO SCREEN
Excelente. Ainda há muito programa por ai rodando em VFP vamos manter este site vivo
ResponderExcluirVamos incluir mais coisas ai. VFP VIVE
ResponderExcluirFoxPro na arteria
ResponderExcluirSim, tb ainda uso muito, VFP9, estou precisando gerar arquivo pdf com senha, pq agora estamos enviando por email, alguem tem um solucao.
ResponderExcluirParabens por manter este site vivo
ResponderExcluir