Log no banco de dados - DBF / NTX

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

tchadrack
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 15 Mar 2016 15:42
Localização: São Paulo

Log no banco de dados - DBF / NTX

Mensagem por tchadrack »

Boa tarde,

Tenho um sistema antigo que trabalha com o banco de dados DBF (dbase) e índices NTX e que foi migrado recentemente para harbour.
Estou precisando fazer alguns testes onde necessito que o sistema registre um log com as operações de escrita ao banco de dados,
constando os registros inseridos, apagados, ou modificados, com data e hora.
Existe alguma maneira (simples) de fazer isto no harbour ?

Grato,
Avatar do usuário
susviela@bol.com.br
Usuário Nível 3
Usuário Nível 3
Mensagens: 236
Registrado em: 30 Jun 2017 11:17
Localização: São José / SC
Contato:

Log no banco de dados - DBF / NTX

Mensagem por susviela@bol.com.br »

Não ... só fazendo "no braço mesmo" como se diz !
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Log no banco de dados - DBF / NTX

Mensagem por rossine »

Olá,

Para DBFNTX não sei se isto exista mas no harbour tem o LOGRDD que faz isto. Veja um exemplo:

Código: Selecionar todos

#include "dbinfo.ch"
#include "hbusrrdd.ch"

// Request for LOGRDD rdd driver
REQUEST LOGRDD

// Here put Request for RDD you want to inherit then add
// function hb_LogRddInherit() (see at bottom)
REQUEST DBFCDX

PROCEDURE Main()

   hb_vfCopyFile( hb_DirSepToOS( "../test.dbf" ), "test.dbf" )

   // Set LOGRDD as default RDD otherwise I have to set explicitly use
   // with DRIVER option
   rddSetDefault( "LOGRDD" )
   // Adding Memofile Info
   rddInfo( RDDI_MEMOVERSION, DB_MEMOVER_CLIP, "LOGRDD" )

   // Define Log File Name and position
   hb_LogRddLogFilename( "changes.log" )
   // Define Tag to add for each line logged
   hb_LogRddTag( NetName() + "\" + hb_UserName() )
   // Activate Logging, it can be stopped/started at any moment
   hb_LogRddActive( .T. )

   // Uncomment next command to change logged string that I have to return to standard LOGRDD file
#if 0
   hb_LogRddMsgLogBlock( {| cTag, cRDDName, cCmd, nWA, xPar1, xPar2, xPar3 | MyToString( cTag, cRDDName, cCmd, nWA, xPar1, xPar2, xPar3 ) } )
#endif

   // Uncomment next command to change standard destination of my logged string
#if 0
   hb_LogRddUserLogBlock( {| cTag, cRDDName, cCmd, nWA, xPar1, xPar2, xPar3 | hb_ToOutDebug( MyToString( cTag, cRDDName, cCmd, nWA, xPar1, xPar2, xPar3 ) + "\n\r" ) } )
#endif

   // Start program logic

   // Open a table with logging (default RDD is LOGRDD)
   USE test.dbf
   field->first := "Francesco"
   dbCloseArea()

   // Open a table without logging

   USE test.dbf VIA "DBFCDX"
   dbAppend()
   field->first := "Francesco"

   RETURN

STATIC FUNCTION MyToString( cCmd, nWA, xPar1, xPar2, xPar3 )

   SWITCH cCmd
   CASE "CREATE"
      // Parameters received: xPar1: aOpenInfo
      RETURN xPar1[ UR_OI_NAME ]
   CASE "CREATEFIELDS"
      // Parameters received: xPar1: aStruct
      RETURN hb_ValToExp( xPar1 )
   CASE "OPEN"
      // Parameters received: xPar1: aOpenInfo
#if 0
      // In this example I don't want to log Open Command
      RETURN 'Table: "' + xPar1[ UR_OI_NAME ] + '", Alias: "' + Alias() + '", WorkArea: ' + hb_ntos( nWA )
#endif
   CASE "CLOSE"
      // Parameters received: xPar1: cTableName, xPar2: cAlias
#if 0
      // In this example I don't want to log Close Command
      RETURN 'Table: "' + xPar1 + '", Alias: "' + xPar2 + '", WorkArea: ' + hb_ntos( nWA )
#endif
   CASE "APPEND"
      // Parameters received: xPar1: lUnlockAll
      RETURN Alias() + "->RecNo() == " + hb_ntos( RecNo() )
   CASE "DELETE"
      // Parameters received: none
      RETURN Alias() + "->RecNo() == " + hb_ntos( RecNo() )
   CASE "RECALL"
      // Parameters received: none
      RETURN Alias() + "->RecNo() == " + hb_ntos( RecNo() )
   CASE "PUTVALUE"
      // Parameters received: xPar1: nField, xPar2: xValue, xPar3: xOldValue
      HB_SYMBOL_UNUSED( xPar3 ) // Here don't log previous value
      RETURN Alias() + "(" + hb_ntos( RecNo() ) + ")->" + PadR( FieldName( xPar1 ), 10 ) + " := " + hb_LogRddValueToText( xPar2 )
   CASE "ZAP"
      // Parameters received: none
      RETURN 'Alias: "' + Alias() + ' Table: "' + dbInfo( DBI_FULLPATH ) + '"'
   ENDSWITCH

   RETURN NIL

FUNCTION hb_LogRddInherit()
   RETURN "DBFCDX"

Este código se encontra em:

Para harbour 3.4

\harbour-core\tests\usrrdd\exlog.prg

Para harbour 3.2

\harbour\tests\usrrdd\exlog.prg

Talvez isto possa lhe ajudar.

T+
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Log no banco de dados - DBF / NTX

Mensagem por alxsts »

Olá!

Quem utiliza xHarbour, tem disponíveis alguns comandos e funções para gravar log:
Capturar.JPG
Quem utiliza Harbour pode usar isto adicionando a lib de compatibilidade com xHarbour mas, não é aconselhável.
[]´s
Alexandre Santos (AlxSts)
Responder