Mitgliederauswertung - Zusatzfelder

Hier können die JVerein-Frischlinge ihre Fragen stellen.

Moderator: heiner

Antworten
screen

Mitgliederauswertung - Zusatzfelder

Beitrag von screen »

Hallo.
Wenn ich eine Mitglieder-Liste per "Auswertung Mitgliedsdaten" ausgeben möchte, wie funktioniert dann die Zusatzfelder-Filterfunktion?
Ich hatte ein Zusatzfeld Mitgliedsschaftstatus angelegt, in dem entweder "aktiv" oder "beendet" steht.
Wenn ich im Zusatzfelder-Bedingungen Dialog nun entweder "aktiv" oder "beendet" eintrage und auf "starten" drücke, bricht er mit folgendem Log ab:

Code: Alles auswählen

error while executing sql statement
org.h2.jdbc.JdbcSQLException: Feld "A.FELDDEFINTION" nicht gefunden
Column "A.FELDDEFINTION" not found; SQL statement:
select distinct mitglied.* from mitglied join zusatzfelder a on a.mitglied = mitglied.id  and a.FELD = ? and a.felddefintion = ? where adresstyp = 1 ORDER BY name, vorname [42122-145]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
	at org.h2.message.DbException.get(DbException.java:167)
	at org.h2.message.DbException.get(DbException.java:144)
	at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:126)
	at org.h2.expression.Comparison.optimize(Comparison.java:154)
	at org.h2.expression.ConditionAndOr.optimize(ConditionAndOr.java:127)
	at org.h2.expression.ConditionAndOr.optimize(ConditionAndOr.java:127)
	at org.h2.command.dml.Select.prepare(Select.java:776)
	at org.h2.command.Parser.prepare(Parser.java:201)
	at org.h2.command.Parser.prepareCommand(Parser.java:213)
	at org.h2.engine.Session.prepareLocal(Session.java:423)
	at org.h2.engine.Session.prepareCommand(Session.java:373)
	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1056)
	at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:71)
	at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:233)
	at de.willuhn.datasource.db.DBServiceImpl.execute(DBServiceImpl.java:446)
	at de.jost_net.JVerein.Queries.MitgliedQuery.get(MitgliedQuery.java:476)
	at de.jost_net.JVerein.Queries.MitgliedQuery.get(MitgliedQuery.java:126)
	at de.jost_net.JVerein.gui.control.MitgliedControl.starteAuswertung(MitgliedControl.java:2750)
	at de.jost_net.JVerein.gui.control.MitgliedControl.access$25(MitgliedControl.java:2746)
	at de.jost_net.JVerein.gui.control.MitgliedControl$25.handleAction(MitgliedControl.java:2164)
	at de.willuhn.jameica.gui.parts.Button$1$1.run(Button.java:152)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(Unknown Source)
	at de.willuhn.jameica.gui.GUI$5.run(GUI.java:787)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Unknown Source)
	at org.eclipse.swt.widgets.Display.syncExec(Unknown Source)
	at de.willuhn.jameica.gui.GUI.startSync(GUI.java:783)
	at de.willuhn.jameica.gui.parts.Button$1.widgetSelected(Button.java:146)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
	at de.willuhn.jameica.gui.GUI.loop(GUI.java:804)
	at de.willuhn.jameica.gui.GUI.init(GUI.java:293)
	at de.willuhn.jameica.system.Application.init(Application.java:143)
	at de.willuhn.jameica.system.Application.newInstance(Application.java:85)
	at de.willuhn.jameica.Main.main(Main.java:78)
Jetzt mal vom Sinn oder Unsinn eines solchen Feldes im Speziellen abgesehen: Wie benutzt man diesen Filter denn generell? Reicht es wenn ich einen Begriff eingebe, oder muss ich kompliziertere Syntax wie !=, = o.ä. benutzen?
Benutzeravatar
heiner
Administrator
Beiträge: 4510
Registriert: Freitag 30. Oktober 2009, 16:44
JVerein-Version: aktuelle Entwicklerversion
Betriebssystem: W10
Kontaktdaten:

Re: Mitgliederauswertung - Zusatzfelder

Beitrag von heiner »

Du musst nur den Begriff eingeben. Bei der Programmierung ist mir bei Zeichenfolge-Zusatzfeldern ein "i" in "Felddefinition" verloren gegangen. In der nächsten Entwicklerversion ist es wieder drin.

Heiner
PS: Denkt daran, eure Vereine unter viewforum.php?f=3 vorzustellen.
Danzelot
Beiträge: 294
Registriert: Freitag 30. Juli 2010, 21:29
Verein: Musica Margaretha Reutti e.V.
Mitglieder: 51
JVerein-Version: 2.8.17
Betriebssystem: Windows
Wohnort: Ulm

Re: Mitgliederauswertung - Zusatzfelder

Beitrag von Danzelot »

Hallo Heiner,

hierzu hätte ich noch einen Wunsch.
Zusatzfelder, die als Zeichenfolge deklariert sind, sollten über LIKE abgefragt werden, sonst muss der eingegebene Text vollständig übereinstimmen.
Ich habe das mal getestet, dabei sind folgende Änderungen vorzunehmen:

1. ZusatzfelderAuswahlDialog:
Änderung von settings.setAttribute("zusatzfeld." + counter + ".cond", "=") auf settings.setAttribute("zusatzfeld." + counter + ".cond", "LIKE"). So wird die Filterbedingung in MitgliedControl.properties gespeichert.

Code: Alles auswählen

  @Override
  protected void paint(Composite parent) throws RemoteException
  {
    LabelGroup group = new LabelGroup(parent, JVereinPlugin.getI18n().tr(
        "Bedingungen"), false);
    felder = new ArrayList<Input>();

    DBIterator it = Einstellungen.getDBService().createList(
        Felddefinition.class);
    int counter = 0;
    while (it.hasNext())
    {
      Felddefinition fd = (Felddefinition) it.next();
      switch (fd.getDatentyp())
      {
        case Datentyp.ZEICHENFOLGE:
        {
          TextInput input = new TextInput("", fd.getLaenge());
          input.setName(fd.getLabel());
          felder.add(input);
          group.addInput(input);
          counter++;
          settings
              .setAttribute("zusatzfeld." + counter + ".name", fd.getName());
          settings.setAttribute("zusatzfeld." + counter + ".cond", "LIKE");
          settings.setAttribute("zusatzfeld." + counter + ".datentyp",
              fd.getDatentyp());
          settings.setAttribute("zusatzfeld." + counter + ".definition",
              fd.getID());
          input.setValue(settings.getString("zusatzfeld." + counter + ".value",
              ""));
          break;
        }
       ....
2. MitgliedQuery:
Änderung von bedingungen.add(value) auf bedingungen.add(value + "%"), damit alle Datensätze gefunden werden, bei denen das Zusatzfeld mit dem Wert aus value beginnt. Zusätzlich habe ich über lower(...) dafür gesorgt, dass die Abfrage nun unabhängig von Groß- und Kleinschreibung ist.

Code: Alles auswählen

  public ArrayList<?> get(final String anfangsbuchstabe, final int adresstyp)
      throws RemoteException
  {
    final DBService service = Einstellungen.getDBService();
    final ArrayList<Object> bedingungen = new ArrayList<Object>();

    this.sql = "select distinct mitglied.* ";
    final String sort = (String) this.control.getSortierung().getValue();
    if (sort.equals(JVereinPlugin.getI18n().tr("Geburtstagsliste")))
    {
      this.sql += ", month(geburtsdatum), day(geburtsdatum) ";
    }
    this.sql += "from mitglied ";
    final Settings settings = this.control.getSettings();
    char synonym = 'a';
    if (settings.getInt("zusatzfelder.selected", 0) > 0)
    {
      for (int i = 1; i <= settings.getInt("zusatzfelder.counter", 0); i++)
      {
        final int definition = settings.getInt("zusatzfeld." + i + ".definition", -1);
        switch (settings.getInt("zusatzfeld." + i + ".datentyp", -1))
        {
          case Datentyp.ZEICHENFOLGE:
          {
            final String value = settings.getString("zusatzfeld." + i + ".value",
                null);
            final String cond = settings.getString("zusatzfeld." + i + ".cond", null);

            if (value != null && value.length() > 0)
            {
              this.sql += "join zusatzfelder " + synonym + " on " + synonym
                  + ".mitglied = mitglied.id  and lower(" + synonym + ".FELD) " + cond
                  + " lower( ? ) and " + synonym + ".felddefinition = ? ";
              synonym++;
              bedingungen.add(value + "%");
              bedingungen.add(definition);
            }
            break;
          }
          ....
Vielleicht kannst Du diese Änderungen in den nächsten Build übernehmen.

Gruß
Danzelot
Benutzeravatar
heiner
Administrator
Beiträge: 4510
Registriert: Freitag 30. Oktober 2009, 16:44
JVerein-Version: aktuelle Entwicklerversion
Betriebssystem: W10
Kontaktdaten:

Re: Mitgliederauswertung - Zusatzfelder

Beitrag von heiner »

Hallo Danzelot,

vielen Dank für deine Anregung. Ich habe sie leicht verändert übernommen. In das Abfragefeld können '%' oder "*" als Joker eingetragen werden. Sofern keine Joker eingetragen wird analog zu "=" gesucht.

Heiner
PS: Denkt daran, eure Vereine unter viewforum.php?f=3 vorzustellen.
Antworten