Até já coloquei em outro post, mas aqui é a mudança com o tempo, não faria sentido colocar junto ao outro post.
Aqui o tbrowse era somente DBF:
Código: Selecionar todos
METHOD GridSelection() CLASS JPPEDIDOClass
LOCAL nCont, oTBrowse, nSelect := Select()
IF Select( "jptransa" ) == 0
SELECT 0
AbreArquivos( "jptransa" )
Errorsys_WriteErrorLog( "Faltou abrir jptransa", 3 )
ENDIF
IF Select( "jpnotfis" ) == 0
SELECT 0
AbreArquivos( "jpnotfis" )
Errorsys_WriteErrorLog( "Faltou abrir jpnotfis", 3 )
ENDIF
IF Select( "jpcadastro" ) == 0
SELECT 0
AbreArquivos( "jpcadastro" )
Errorsys_WriteErrorLog( "Faltou abrir jpcadas", 3 )
ENDIF
SELECT jppedido
oTBrowse := { ;
{ "PEDIDO", {|| jppedido->idPedido } }, ;
{ "DT.EMIS.", {|| jppedido->pdDatEmi } }, ;
{ "CLIENTE", {|| jppedido->pdCliFor + " " + ReturnValue( "", Encontra( jppedido->pdCliFor, "jpcadastro", "numlan" ) ) + Pad( jpcadastro->cdNome, 30 ) } }, ;
{ "NF", {|| ReturnValue( "", Encontra( jppedido->idPedido, "jpnotfis", "pedido" ) ) + Right( jpnotfis->nfFilial, 2 ) + "." + jpnotfis->nfNotFis } }, ;
{ "SITUAÇÃO", {|| Pad( Pedido():Status(), 10 ) } }, ;
{ "TRANSAÇÃO", {|| ReturnValue( "", Encontra( jppedido->pdTransa, "jptransa", "numlan" ) ) + Pad( jptransa->trDescri, 12 ) } }, ;
{ "VAL.NF", {|| Transform( jppedido->pdValNot, "999,999,999.99" ) } } }
FOR nCont = 1 TO Len( oTBrowse )
AAdd( oTBrowse[ nCont ], {|| ;
iif( "NF." $ Pedido():Status() .OR. "CANCELADO" $ Pedido():Status() .OR. "DEM." $ Pedido():Status(), { 1, 2 }, ;
iif( "FATURAR" $ Pedido():Status(), { 7, 2 }, { 6, 2 } ) ) } )
NEXT
FazBrowse( oTbrowse )
IF LastKey() != K_ESC .AND. ! Eof()
KEYBOARD jppedido->idPedido + Chr( K_ENTER )
ENDIF
SELECT ( nSelect )
RETURN NIL
Aqui ficou parcial DBF/MySQL
Código: Selecionar todos
WITH OBJECT cnMySql
:cSql := "SELECT IDPEDIDO, PDDATEMI, PDCLIFOR, LEFT( JPCADASTRO.CDNOME, 30 ) AS NOME, " + ;
"PDTRANSA, PDVALNOT, PDCONF, PDSTATUS " + ;
"FROM JPPEDIDO " + ;
"LEFT JOIN JPCADASTRO ON JPPEDIDO.PDCLIFOR = JPCADASTRO.IDCADASTRO " + ;
"WHERE PDDATEMI > " + DateSql( Date() - 180 )
:Execute()
oTBrowse := { ;
{ "PEDIDO", { || StrZero( :Number( "IDPEDIDO" ), 6 ) } }, ;
{ "DT.EMIS.", { || :Date( "PDDATEMI" ) } }, ;
{ "CLIENTE", { || :String( "PDCLIFOR", 6 ) + " " + :String( "NOME", 30 ) } }, ;
{ "NF", { || ReturnValue( "", Encontra( StrZero( :Number( "IDPEDIDO" ), 6 ), "jpnotfis", "pedido" ) ) + Right( jpnotfis->nfFilial, 2 ) + "." + jpnotfis->nfNotFis } }, ;
{ "SITUAÇÃO", { || Pad( PedidoStatus( StrZero( :Number( "IDPEDIDO" ), 6 ), :String( "PDSTATUS", 2 ), :String( "PDCONF", 2 ) ), 10 ) } }, ;
{ "TRANSAÇÃO", { || ReturnValue( "", Encontra( :String( "PDTRANSA", 6 ), "jptransa", "numlan" ) ) + Pad( jptransa->trDescri, 12 ) } }, ;
{ "VAL.NF", { || Transform( :Number( "PDVALNOT" ), "999,999,999.99" ) } } }
FOR nCont = 1 TO Len( oTBrowse )
AAdd( oTBrowse[ nCont ], { | cStatus | cStatus := PedidoStatus( StrZero( :Number( "IDPEDIDO" ), 6 ), ;
:String( "PDSTATUS", 2 ), :String( "PDCONF", 2 ) ), ;
iif( "NF." $ cStatus .OR. "CANCELADO" $ cStatus, { 1, 2 }, ;
iif( "FATURAR" $ cStatus, { 7, 2 }, { 6, 2 } ) ) } )
NEXT
BrowseADO( cnMySql, oTBrowse, "NOME", { || StrZero( :Number( "IDPEDIDO" ), 6 ) } )
:CloseRecordset()
ENDWITH
Aqui ficou mais MySQL ainda, pegando informação do MySQLJPNOTFIS ao invés de DBF.JPNOTFIS
Código: Selecionar todos
METHOD GridSelection() CLASS JPPEDIDOClass
LOCAL nCont, oTBrowse, nSelect := Select(), cnMySql := ADOClass():New( AppConexao() )
IF Select( "jptransa" ) == 0
SELECT 0
AbreArquivos( "jptransa" )
Errorsys_WriteErrorLog( "Faltou abrir jptransa", 3 )
ENDIF
WITH OBJECT cnMySql
:cSql := "SELECT IDPEDIDO, PDDATEMI, PDCLIFOR, LEFT( JPCADASTRO.CDNOME, 30 ) AS NOME, " + ;
"PDTRANSA, PDVALNOT, PDCONF, PDSTATUS, JPNOTFIS.IDNOTFIS AS NOTFIS, RIGHT( JPNOTFIS.NFFILIAL, 2 ) AS FILIAL " + ;
"FROM JPPEDIDO " + ;
"LEFT JOIN JPCADASTRO ON JPPEDIDO.PDCLIFOR = JPCADASTRO.IDCADASTRO " + ;
"LEFT JOIN JPNOTFIS ON JPPEDIDO.IDPEDIDO = JPNOTFIS.NFPEDIDO " + ;
"WHERE PDDATEMI > " + DateSql( Date() - 180 )
:Execute()
oTBrowse := { ;
{ "PEDIDO", { || StrZero( :Number( "IDPEDIDO" ), 6 ) } }, ;
{ "DT.EMIS.", { || :Date( "PDDATEMI" ) } }, ;
{ "CLIENTE", { || :String( "PDCLIFOR", 6 ) + " " + :String( "NOME", 30 ) } }, ;
{ "NF", { || :String( "FILIAL", 2 ) + "." + StrZero( :Number( "NOTFIS" ), 6 ) } }, ;
{ "SITUAÇÃO", { || Pad( PedidoStatus( StrZero( :Number( "IDPEDIDO" ), 6 ), :String( "PDSTATUS", 2 ), :String( "PDCONF", 2 ) ), 10 ) } }, ;
{ "TRANSAÇÃO", { || ReturnValue( "", Encontra( :String( "PDTRANSA", 6 ), "jptransa", "numlan" ) ) + Pad( jptransa->trDescri, 12 ) } }, ;
{ "VAL.NF", { || Transform( :Number( "PDVALNOT" ), "999,999,999.99" ) } } }
FOR nCont = 1 TO Len( oTBrowse )
AAdd( oTBrowse[ nCont ], { | cStatus | cStatus := PedidoStatus( StrZero( :Number( "IDPEDIDO" ), 6 ), ;
:String( "PDSTATUS", 2 ), :String( "PDCONF", 2 ) ), ;
iif( "NF." $ cStatus .OR. "CANCELADO" $ cStatus, { 1, 2 }, ;
iif( "FATURAR" $ cStatus, { 7, 2 }, { 6, 2 } ) ) } )
NEXT
BrowseADO( cnMySql, oTBrowse, "NOME", { || StrZero( :Number( "IDPEDIDO" ), 6 ) } )
:CloseRecordset()
ENDWITH
SELECT ( nSelect )
RETURN NIL
O próximo será JPTRANSA e pronto, nenhum DBF para esse tbrowse.
Tive que modificar o campo de pedido em JPNOTFIS, porque nem tinha paciência de esperar o tbrowse, de tão demorado que tinha ficado.
Depois de alterar o campo pra numérico, e criar índice... aí sim ficou instantâneo.
Alterar de string para numérico no MySQL é simples... ou quase.
Se o conteúdo for numérico, a alteração é instantânea, mas se contiver algo diferente... aí precisa ajustar o conteúdo diferente primeiro.
Quanto à migração pra MySQL:
Por enquanto eliminando a necessidade de DBFs, nos TBROWSEs, e módulos sem complicação.
Lembrando:
É sempre no esquema do cliente clicar e já atualizar.
Deu certo já fica disponível pra quem quiser.
Sempre em frente, e sempre funcionando.