|
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-2024 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.