datopenquery.i 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /* ---------------------------------------------------------- */
  2. /* openQuery mit Filter-Setzen */
  3. /* ---------------------------------------------------------- */
  4. DEFINE VARIABLE x1 AS INTEGER NO-UNDO.
  5. DEFINE VARIABLE x2 AS INTEGER NO-UNDO.
  6. DEFINE VARIABLE xFileName AS CHARACTER NO-UNDO.
  7. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  8. DEFINE VARIABLE hqBuffer AS HANDLE NO-UNDO.
  9. DEFINE VARIABLE cWert AS CHARACTER NO-UNDO.
  10. DEFINE VARIABLE yWhere AS CHARACTER NO-UNDO.
  11. IF cSort <> '' THEN
  12. DO:
  13. DO x1 = 1 TO NUM-ENTRIES(cSort, ','):
  14. xSort = xSort + ' BY ' + ENTRY(x1, cSort, ',').
  15. IF fDesc THEN xSort = xSort + ' DESCENDING'.
  16. END.
  17. xSort = TRIM(xSort).
  18. END.
  19. DO WHILE TRUE:
  20. IF cFilterFeld = '' THEN LEAVE.
  21. IF xWhere = '' AND
  22. xString = '' THEN
  23. DO:
  24. xFileName = ENTRY(1, Felder , ',').
  25. xFileName = ENTRY(1, xFileName, '.').
  26. CREATE BUFFER hqBuffer FOR TABLE xFileName.
  27. x2 = 0.
  28. xString = SUBSTITUTE('FOR EACH &1 NO-LOCK ', xFileName ).
  29. DO x1 = 2 TO NUM-ENTRIES(Felder, ',') BY 2:
  30. cFeld = ENTRY(x1, Felder, ',').
  31. hFeld = hqBuffer:BUFFER-FIELD(cFeld).
  32. x2 = x2 + 1.
  33. CASE hFeld:DATA-TYPE:
  34. WHEN 'CHARACTER' THEN
  35. cWert = QUOTER(ENTRY(x2, Inhalt, CHR(01))).
  36. WHEN 'LOGICAL' THEN
  37. cWert = ENTRY(x2, Inhalt, CHR(01)) .
  38. WHEN 'INTEGER' THEN
  39. cWert = ENTRY(x2, Inhalt, CHR(01)) .
  40. WHEN 'DECIMAL' THEN
  41. cWert = ENTRY(x2, Inhalt, CHR(01)) .
  42. WHEN 'DATE' THEN
  43. cWert = ENTRY(x2, Inhalt, CHR(01)) .
  44. OTHERWISE
  45. cWert = ENTRY(x1, Inhalt, CHR(01)) .
  46. END CASE.
  47. IF x2 = 1 THEN xString = xString + ' WHERE ' + ENTRY(x1 - 1, Felder, ',') + ' = ' + cWert.
  48. ELSE xString = xString + ' AND ' + ENTRY(x1 - 1, Felder, ',') + ' = ' + cWert.
  49. END.
  50. DO x1 = 1 TO NUM-ENTRIES(cFilterFeld, ','):
  51. IF cFilterFeld = 'CLEAR' THEN LEAVE.
  52. xString = xString + ' AND '.
  53. xString = xString + '{&Tabelle}.'
  54. + ENTRY(x1, cFilterFeld, ',')
  55. + ' = '
  56. + ENTRY(x1, cFilterWert, CHR(01))
  57. + ' '.
  58. END.
  59. xString = xString + ' INDEXED-REPOSITION '.
  60. DELETE OBJECT hqBuffer NO-ERROR.
  61. LEAVE.
  62. END.
  63. xFileName = '{&Tabelle}'.
  64. CREATE BUFFER hqBuffer FOR TABLE xFileName .
  65. yWhere = ''.
  66. DO x1 = 1 TO NUM-ENTRIES(cFilterFeld, ','):
  67. IF cFilterFeld = 'CLEAR' THEN LEAVE.
  68. yWhere = yWhere
  69. + ' AND '
  70. + '{&Tabelle}.'
  71. + TRIM(ENTRY(x1, cFilterFeld, ','))
  72. + ' = '
  73. + ENTRY(x1, cFilterWert, CHR(01))
  74. + ' '.
  75. END.
  76. IF xWhere <> '' THEN
  77. DO:
  78. xWhere = xWhere
  79. + yWhere.
  80. LEAVE.
  81. END.
  82. xString = TRIM(REPLACE(xString, 'NO-LOCK', '')).
  83. xString = TRIM(REPLACE(xString, 'INDEXED-REPOSITION', '')).
  84. xString = xString
  85. + yWhere
  86. + ' NO-LOCK INDEXED-REPOSITION '.
  87. LEAVE.
  88. END.
  89. IF VALID-HANDLE(hqBuffer) THEN DELETE OBJECT hqBuffer NO-ERROR.