|
Mike Silvers wrote:
> Hi all! I need to determine if specific triggers are attaches to
> a specific
> file. I am looking at using the QDBRTVFD API. Does anyone have any
> examples of this API use? Does anyone have any other suggestions for
> programmatically determining if a specific trigger exists on a specific
> file?
I've used cut'n'paste from a service program module I've written:
D wFDSize ds
D wFDSize1 9b 0
D wFDSize2 9b 0
D Qdb_Qdbfh ds
d Qdbfyret 9b 0
d Qdbfyavl 9b 0
d Qdbfhflg 2
d Reserved_7 4
d Qdbflbnum 4b 0
d Qdbfknum 4b 0
d Qdbfkmxl 4b 0
d Qdbfkflg 1
d Qdbfkfdm 1
d Reserved_10 8
d Qdbfhaut 10
d Qdbfhupl 1
d Qdbfhmxm 4b 0
d Qdbfwtfi 4b 0
d Qdbfhfrt 4b 0
d Qdbfhmnum 4b 0
d Reserved_11 9
d Qdbfbrwt 4b 0
d Qaaf 1
d Qdbffmtnum 4b 0
d Qdbfhfl2 2
d Qdbfvrm 4b 0
d Qaaf2 2
d Qdbfhcrt 13
d Reserved_18 2
d qdbfhtxt 50
d Reserved_19 13
d Qdbfsrcf 10
d Qdbfsrcm 10
d Qdbfsrcl 10
d Qdbfkrcv 1
d Reserved_20 23
d Qdbftcid 5u 0
d Qdbfasp 2
d Reserved_21 1
d Qdbfmxfnum 4b 0
d Reserved_22 76
d Qdbfodic 9b 0
d Reserved_23 14
d Qdbffigl 4b 0
d Qdbfmxrl 4b 0
d Reserved_24 8
d Qdbfgkct 4b 0
d Qdbfos 9b 0
d Reserved_25 8
d Qdbfocs 9b 0
d Reserved_26 4
d Qdbfpact 2
d Qdbfhrls 6
d Reserved_27 20
d Qdbpfof 9b 0
d Qdblfof 9b 0
d Qdbfnlsb 1
d Qdbflang 3
d Qdbfcnty 2
d Qdbfjorn 9b 0
d Reserved_28 18
D* Physical File Attributes
D pQdbpf s *
D Qdb_Qdbpf ds based(pQdbpf)
D qdbfpAlc 2
D qdbfcMPs 1
d Reserved_29 8
D qdbpRNum 9b 0
D qdbfpRI 4b 0
D qdbRINum 4b 0
D qdbfORID 9b 0
D qdbBits33 1
D qdbfOTrg 9b 0
Offset to qdbftrg
D qdbfTrgN 4b 0 No
of triggers
D qdbfOFCS 9b 0
D qdbfCstN 9b 0
D qdbfODL 9b 0
D Reserved_32 6
D pQdbftrg s *
D Qdb_Qdbftrg ds based(pQdbftrg)
D qdbfTrgT 1
D qdbfTrgE 1
D qdbfTPgm 10
D qdbfTPLb 10
D qdbfTUpd 1
D qdbBits69 1
D Reserved_201 24
D pFD s *
D wFD s 1000 dim(1000) based(pFD)
D wCurTrg s 4b 0
*****************************************************************
** Open file description
*****************************************************************
p OpenFILD0100 b export
d pi
D xFile 20 const
D xRcdFmt 10 const
D wErr s 8 inz(x'0000000000000000')
D wFDLen s 9b 0
D wFile s 20
D wFmt s 8 inz('FILD0100')
D wFmtType s 10 inz('*INT')
D wi s 5 0
D wOvr s 1 inz('0')
D wRcdFmt s 10
D wSystem s 10 inz('*LCL')
c
C eval wFile = xFile
C eval wRcdFmt = xRcdFmt
c* get size needed
C call 'QDBRTVFD'
C parm wFDSize
C parm 8 wFDLen
C parm wRtnFile
C parm wFmt
C parm wFile
C parm wRcdFmt
C parm wOvr
C parm wSystem
C parm wFmtType
C parm wErr
C eval pFD = malloc(wFDSize2)
C call 'QDBRTVFD'
C parm wFD
C parm wFDSize2 wFDLen
C parm wRtnFile
C parm wFmt
C parm wFile
C parm wRcdFmt
C parm wOvr
C parm wSystem
C parm wFmtType
C parm wErr
C movea wFD Qdb_Qdbfh
C return
p OpenFILD0100 e
**********************************************************
** Close file description
**********************************************************
p CloseFILD0100 b export
C dealloc pFD
C return
p CloseFILD0100 e
****************************************************************
** Get Number of Triggers
****************************************************************
p GetNbrTrg b export
d pi like(qdbfTrgN)
C eval pQdbpf = pFD + Qdbpfof
C return qdbfTrgN
P GetNbrTrg e
****************************************************************
** Get First Trigger
****************************************************************
p GetFirstTrg b export
d pi 1
C eval pQdbpf = pFD + Qdbpfof
C eval wCurTrg = 1
C if qdbfOTrg > 0
C eval pQdbfTrg = pFD + qdbfOTrg
C return '0'
C else
C return '1'
C endif
p GetFirstTrg e
***********************************************************************
** Get Next Trigger
***********************************************************************
p GetNextTrg b export
d pi 1
C if wCurTrg < qdbfTrgN
C eval wCurTrg = wCurTrg + 1
C eval pQdbfTrg = pQdbfTrg + %size(qdb_qdbfTrg)
C return '0'
C else
C return '1'
C endif
p GetNextTrg e
**********************************************************
** Get Trigger Time
**********************************************************
p GetTrgTime b export
d pi 10
C select
C when qdbfTrgT = '1'
C return 'AFTER'
C when qdbfTrgT = '2'
C return 'BEFORE'
C other
C return qdbfTrgT
C endsl
p GetTrgTime e
********************************************************
** Get Trigger Event
********************************************************
p GetTrgEvent b export
d pi 10
C select
C when qdbfTrgE = '1'
C return 'INSERT'
C when qdbfTrgE = '2'
C return 'DELETE'
C when qdbfTrgE = '3'
C return 'UPDATE'
C other
C return qdbfTrgE
C endsl
p GetTrgEvent e
********************************************************
** Get Trigger Program
********************************************************
p GetTrgPgm b export
d pi like (qdbfTPgm)
C return qdbfTPgm
p GetTrgPgm e
********************************************************
** Get Trigger Program Library
********************************************************
p GetTrgPgmLib b export
d pi like (qdbftplb)
C return qdbfTPLb
p GetTrgPgmLib e
*****************************************************
** Get Trigger Update Condition
*****************************************************
p GetTrgUpdCond b export
d pi 10
C select
C when qdbfTUpd = '1'
C return 'ALWAYS'
C when qdbfTUpd = '2'
C return 'CHANGE'
C other
C return qdbfTUpd
C endsl
p GetTrgUpdCond e
malloc is defined like this:
*******************************************************
** Allocate memory
*******************************************************
p malloc b export
d pi *
d xSize 9b 0 const
d pPtr s *
C alloc xSize pPtr
C return pPtr
p malloc e
*******************************************************
example usage (pseudo)
OpenFilD0100
eval *in99 = GetFirstTrg
dow *in99 = *off
eval fld1 = GetTrgPgm
...
eval *in99 = GetNextTrg
enddo
CloseFilD0100
Hope this helps.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.