/* ---------------------------------------------------------- */ /* openQuery mit Filter-Setzen */ /* ---------------------------------------------------------- */ DEFINE VARIABLE x1 AS INTEGER NO-UNDO. DEFINE VARIABLE x2 AS INTEGER NO-UNDO. DEFINE VARIABLE xFileName AS CHARACTER NO-UNDO. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO. DEFINE VARIABLE hqBuffer AS HANDLE NO-UNDO. DEFINE VARIABLE cWert AS CHARACTER NO-UNDO. DEFINE VARIABLE yWhere AS CHARACTER NO-UNDO. IF cSort <> '' THEN DO: DO x1 = 1 TO NUM-ENTRIES(cSort, ','): xSort = xSort + ' BY ' + ENTRY(x1, cSort, ','). IF fDesc THEN xSort = xSort + ' DESCENDING'. END. xSort = TRIM(xSort). END. DO WHILE TRUE: IF cFilterFeld = '' THEN LEAVE. IF xWhere = '' AND xString = '' THEN DO: xFileName = ENTRY(1, Felder , ','). xFileName = ENTRY(1, xFileName, '.'). CREATE BUFFER hqBuffer FOR TABLE xFileName. x2 = 0. xString = SUBSTITUTE('FOR EACH &1 NO-LOCK ', xFileName ). DO x1 = 2 TO NUM-ENTRIES(Felder, ',') BY 2: cFeld = ENTRY(x1, Felder, ','). hFeld = hqBuffer:BUFFER-FIELD(cFeld). x2 = x2 + 1. CASE hFeld:DATA-TYPE: WHEN 'CHARACTER' THEN cWert = QUOTER(ENTRY(x2, Inhalt, CHR(01))). WHEN 'LOGICAL' THEN cWert = ENTRY(x2, Inhalt, CHR(01)) . WHEN 'INTEGER' THEN cWert = ENTRY(x2, Inhalt, CHR(01)) . WHEN 'DECIMAL' THEN cWert = ENTRY(x2, Inhalt, CHR(01)) . WHEN 'DATE' THEN cWert = ENTRY(x2, Inhalt, CHR(01)) . OTHERWISE cWert = ENTRY(x1, Inhalt, CHR(01)) . END CASE. IF x2 = 1 THEN xString = xString + ' WHERE ' + ENTRY(x1 - 1, Felder, ',') + ' = ' + cWert. ELSE xString = xString + ' AND ' + ENTRY(x1 - 1, Felder, ',') + ' = ' + cWert. END. DO x1 = 1 TO NUM-ENTRIES(cFilterFeld, ','): IF cFilterFeld = 'CLEAR' THEN LEAVE. xString = xString + ' AND '. xString = xString + '{&Tabelle}.' + ENTRY(x1, cFilterFeld, ',') + ' = ' + ENTRY(x1, cFilterWert, CHR(01)) + ' '. END. xString = xString + ' INDEXED-REPOSITION '. DELETE OBJECT hqBuffer NO-ERROR. LEAVE. END. xFileName = '{&Tabelle}'. CREATE BUFFER hqBuffer FOR TABLE xFileName . yWhere = ''. DO x1 = 1 TO NUM-ENTRIES(cFilterFeld, ','): IF cFilterFeld = 'CLEAR' THEN LEAVE. yWhere = yWhere + ' AND ' + '{&Tabelle}.' + TRIM(ENTRY(x1, cFilterFeld, ',')) + ' = ' + ENTRY(x1, cFilterWert, CHR(01)) + ' '. END. IF xWhere <> '' THEN DO: xWhere = xWhere + yWhere. LEAVE. END. xString = TRIM(REPLACE(xString, 'NO-LOCK', '')). xString = TRIM(REPLACE(xString, 'INDEXED-REPOSITION', '')). xString = xString + yWhere + ' NO-LOCK INDEXED-REPOSITION '. LEAVE. END. IF VALID-HANDLE(hqBuffer) THEN DELETE OBJECT hqBuffer NO-ERROR.