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:
Quem utiliza Harbour pode usar isto adicionando a lib de compatibilidade com xHarbour mas, não é aconselhável.