Página 1 de 1

Log no banco de dados - DBF / NTX

Enviado: 10 Dez 2018 17:21
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,

Log no banco de dados - DBF / NTX

Enviado: 10 Dez 2018 20:25
por susviela@bol.com.br
Não ... só fazendo "no braço mesmo" como se diz !

Log no banco de dados - DBF / NTX

Enviado: 11 Dez 2018 08:02
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+

Log no banco de dados - DBF / NTX

Enviado: 11 Dez 2018 11:31
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.