DBAbgleich.p 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*------------------------------------------------------------------------
  2. File : DBAbgleich.p
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Mon Jun 29 17:48:36 CEST 2020
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. /* *************************** Definitions ************************** */
  11. BLOCK-LEVEL ON ERROR UNDO, THROW.
  12. DEFINE VARIABLE hQueryA AS HANDLE NO-UNDO.
  13. DEFINE VARIABLE hBufferA AS HANDLE NO-UNDO.
  14. DEFINE VARIABLE htTable AS HANDLE NO-UNDO.
  15. DEFINE VARIABLE htBuffer AS HANDLE NO-UNDO.
  16. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  17. DEFINE VARIABLE cUnique AS CHARACTER NO-UNDO.
  18. DEFINE VARIABLE lFirma AS LOGICAL NO-UNDO.
  19. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  20. DEFINE VARIABLE iNeu AS INTEGER NO-UNDO.
  21. DEFINE VARIABLE iAlt AS INTEGER NO-UNDO.
  22. DEFINE VARIABLE lFound AS LOGICAL NO-UNDO.
  23. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO EXTENT 9.
  24. DEFINE VARIABLE cType AS CHARACTER NO-UNDO EXTENT 9.
  25. DEFINE VARIABLE cParam AS CHARACTER NO-UNDO EXTENT 9.
  26. DEFINE VARIABLE lEqual AS LOGICAL NO-UNDO.
  27. DEFINE VARIABLE cDatei AS CHARACTER NO-UNDO.
  28. /* ******************** Preprocessor Definitions ******************** */
  29. /* *************************** Main Block *************************** */
  30. cDatei = 'C:\Entwicklung\TEMP\DBABGLEICH\Huber_db.log'.
  31. OUTPUT TO VALUE(cDatei) APPEND NO-MAP NO-CONVERT.
  32. PUT CONTROL CHR(10).
  33. OUTPUT CLOSE.
  34. FOR EACH Anadat._File NO-LOCK
  35. WHERE NOT Anadat._File._File-Name BEGINS '_'
  36. AND NOT Anadat._File._File-name BEGINS 'SYS':
  37. /* IF NOT Anadat._File._File-Name BEGINS 'Adr' AND */
  38. /* NOT Anadat._File._File-Name BEGINS 'Art' AND */
  39. /* NOT Anadat._File._File-name BEGINS 'Auf' AND */
  40. /* NOT Anadat._File._File-name BEGINS 'Rue' AND */
  41. /* NOT Anadat._File._File-name BEGINS 'Sp' THEN NEXT. */
  42. IF Anadat._File._File-Name = 'Artbw' THEN NEXT.
  43. FIND FIRST Anadat._Field NO-LOCK
  44. WHERE Anadat._Field._File-Recid = RECID(Anadat._File)
  45. AND Anadat._Field._Field-Name = 'Firma' NO-ERROR.
  46. lFirma = (IF AVAILABLE Anadat._Field THEN TRUE ELSE FALSE).
  47. CREATE BUFFER hBufferA FOR TABLE Anadat._File._File-Name.
  48. CREATE TEMP-TABLE htTable.
  49. htTable:CREATE-LIKE(hBufferA).
  50. htTable:TEMP-TABLE-PREPARE(SUBSTITUTE('t&1', Anadat._File._File-Name)).
  51. htBuffer = htTable:DEFAULT-BUFFER-HANDLE.
  52. CREATE QUERY hQueryA.
  53. hQueryA:SET-BUFFERS (hBufferA).
  54. IF lFirma THEN cWhere = SUBSTITUTE('FOR EACH Anadat.&1 WHERE Anadat.&1.Firma = "1000" ', Anadat._File._File-Name).
  55. ELSE cWhere = SUBSTITUTE('FOR EACH Anadat.&1 ', Anadat._File._File-Name).
  56. hQueryA:QUERY-PREPARE(cWhere).
  57. hQueryA:QUERY-OPEN().
  58. hQueryA:GET-FIRST().
  59. i1 = 0.
  60. DO WHILE NOT hQueryA:QUERY-OFF-END:
  61. htBuffer:BUFFER-CREATE().
  62. htBuffer:BUFFER-COPY(hBufferA).
  63. i1 = i1 + 1.
  64. hQueryA:GET-NEXT().
  65. END.
  66. hQueryA:QUERY-CLOSE().
  67. DELETE OBJECT hQueryA.
  68. DELETE OBJECT hBufferA.
  69. CONNECT '-db Ge_MIS -N TCP -S 17010 -ld TEST ' NO-ERROR.
  70. FIND Anadat._Index WHERE RECID(Anadat._Index) = Anadat._File._Prime-Index.
  71. cWhere = ''.
  72. cFeld = ''.
  73. cType = ''.
  74. cUnique = ''.
  75. i1 = 0.
  76. iNeu = 0.
  77. iAlt = 0.
  78. FOR EACH Anadat._Index-Field OF Anadat._Index,
  79. FIRST Anadat._Field NO-LOCK
  80. WHERE RECID(Anadat._Field) = Anadat._Index-Field._Field-Recid.
  81. i1 = i1 + 1.
  82. cFeld[i1] = Anadat._Field._Field-Name.
  83. cType[i1] = Anadat._Field._Data-Type.
  84. cUnique = cUnique
  85. + (IF cUnique = '' THEN 'WHERE ' ELSE 'AND ').
  86. cUnique = cUnique
  87. + SUBSTITUTE('TEST.&1.&2 = ', Anadat._File._File-Name, Anadat._Field._Field-Name).
  88. CASE cType[i1].
  89. WHEN 'character' THEN
  90. cUnique = cUnique + '"&' + STRING(i1,"9") + '" '.
  91. OTHERWISE
  92. cUnique = cUnique + '&' + STRING(i1,"9") + ' '.
  93. END CASE.
  94. END.
  95. CREATE BUFFER hBufferA FOR TABLE SUBSTITUTE('TEST.&1', Anadat._File._File-Name).
  96. hBufferA:DISABLE-LOAD-TRIGGERS(FALSE).
  97. CREATE QUERY hQueryA.
  98. hQueryA:SET-BUFFERS (htBuffer).
  99. cWhere = SUBSTITUTE('FOR EACH &1 ', htBuffer:NAME).
  100. hQueryA:QUERY-PREPARE(cWhere).
  101. hQueryA:QUERY-OPEN().
  102. hQueryA:GET-FIRST().
  103. i1 = 0.
  104. DO WHILE NOT hQueryA:QUERY-OFF-END TRANSACTION:
  105. cParam = ''.
  106. DO i1 = 1 TO 9:
  107. IF cFeld[i1] = '' THEN LEAVE.
  108. cParam[i1] = htBuffer:BUFFER-FIELD(cFeld[i1]):BUFFER-VALUE(0).
  109. END.
  110. cWhere = SUBSTITUTE(cUnique, cParam[01], cParam[02], cParam[03], cParam[04], cParam[05], cParam[06], cParam[07], cParam[08], cParam[09]).
  111. lFound = hBufferA:FIND-UNIQUE(cWhere, EXCLUSIVE-LOCK, NO-WAIT) NO-ERROR.
  112. IF hBufferA:LOCKED THEN DO:
  113. hQueryA:GET-NEXT().
  114. NEXT.
  115. END.
  116. IF NOT lFound THEN
  117. DO:
  118. hBufferA:BUFFER-CREATE().
  119. hBufferA:BUFFER-COPY(htBuffer).
  120. hBufferA:BUFFER-RELEASE.
  121. iNeu = iNeu + 1.
  122. END.
  123. ELSE
  124. DO:
  125. lEqual = htBuffer:BUFFER-COMPARE(hBufferA).
  126. IF NOT lEqual THEN DO:
  127. hBufferA:BUFFER-COPY(htBuffer).
  128. iAlt = iAlt + 1.
  129. END.
  130. hBufferA:BUFFER-RELEASE.
  131. END.
  132. hQueryA:GET-NEXT().
  133. END.
  134. hQueryA:QUERY-CLOSE().
  135. DELETE OBJECT hQueryA.
  136. DELETE OBJECT htTable.
  137. DELETE OBJECT hBufferA.
  138. DISCONNECT 'TEST'.
  139. OUTPUT TO VALUE(cDatei) APPEND NO-MAP NO-CONVERT.
  140. PUT CONTROL
  141. STRING(TODAY,'99.99.9999') ' '
  142. STRING(TIME ,'HH:MM:SS') ' '
  143. STRING(Anadat._File._File-Name,"x(20)")
  144. STRING(iNeu,'zzz,zzz,zz9') ' '
  145. STRING(iAlt,'zzz,zzz,zz9') ' ' CHR(10).
  146. OUTPUT CLOSE.
  147. END.