datsetfilter.i 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. DEF INPUT PARAMETER ipFeld AS CHAR NO-UNDO.
  2. DEF INPUT PARAMETER ipWert AS CHAR NO-UNDO.
  3. DEF VAR hBuffer AS HANDLE NO-UNDO.
  4. DEF VAR hFeld AS HANDLE NO-UNDO.
  5. DEF VAR cFeld AS CHAR NO-UNDO.
  6. DEF VAR cWert AS CHAR NO-UNDO.
  7. DEF VAR Zahl AS INT NO-UNDO.
  8. DEF VAR KZahl AS DEC NO-UNDO.
  9. DEF VAR Datum AS DATE NO-UNDO.
  10. DEF VAR ix AS INT NO-UNDO.
  11. cFilterFeld = ''.
  12. cFilterWert = ''.
  13. DO ix = 1 TO NUM-ENTRIES(ipFeld, ','):
  14. cFeld = ENTRY(ix, ipFeld, ',') NO-ERROR.
  15. IF cFeld = '' THEN LEAVE.
  16. IF cFeld = '%ENDE%' THEN LEAVE.
  17. cWert = ENTRY(ix, ipWert, CHR(01)) NO-ERROR.
  18. IF cWert = '' THEN NEXT.
  19. DO WHILE TRUE:
  20. hBuffer = BUFFER {&Tabelle}:HANDLE.
  21. IF NOT VALID-HANDLE (hBuffer) THEN RETURN 'ERROR'.
  22. hFeld = hBuffer:BUFFER-FIELD (cFeld) NO-ERROR.
  23. IF NOT VALID-HANDLE ( hFeld ) THEN RETURN 'ERROR'.
  24. IF hFeld:DATA-TYPE BEGINS 'INT' THEN DO:
  25. Zahl = INTEGER(cWert) NO-ERROR.
  26. IF Zahl = ? THEN cWert = '0'.
  27. LEAVE.
  28. END.
  29. IF hFeld:DATA-TYPE BEGINS 'DEC' THEN DO:
  30. KZahl = DECIMAL(cWert) NO-ERROR.
  31. IF KZahl = ? THEN cWert = '0.0'.
  32. LEAVE.
  33. END.
  34. IF hFeld:DATA-TYPE BEGINS 'DAT' THEN DO:
  35. Datum = DATE(cWert) NO-ERROR.
  36. IF Datum = ? THEN cWert = ?.
  37. ELSE cWert = STRING(Datum,'99.99.9999').
  38. LEAVE.
  39. END.
  40. IF hFeld:DATA-TYPE BEGINS 'LOG' THEN DO:
  41. IF NOT cWert BEGINS 'n' THEN cWert = 'TRUE'.
  42. ELSE cWert = 'FALSE'.
  43. LEAVE.
  44. END.
  45. cWert = QUOTER(cWert).
  46. LEAVE.
  47. END.
  48. IF ix > 1 THEN ASSIGN cFilterFeld = cFilterFeld + ','
  49. cFilterWert = cFilterWert + CHR(01).
  50. cFilterFeld = cFilterFeld + cFeld.
  51. cFilterWert = cFilterWert + cWert.
  52. END.
  53. IF cFilterFeld = '' THEN cFilterFeld = 'CLEAR'.
  54. DYNAMIC-FUNCTION('openQuery':U).