13 Mai 2020 12:56
13 Mai 2020 13:05
13 Mai 2020 13:13
13 Mai 2020 13:17
13 Mai 2020 13:25
13 Mai 2020 14:11
E se o ADO morrer?
- executar comandos
- executar comandos trazendo retorno
Se uma LIB fizer isso, o que todas fazem, ninguém está nem preso ao ADO e nem ao Windows, pode trocar quando quiser.
13 Mai 2020 15:25
METHOD Email() CLASS JPCADASTROClass
LOCAL cAssunto, cTxt, mIdCadastro
mIdCadastro := ::axKeyValue[ 1 ]
IF mIdCadastro == 0
MsgWarning( "Selecione primeiro o cliente" )
RETURN NIL
ENDIF
Encontra( StrZero( mIdCadastro, 6 ), "JPCADASTRO", "NUMLAN" )
IF Empty( jpcadastro->cdEmail )
MsgWarning( "Cliente não contém endereço de email" )
RETURN NIL
ENDIF
IF ! MsgYesNo( "Confirme o envio de email" )
RETURN NIL
ENDIF
cAssunto = "Cad." + Str( mIdCadastro, 6 ) + " " + jpcadastro->cdNome
cTxt := []
cTxt += [<html font size="2">]
cTxt += [<table width="95%">]
cTxt += [<tr><td></td></tr>]
cTxt += [<tr><td align="CENTER">FICHA DE CADASTRO</td></tr>]
cTxt += [<tr><td></td></tr>]
cTxt += [<tr><td>CÓDIGO: ] + jpcadastro->idCadastro + [</td></tr>]
cTxt += [<tr><td>NOME: ] + jpcadastro->cdNome + [</td></tr>]
cTxt += [<tr><td>ENDEREÇO: ] + jpcadastro->cdEndereco + [</td></tr>]
cTxt += [<tr><td>BAIRRO: ] + jpcadastro->cdBairro + [</td></tr>]
cTxt += [<tr><td>CIDADE: ] + jpcadastro->cdCidade + [</td></tr>]
cTxt += [<tr><td>UF: ] + jpcadastro->cdUf + [</td></tr>]
cTxt += [<tr><td>CEP: ] + jpcadastro->cdCep + [</td></tr>]
cTxt += [<tr><td>CPF-CNPJ: ] + jpcadastro->cdCnpj + [</td></tr>]
cTxt += [<tr><td>INSCR.ESTADUAL: ] + jpcadastro->cdInsEst + [</td></tr>]
cTxt += [<tr><td>OUTRO DOCTO: ] + jpcadastro->cdOutDoc + [</td></tr>]
cTxt += [<tr><td>EMAIL: ] + jpcadastro->cdEmail + [</td></tr>]
cTxt += [<tr><td></td></tr>]
cTxt += [</table></font></html>]
EnviaEmail( { Trim( jpcadastro->cdEmail ) },, cAssunto, cTxt )
RETURN NIL
13 Mai 2020 18:57
METHOD Email() CLASS JPCADASTROClass
LOCAL cAssunto, cEmail, cTxt, mIdCadastro
mIdCadastro := ::axKeyValue[ 1 ]
IF mIdCadastro == 0
MsgWarning( "Selecione primeiro o cliente" )
RETURN NIL
ENDIF
WITH OBJECT ::cnSQL
:cSQL := "SELECT * FROM JPCADASTRO WHERE IDCADASTRO = " + NumberSQL( mIdCadastro )
:Execute()
cEmail := :String( "CDEMAIL" )
cAssunto = "Cad." + Str( mIdCadastro, 6 ) + " " + :String( "CDNOME" )
cTxt := []
cTxt += [<html font size="2">]
cTxt += [<table width="95%">]
cTxt += [<tr><td></td></tr>]
cTxt += [<tr><td align="CENTER">FICHA DE CADASTRO</td></tr>]
cTxt += [<tr><td></td></tr>]
cTxt += [<tr><td>CÓDIGO: ] + Str( mIdCadastro, 6 ) + [</td></tr>]
cTxt += [<tr><td>NOME: ] + :String( "CDNOME" ) + [</td></tr>]
cTxt += [<tr><td>ENDEREÇO: ] + :String( "CDENDERECO" ) + [</td></tr>]
cTxt += [<tr><td>BAIRRO: ] + :String( "CDBAIRRO" ) + [</td></tr>]
cTxt += [<tr><td>CIDADE: ] + :String( "CDCIDADE" ) + [</td></tr>]
cTxt += [<tr><td>UF: ] + :String( "CDUF" ) + [</td></tr>]
cTxt += [<tr><td>CEP: ] + :String( "CDCEP" ) + [</td></tr>]
cTxt += [<tr><td>CPF-CNPJ: ] + :String( "CDCNPJ" ) + [</td></tr>]
cTxt += [<tr><td>INSCR.ESTADUAL: ] + :String( "CDINSEST" ) + [</td></tr>]
cTxt += [<tr><td>OUTRO DOCTO: ] + :String( "CDOUTDOC" ) + [</td></tr>]
cTxt += [<tr><td>EMAIL: ] + :String( "CDEMAIL" ) + [</td></tr>]
cTxt += [<tr><td></td></tr>]
cTxt += [</table></font></html>]
:CloseRecordset()
ENDWITH
IF Empty( cEmail )
MsgWarning( "Cliente não contém endereço de email" )
RETURN NIL
ENDIF
IF ! MsgYesNo( "Confirme o envio de email" )
RETURN NIL
ENDIF
EnviaEmail( { cEmail },, cAssunto, cTxt )
RETURN NIL
14 Mai 2020 13:36
METHOD TelaDados( lEdit ) CLASS JPCADASTROClass
LOCAL GetList := {}, cBloqueioDesc
LOCAL cnSQL := ADOClass():New( AppConexao() )
LOCAL mIdCadastro, mcdEndereco, mcdNumero, mcdCompl, mcdBairro, mcdCidade, mcdUf, mcdCep
LOCAL mcdContato, mcdTelefone, mcdFax, mcdEndCob, mcdNumCob, mcdComCob, mcdBaiCob, mcdCidCob
LOCAL mcdUFCob, mcdCepCob, mcdConCob, mcdTelCob, mcdFaxCob, mcdNomEnt, mcdEndEnt, mcdNumEnt
LOCAL mcdComEnt, mcdBaiEnt, mcdCidEnt, mcdUFEnt, mcdCepEnt, mcdConEnt, mcdTelEnt, mcdFaxEnt
LOCAL mcdNome, mcdApelido, mcdLimCre, mcdEmail, mcdEmaNfe, mcdEmaCon, mcdValMes, mcdCnpj
LOCAL mcdInsEst, mcdOutDoc, mIdTriCad, mIdVendedor, midPortador, mIdForPag, mIdCliSta
LOCAL mcdMapa, mIdMidia, mcdDivisao, mcdGrupo, mcdHomePage, mcdCnae, mIdTransp, mcdObs
LOCAL mcdTelef2, mcdTelef3, mcdDatNas, mcdInfInc, mcdInfAlt, mcdCtaCon, mcdCtaJur, mcdCtaDes
mIdCadastro := ::axKeyValue[ 1 ]
WITH OBJECT cnSQL
:cSQL := "SELECT * FROM JPCADASTRO"
:Execute()
Encontra( StrZero( mIdCadastro, 6 ), "jpcadastro", "numlan" )
mcdEndereco := jpcadastro->cdEndereco
mcdNumero := jpcadastro->cdNumero
mcdCompl := jpcadastro->cdCompl
mcdBairro := jpcadastro->cdBairro
mcdCidade := jpcadastro->cdCidade
mcdUf := jpcadastro->cdUf
mcdCep := jpcadastro->cdCep
mcdContato := jpcadastro->cdContato
mcdTelefone := jpcadastro->cdTelefone
mcdFax := jpcadastro->cdFax
mcdEndCob := jpcadastro->cdEndCob
mcdNumCob := jpcadastro->cdNumCob
mcdComCob := jpcadastro->cdComCob
mcdBaiCob := jpcadastro->cdBaiCob
mcdCidCob := jpcadastro->cdCidCob
mcdUFCob := jpcadastro->cdUFCob
mcdCepCob := jpcadastro->cdCepCob
mcdConCob := jpcadastro->cdConCob
mcdTelCob := jpcadastro->cdTelCob
mcdFaxCob := jpcadastro->cdFaxCob
mcdNomEnt := jpcadastro->cdNomEnt
mcdEndEnt := jpcadastro->cdEndEnt
mcdNumEnt := jpcadastro->cdNumEnt
mcdComEnt := jpcadastro->cdComEnt
mcdBaiEnt := jpcadastro->cdBaiEnt
mcdCidEnt := jpcadastro->cdCidEnt
mcdUFEnt := jpcadastro->cdUFEnt
mcdCepEnt := jpcadastro->cdCepEnt
mcdConEnt := jpcadastro->cdConEnt
mcdTelEnt := jpcadastro->cdTelEnt
mcdFaxEnt := jpcadastro->cdFaxEnt
mcdNome := jpcadastro->cdNome
mcdApelido := jpcadastro->cdApelido
mcdLimCre := jpcadastro->cdLimCre
mcdEmail := jpcadastro->cdEmail
mcdEmaNfe := jpcadastro->cdEmaNfe
mcdEmaCon := jpcadastro->cdEmaCon
mcdValMes := jpcadastro->cdValMes
mcdCnpj := jpcadastro->cdCnpj
mcdInsEst := jpcadastro->cdInsEst
mcdOutDoc := jpcadastro->cdOutDoc
mIdTriCad := Val( jpcadastro->cdTriCad )
mIdVendedor := Val( jpcadastro->cdVendedor )
midPortador := Val( jpcadastro->cdPortador )
mIdForPag := Val( jpcadastro->cdForPag )
mIdCliSta := Val( jpcadastro->cdStatus )
mcdMapa := jpcadastro->cdMapa
mIdMidia := Val( jpcadastro->cdMidia )
mcdDivisao := jpcadastro->cdDivisao
mcdGrupo := jpcadastro->cdGrupo
mcdHomePage := jpcadastro->cdHomePage
mcdCnae := jpcadastro->cdCnae
mIdTransp := Val( jpcadastro->cdTransp )
mcdObs := jpcadastro->cdObs
mcdTelef2 := jpcadastro->cdTelef2
mcdTelef3 := jpcadastro->cdTelef3
mcdDatNas := jpcadastro->cdDatNas
mcdInfInc := jpcadastro->cdInfInc
mcdInfAlt := jpcadastro->cdInfAlt
mcdCtaCon := jpcadastro->cdCtaCon
mcdCtaJur := jpcadastro->cdCtaJur
mcdCtaDes := jpcadastro->cdCtaDes
:CloseRecordset()
ENDWITH
14 Mai 2020 13:48
METHOD TelaDados( lEdit ) CLASS JPCADASTROClass
LOCAL GetList := {}, cBloqueioDesc
LOCAL cnSQL := ADOClass():New( AppConexao() )
LOCAL mIdCadastro, mcdEndereco, mcdNumero, mcdCompl, mcdBairro, mcdCidade, mcdUf, mcdCep
LOCAL mcdContato, mcdTelefone, mcdFax, mcdEndCob, mcdNumCob, mcdComCob, mcdBaiCob, mcdCidCob
LOCAL mcdUFCob, mcdCepCob, mcdConCob, mcdTelCob, mcdFaxCob, mcdNomEnt, mcdEndEnt, mcdNumEnt
LOCAL mcdComEnt, mcdBaiEnt, mcdCidEnt, mcdUFEnt, mcdCepEnt, mcdConEnt, mcdTelEnt, mcdFaxEnt
LOCAL mcdNome, mcdApelido, mcdLimCre, mcdEmail, mcdEmaNfe, mcdEmaCon, mcdValMes, mcdCnpj
LOCAL mcdInsEst, mcdOutDoc, mIdTriCad, mIdVendedor, midPortador, mIdForPag, mIdCliSta
LOCAL mcdMapa, mIdMidia, mcdDivisao, mcdGrupo, mcdHomePage, mcdCnae, mIdTransp, mcdObs
LOCAL mcdTelef2, mcdTelef3, mcdDatNas, mcdInfInc, mcdInfAlt, mcdCtaCon, mcdCtaJur, mcdCtaDes
mIdCadastro := ::axKeyValue[ 1 ]
WITH OBJECT cnSQL
:cSQL := "SELECT * FROM JPCADASTRO"
:Execute()
Encontra( StrZero( mIdCadastro, 6 ), "jpcadastro", "numlan" )
mcdEndereco := jpcadastro->cdEndereco
mcdNumero := jpcadastro->cdNumero
mcdCompl := jpcadastro->cdCompl
mcdBairro := jpcadastro->cdBairro
mcdCidade := jpcadastro->cdCidade
mcdUf := jpcadastro->cdUf
mcdCep := jpcadastro->cdCep
mcdContato := jpcadastro->cdContato
mcdTelefone := jpcadastro->cdTelefone
mcdFax := jpcadastro->cdFax
mcdEndCob := jpcadastro->cdEndCob
mcdNumCob := jpcadastro->cdNumCob
mcdComCob := jpcadastro->cdComCob
mcdBaiCob := jpcadastro->cdBaiCob
mcdCidCob := jpcadastro->cdCidCob
mcdUFCob := jpcadastro->cdUFCob
mcdCepCob := jpcadastro->cdCepCob
mcdConCob := jpcadastro->cdConCob
mcdTelCob := jpcadastro->cdTelCob
mcdFaxCob := jpcadastro->cdFaxCob
mcdNomEnt := jpcadastro->cdNomEnt
mcdEndEnt := jpcadastro->cdEndEnt
mcdNumEnt := jpcadastro->cdNumEnt
mcdComEnt := jpcadastro->cdComEnt
mcdBaiEnt := jpcadastro->cdBaiEnt
mcdCidEnt := jpcadastro->cdCidEnt
mcdUFEnt := jpcadastro->cdUFEnt
mcdCepEnt := jpcadastro->cdCepEnt
mcdConEnt := jpcadastro->cdConEnt
mcdTelEnt := jpcadastro->cdTelEnt
mcdFaxEnt := jpcadastro->cdFaxEnt
mcdNome := jpcadastro->cdNome
mcdApelido := jpcadastro->cdApelido
mcdLimCre := :Number( "CDLIMCRE" )
mcdEmail := jpcadastro->cdEmail
mcdEmaNfe := jpcadastro->cdEmaNfe
mcdEmaCon := jpcadastro->cdEmaCon
mcdValMes := :Number( "CDVALMES" )
mcdCnpj := jpcadastro->cdCnpj
mcdInsEst := jpcadastro->cdInsEst
mcdOutDoc := jpcadastro->cdOutDoc
mIdTriCad := :Number( "CDTRICAD" )
mIdVendedor := :Number( "CDVENDEDOR" )
midPortador := :Number( "CDPORTADOR" )
mIdForPag := :Number( "CDFORPAG" )
mIdCliSta := :Number( "CDSTATUS" )
mcdMapa := jpcadastro->cdMapa
mIdMidia := :Number( "CDMIDIA" )
mcdDivisao := jpcadastro->cdDivisao
mcdGrupo := jpcadastro->cdGrupo
mcdHomePage := jpcadastro->cdHomePage
mcdCnae := jpcadastro->cdCnae
mIdTransp := :Number( "CDTRANSP" )
mcdObs := jpcadastro->cdObs
mcdTelef2 := jpcadastro->cdTelef2
mcdTelef3 := jpcadastro->cdTelef3
mcdDatNas := jpcadastro->cdDatNas
mcdInfInc := jpcadastro->cdInfInc
mcdInfAlt := jpcadastro->cdInfAlt
mcdCtaCon := jpcadastro->cdCtaCon
mcdCtaJur := jpcadastro->cdCtaJur
mcdCtaDes := jpcadastro->cdCtaDes
:CloseRecordset()
ENDWITH
14 Mai 2020 14:25
15 Mai 2020 10:56
lVar := .F./.T. //Logical
nVar := 0 //Numeric
dVar := Date() //Date
cVar := 'ABC' //Character
mVar := observação // Campo Memo
xVar := 0,1,2 ou 'ABC' //Numeric, Character
15 Mai 2020 11:48
06 Ago 2020 11:00
JoséQuintas escreveu:Alterando o fonte propriamente dito:
As rotinas anteriores, por enquanto são anotações apenas.
A primeira parte na conversão é atualizar DBF e MySQL ao mesmo tempo.
Então... aonde tem o REPLACE no DBF, acrescento o UPDATE para o MySQL.
E aonde tem o APPEND, acrescento o INSERT para o MySQL.
A partir daqui, gravação dupla, DBF e MySQL estão atualizados.
Mesmo esquema do DBF apenas atualiza o MySQL.
A partir daqui, poderia atualizar relatórios e outras pesquisas !!!
06 Ago 2020 12:23
claudiochaves escreveu:No caso do update no mysql, você faz a clausula com todos os campos ou apenas os campos que tiveram alteração ? isto não ficou claro para mim.