This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

--Filterung von Daten

Dokumente für die Entwicklung von und mit JVx.

--Filterung von Daten

Postby Development@SIB » Tue Sep 29, 2009 4:06 pm



Dieser Artikel ist veraltet - Bitte verwenden Sie unser neues System

https://doc.sibvisions.com





Die Anzeige von Daten aus einer Datenbank Tabelle ist Grundvoraussetzung für Datenbank Applikationen. Eine weitere Grundvoraussetzung ist die Einschränkung der Datenmenge. Dies kann Clientseitig durchgeführt werden und auch Datenbankseitig.

Am Client wird die Filterung im Hauptspeicher durchgeführt, das setzt allerdings voraus das alle Daten vom Server/Datenbank zum Client übertragen werden. Bei geringen Datenmengen sollte das keine Probleme bereiten und reduziert die Kommunikation. Dabei ist allerdings zu beachten, daß die Daten manuell aktualisiert werden müssen!

Die Datenbankseitige Filterung ist die Standardeinstellung und in den meisten Fällen die bessere Wahl. Dabei wird das SQL Kommando um die Filterbedingung erweitert und die Datenmenge wird dadurch bereits von der Datenbank eingeschränkt. Für den Client wird dann nur noch die eingeschränkte Datenmenge aufbereitet und aufgrund von Load-on-Demand wird auch hier nur die tatsächlich benötigte Menge übertragen. Außerdem wird immer auf die Echtdaten zugegriffen.


Anwendungsbeispiel

Unsere Applikation verwaltet Kontaktdaten (Personen, Adresse, usw.). In einer unserer Masken existiert ein Feld in dem ein Suchbegriff eingegeben werden kann. Durch einen Button wird eine Wildcard Suche nach Vorname, Nachname, Straße, Ort ausgelöst.

Nachfolgende Client Action führt die gewünschte Filterung durch:

Code: Select all
/**
 * Searches the contacts with the search text.
 *
 * @throws ModelException if the search fails
 */
public void doFilter() throws ModelException
{
   String sText = (String)drSearch.getValue("SEARCH");

   if (sText == null)
   {
      //reset the filter: show all rows
      rdbContacts.setFilter(null);
   }
   else
   {
      //set the filter: show only found rows
      ICondition filter = new LikeIgnoreCase("FIRSTNAME", "*" + sText + "*").or(
                     new LikeIgnoreCase("LASTNAME", "*" + sText + "*").or(
                     new LikeIgnoreCase("STREET", "*" + sText + "*").or(
                     new LikeIgnoreCase("TOWN", "*" + sText + "*"))));
      rdbContacts.setFilter(filter);
   }
}

Der Filter bzw. die Condition wird auf ein RemoteDataBook angewandt und wie von SQL bekannt zusammengesetzt. Unsere Condition sucht nach dem Vorkommen des eingegebenen Textes, entweder im Vornamen, dem Nachnamen, der Straße oder der Stadt.

Für die Filterung ausschließlich am Client, müsste das RemoteDataBook wie folgt konfiguriert werden:

Code: Select all
rdbContacts.setMemFilter(true);
User avatar
Development@SIB
 
Posts: 325
Joined: Mon Sep 28, 2009 1:54 pm

Return to Documentation (DE)