| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /*------------------------------------------------------------------------
- File : DBAbgleich.p
- Purpose :
- Syntax :
- Description :
- Author(s) : walter.riechsteiner
- Created : Mon Jun 29 17:48:36 CEST 2020
- Notes :
- ----------------------------------------------------------------------*/
- /* *************************** Definitions ************************** */
- BLOCK-LEVEL ON ERROR UNDO, THROW.
- DEFINE VARIABLE hQueryA AS HANDLE NO-UNDO.
- DEFINE VARIABLE hBufferA AS HANDLE NO-UNDO.
- DEFINE VARIABLE htTable AS HANDLE NO-UNDO.
- DEFINE VARIABLE htBuffer AS HANDLE NO-UNDO.
- DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cUnique AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lFirma AS LOGICAL NO-UNDO.
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE iNeu AS INTEGER NO-UNDO.
- DEFINE VARIABLE iAlt AS INTEGER NO-UNDO.
- DEFINE VARIABLE lFound AS LOGICAL NO-UNDO.
- DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO EXTENT 9.
- DEFINE VARIABLE cType AS CHARACTER NO-UNDO EXTENT 9.
- DEFINE VARIABLE cParam AS CHARACTER NO-UNDO EXTENT 9.
- DEFINE VARIABLE lEqual AS LOGICAL NO-UNDO.
- DEFINE VARIABLE cDatei AS CHARACTER NO-UNDO.
- /* ******************** Preprocessor Definitions ******************** */
- /* *************************** Main Block *************************** */
- cDatei = 'C:\Entwicklung\TEMP\DBABGLEICH\Huber_db.log'.
- OUTPUT TO VALUE(cDatei) APPEND NO-MAP NO-CONVERT.
- PUT CONTROL CHR(10).
- OUTPUT CLOSE.
- FOR EACH Anadat._File NO-LOCK
- WHERE NOT Anadat._File._File-Name BEGINS '_'
- AND NOT Anadat._File._File-name BEGINS 'SYS':
-
- /* IF NOT Anadat._File._File-Name BEGINS 'Adr' AND */
- /* NOT Anadat._File._File-Name BEGINS 'Art' AND */
- /* NOT Anadat._File._File-name BEGINS 'Auf' AND */
- /* NOT Anadat._File._File-name BEGINS 'Rue' AND */
- /* NOT Anadat._File._File-name BEGINS 'Sp' THEN NEXT. */
-
- IF Anadat._File._File-Name = 'Artbw' THEN NEXT.
-
- FIND FIRST Anadat._Field NO-LOCK
- WHERE Anadat._Field._File-Recid = RECID(Anadat._File)
- AND Anadat._Field._Field-Name = 'Firma' NO-ERROR.
- lFirma = (IF AVAILABLE Anadat._Field THEN TRUE ELSE FALSE).
- CREATE BUFFER hBufferA FOR TABLE Anadat._File._File-Name.
- CREATE TEMP-TABLE htTable.
- htTable:CREATE-LIKE(hBufferA).
- htTable:TEMP-TABLE-PREPARE(SUBSTITUTE('t&1', Anadat._File._File-Name)).
- htBuffer = htTable:DEFAULT-BUFFER-HANDLE.
-
- CREATE QUERY hQueryA.
- hQueryA:SET-BUFFERS (hBufferA).
- IF lFirma THEN cWhere = SUBSTITUTE('FOR EACH Anadat.&1 WHERE Anadat.&1.Firma = "1000" ', Anadat._File._File-Name).
- ELSE cWhere = SUBSTITUTE('FOR EACH Anadat.&1 ', Anadat._File._File-Name).
- hQueryA:QUERY-PREPARE(cWhere).
- hQueryA:QUERY-OPEN().
- hQueryA:GET-FIRST().
- i1 = 0.
- DO WHILE NOT hQueryA:QUERY-OFF-END:
- htBuffer:BUFFER-CREATE().
- htBuffer:BUFFER-COPY(hBufferA).
- i1 = i1 + 1.
- hQueryA:GET-NEXT().
- END.
- hQueryA:QUERY-CLOSE().
- DELETE OBJECT hQueryA.
- DELETE OBJECT hBufferA.
-
- CONNECT '-db Ge_MIS -N TCP -S 17010 -ld TEST ' NO-ERROR.
-
- FIND Anadat._Index WHERE RECID(Anadat._Index) = Anadat._File._Prime-Index.
- cWhere = ''.
- cFeld = ''.
- cType = ''.
- cUnique = ''.
- i1 = 0.
- iNeu = 0.
- iAlt = 0.
- FOR EACH Anadat._Index-Field OF Anadat._Index,
- FIRST Anadat._Field NO-LOCK
- WHERE RECID(Anadat._Field) = Anadat._Index-Field._Field-Recid.
- i1 = i1 + 1.
- cFeld[i1] = Anadat._Field._Field-Name.
- cType[i1] = Anadat._Field._Data-Type.
- cUnique = cUnique
- + (IF cUnique = '' THEN 'WHERE ' ELSE 'AND ').
- cUnique = cUnique
- + SUBSTITUTE('TEST.&1.&2 = ', Anadat._File._File-Name, Anadat._Field._Field-Name).
- CASE cType[i1].
- WHEN 'character' THEN
- cUnique = cUnique + '"&' + STRING(i1,"9") + '" '.
- OTHERWISE
- cUnique = cUnique + '&' + STRING(i1,"9") + ' '.
- END CASE.
- END.
-
- CREATE BUFFER hBufferA FOR TABLE SUBSTITUTE('TEST.&1', Anadat._File._File-Name).
- hBufferA:DISABLE-LOAD-TRIGGERS(FALSE).
-
- CREATE QUERY hQueryA.
- hQueryA:SET-BUFFERS (htBuffer).
- cWhere = SUBSTITUTE('FOR EACH &1 ', htBuffer:NAME).
- hQueryA:QUERY-PREPARE(cWhere).
- hQueryA:QUERY-OPEN().
- hQueryA:GET-FIRST().
- i1 = 0.
- DO WHILE NOT hQueryA:QUERY-OFF-END TRANSACTION:
- cParam = ''.
- DO i1 = 1 TO 9:
- IF cFeld[i1] = '' THEN LEAVE.
- cParam[i1] = htBuffer:BUFFER-FIELD(cFeld[i1]):BUFFER-VALUE(0).
- END.
- cWhere = SUBSTITUTE(cUnique, cParam[01], cParam[02], cParam[03], cParam[04], cParam[05], cParam[06], cParam[07], cParam[08], cParam[09]).
- lFound = hBufferA:FIND-UNIQUE(cWhere, EXCLUSIVE-LOCK, NO-WAIT) NO-ERROR.
- IF hBufferA:LOCKED THEN DO:
- hQueryA:GET-NEXT().
- NEXT.
- END.
- IF NOT lFound THEN
- DO:
- hBufferA:BUFFER-CREATE().
- hBufferA:BUFFER-COPY(htBuffer).
- hBufferA:BUFFER-RELEASE.
- iNeu = iNeu + 1.
- END.
- ELSE
- DO:
- lEqual = htBuffer:BUFFER-COMPARE(hBufferA).
- IF NOT lEqual THEN DO:
- hBufferA:BUFFER-COPY(htBuffer).
- iAlt = iAlt + 1.
- END.
- hBufferA:BUFFER-RELEASE.
- END.
- hQueryA:GET-NEXT().
- END.
- hQueryA:QUERY-CLOSE().
- DELETE OBJECT hQueryA.
-
- DELETE OBJECT htTable.
- DELETE OBJECT hBufferA.
-
- DISCONNECT 'TEST'.
-
- OUTPUT TO VALUE(cDatei) APPEND NO-MAP NO-CONVERT.
- PUT CONTROL
- STRING(TODAY,'99.99.9999') ' '
- STRING(TIME ,'HH:MM:SS') ' '
- STRING(Anadat._File._File-Name,"x(20)")
- STRING(iNeu,'zzz,zzz,zz9') ' '
- STRING(iAlt,'zzz,zzz,zz9') ' ' CHR(10).
- OUTPUT CLOSE.
- END.
|