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
Moderador: Moderadores
- susviela@bol.com.br
- 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
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 )
.
"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 )
Log no banco de dados - DBF / NTX
Olá,
Para DBFNTX não sei se isto exista mas no harbour tem o LOGRDD que faz isto. Veja um exemplo:
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+
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"
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.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Log no banco de dados - DBF / NTX
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.
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.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
