# JComboBox mit Ergebnis einer SQL Abfrage füllen



## Sabrina2612 (31. Mai 2011)

Hallo Leute,

ich möchte gerne eine JComboBox mit einer SQL Ergebnis  (Resultset) füllen.

Ich möchte in der ersten Dropbox die Tabelle Fach auslesen (nur Name) dann soll man in der Vorlesung Dropbox die zugehörigen Fächer auslesen. Die Datenbank is so realisiert:
Eine Tabelle Fach, Vorlesung, Kombi FV (Für Fach + Vorlesung) Es gibt pro Fach mehrere Vorlesungen.

Habt Ihr eine Idee. Meine GUI steht schon. Kann den Code gerne auf Anfrage posten. 

LG Sabrina


----------



## Sabrina2612 (1. Jun 2011)

Hallo nochmal,

es wäre sehr nett wenn mir jemand sobald wie möglich antworten könnte. 
Es geht hier um ein Uni Projekt, ich würde hier auch nix posten wenn ich nicht selbst schon gesucht hätte.

Lg Sabrina


----------



## SlaterB (1. Jun 2011)

was soll man zu so einer allgemeinen Frage sagen?
irgendwo besteht ein Programm aus Code, dort lädst du Daten aus der DB und schreibst sie in die Comboboxen, genau so wie benötigt,
fertig, brachte dich dieser Satz weiter?
wenn du dazu Detailfragen hast musst du sie stellen, es sind hundert Dinge zu beachten, allein alles zu Datenbanken, alles zur GUI, das ganze zusammenführen, sicherlich zig bis hunderte Zeilen Code und Stunden Arbeit,

aber da kann man keine generellen Tipps geben, außer nach Möglichkeit alles separat zu testen,
die DB-Abfragen in einem Konsolen-Programm ohne sich mit der GUI zu belasten,
die GUI-Vorgänge erstmal mit Dummy-Daten durchspielen, ohne gleichzeitig am SQL zu hadern,
wenn alle Einzelteile funktionieren, dann zusammenbringen

es ist nicht ganz klar, ob bei der Auswahl in einer Box noch weitere spezielle DB-Abfragen ausgeführt und Ergebnisse in andere Strukturen geschrieben werden, wenn ja dann ist das an sich auch ein normaler Vorgang:
an die erste JComboBox gehört ein Listener, der reagiert auf die Auswahl eines Faches mit einer Datenbankabfrage und schreibt die Ergebnisse wohin auch immer

nichts spannendes bisher


----------



## Sabrina2612 (1. Jun 2011)

Ich habe es mir so gedacht. Ich habe die ComboBox Fach, diese soll mit dem Ergebnis folgender SQL Abfrage gefüllt werden: 
SELECT Name FROM Fach
Nun soll der Benutzer in der ComboBox ein Fach auswählen und zu dem entsprechenden Fach die Vorlesungen ausgeben.
Somit muss man ein SQL Befehl abhängig von dem ausgewählten ausführen um in der ComboBox Vorlesung die entsprechenden Vorlesungen anzuzeigen.
Der SQL Befehl würde eventuell so lauten: 
SELECT Name FROM KombiFV WHERE ID= Auwahl   (Auwahl = das ausgewählte Fach --> ID)

Hoffe das war jetzt spezifischer.

Den Listener für die ComboBox brauch ich ja um das selected Item auszulesen, das kann ich ja dann in die zweite SQL Abfrage einbinden als Variable.
BZH vorher noch herausfinden welche ID hinter dem ausgewählten Fach steht.

LG Sabrina


----------



## SlaterB (1. Jun 2011)

das sind schon mehr Infos, in der Tat,

du kannst entweder am Anfang die Ids zu den Fächern merken, per Map oder gleich richtiges Fach-Objekt statt nur String in Combobox,
oder später die SQL-Query so bauen dass sie mit dem Fach-Namen auskommt, der ja hoffentlich ausreicht, Join über Fach-Tabelle

[c]select * from KombiFV k, Fach f where k.id = f.id and f.name = ?[/c]

wie du überhaupt ein Info, ob Name oder Id, in eine SQL-Abfrage rein bekommst, ist nicht deine Frage, oder?
zu empfehlen ist gleich PreparedStatement


----------



## Sabrina2612 (1. Jun 2011)

Ok das mit dem prepared Statement hatte ich auch vor. Jetzt ist eher meine Frage wie mache ich das, wenn ich ein Fach auswähle in der ComboBox Fach soll er dann in der ComboBox Vorlesung die entsprechenden Vorlesungen zu dem Fach laden. Wie kann ich sowas programmieren. Muss ich das über selectedItem machen. Er soll mir das ja dynamisch laden oder?

LG Sabrina


----------



## Sabrina2612 (1. Jun 2011)

Also nochmal so als Grundinfo. 
Das ganze ist ein Verwaltungsprogramm. 
EIn Professor wird von einem Administrator angelegt und einem Fachbereich zugeordnet. (Teil1)
Der prof kann nun nach einem Login(Teil2)  ein Fach erstellen(Teil3). 
Zu dem Fach dann mehrere Vorlesungen.(Teil4)
Zu den Vorlesungen Fragen+Antworten .(Teil5)
Es ist etwas kompliziert aber ich weiß ja im prinzip wie ich es mache auch mit den Abfragen ich häng halt nur an dem Füllen der ComboBoxen die ja abhängig voneinander sind.

Hoffe ich konnte es einigermaßen verständlich beschreiben.

Lg Sabrina


----------



## SlaterB (1. Jun 2011)

ein Listener auf die Box, natürlich das selektierte Element anschauen, Query ausführen usw.


----------



## Sabrina2612 (1. Jun 2011)

Ich verstehe. Hast du vielleicht ein BeispielCode dazu?
Das wäre echt nett. Ich kann ja gerne auch mal meinen GUI Code hier posten.

LG Sabrina


----------



## SlaterB (1. Jun 2011)

Database Browser : Database ViewerDatabase SQL JDBCJava


----------



## Sabrina2612 (1. Jun 2011)

Ok dankeschön kann es zwar jetzt nicht wirklich so übernehmen. Ich poste dir hier mal grade meinen Code könntest du mir dann sagen wo ich was reinmachen muss. Das wäre echt nett.

Danke für die Mühe.


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;

public class FA_einegeben extends JFrame {
	
	//Variablen Deklaration
	JComboBox Fach;
	JComboBox Vorlesung;
	JTextField A_1;
	JTextField A_2;
	JTextField A_3;
	JTextField A_4;
	JTextField Frage_Eingabe;
	JButton Speicher_exit;
	JButton Speichern;

	public FA_einegeben() {
		
		//Fenster Informationen
		setTitle("*Fragen und Antworten eingeben*");
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setVisible(true);

		try {
			//AnchorLayout für variable Fenstereinstellung der Komponenten
			AnchorLayout thisLayout = new AnchorLayout();
			getContentPane().setLayout(thisLayout);

			{
				//Auswahl Fach
				ComboBoxModel FachModel = 
					new DefaultComboBoxModel(
							new String[] { "Fach" });
				Fach = new JComboBox();
				getContentPane().add(Fach, new AnchorConstraint(1, 502, 103, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Fach.setModel(FachModel);
				Fach.setPreferredSize(new java.awt.Dimension(209, 35));
			    Fach.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
			      } );
			}

			{
				//Auswahl Vorlesung
				ComboBoxModel VorlesungModel = 
					new DefaultComboBoxModel(
							new String[] { "Vorlesung" });
				Vorlesung = new JComboBox();
				getContentPane().add(Vorlesung, new AnchorConstraint(1, 973, 103, 502, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Vorlesung.setModel(VorlesungModel);
				Vorlesung.setPreferredSize(new java.awt.Dimension(208, 35));
			    Vorlesung.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
			      } );
				
			}
			
			{
				//Fragen Eingabe
				Frage_Eingabe = new JTextField();
				getContentPane().add(Frage_Eingabe, new AnchorConstraint(158, 500, 236, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Frage_Eingabe.setText("Bitte geben Sie eine Frage ein");
				Frage_Eingabe.setPreferredSize(new java.awt.Dimension(208, 27));
			}

			{
				//Antwort 1
				A_1 = new JTextField();
				getContentPane().add(A_1, new AnchorConstraint(283, 200, 364, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_1.setText("Antwort 1");
				A_1.setPreferredSize(new java.awt.Dimension(76, 28));
			}
			
			{
				//Antwort 2
				A_2 = new JTextField();
				getContentPane().add(A_2, new AnchorConstraint(399, 200, 481, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_2.setText("Antwort 2");
				A_2.setPreferredSize(new java.awt.Dimension(76, 28));
			}
			
			{
				//Antwort 3
				A_3 = new JTextField();
				getContentPane().add(A_3, new AnchorConstraint(515, 200, 594, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_3.setText("Antwort 3");
				A_3.setPreferredSize(new java.awt.Dimension(76, 27));
			}
			
			{
				//Antwort 4
				A_4 = new JTextField();
				getContentPane().add(A_4, new AnchorConstraint(629, 200, 707, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_4.setText("Antwort 4");
				A_4.setPreferredSize(new java.awt.Dimension(76, 27));
			}

			{
				//Speichern in die Datenbank
				Speichern = new JButton();
				getContentPane().add(Speichern, new AnchorConstraint(783, 212, 861, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Speichern.setText("Speichern");
				Speichern.setPreferredSize(new java.awt.Dimension(81, 27));

				Speichern.addActionListener(new ActionListener() {
					
					public void actionPerformed(ActionEvent e) {

						DB.Fragen.Einfügen();
						DB.Antwort.Einfügen();
						
						//Funktion für IDs erstellen? (mit SELECT von Tabellen) 
						
						DB.KombiFA.Einfügen();
						
					}
				});
			}
			
			{
				//Speichern in die Datenbank und Fenster schließen
				Speicher_exit = new JButton();
				getContentPane().add(Speicher_exit, new AnchorConstraint(783, 651, 861, 236, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Speicher_exit.setText("Speichern und schließen");
				Speicher_exit.setPreferredSize(new java.awt.Dimension(183, 27));
				
				Speicher_exit.addActionListener(new ActionListener() {
					
					public void actionPerformed(ActionEvent e) {
						
						DB.Fragen.Einfügen();
						DB.Antwort.Einfügen();
						
						//Funktion für IDs erstellen? (mit SELECT von Tabellen) 
						
						DB.KombiFA.Einfügen();
						System.exit(EXIT_ON_CLOSE);
						
					}
				});
				
			}
			
			{
				this.setSize(451, 374);
			}
			
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	
}
```



Das ist jetzt ein Beispiel wo der Dozent Fragen und Antworten zu einer ausgewählten Vorlesung abhängig vom Fach eingeben kann.

Lg Sabrina


----------



## Camino (1. Jun 2011)

Wegen dem Füllen der ComboBox: Ich hatte mir auch mal so etwas ähnliches erstellt, und da ich das an mehreren Stellen brauchte, hab ich mir eine eigene Klasse abgeleitet von JComboBox geschrieben. (Kannst du aber auch direkt in die Klasse schreiben, wo du die ComboBox brauchst.) In dieser Klasse wird eine Liste mit den entsprechenden Objekten (in meinem Beispiel Institut) von der Datenbank geholt und über ein DefaultComboBoxModel in die ComboBox hinzugefügt. In der toString-Methode der Objekte kannst du dann bestimmen, was in der ComboBox von dem Objekt angezeigt wird. Dann hast du in deiner ComboBox die Objekte drin und kannst mit 
	
	
	
	





```
getSelectedItem()
```
 und einem Cast auf das Objekt z.B. die ID holen.


```
public class ComboBoxInstitute
extends JComboBox {
	
	
	public ComboBoxInstitute() {
		
		DBHandler dbHandler = new DBHandler();
		
		// Holt die Liste der Institute von der Datenbank
		ArrayList<Institut> institutListe = dbHandler.getInstitutListe;
		
		DefaultComboBoxModel modelInstitute = new DefaultComboBoxModel();
		for(Institut i : institutListe)
			modelInstitute.addElement(i);
		
		// Der ComboBox wird das Model zugewiesen
		setModel(modelInstitute);
		
	}

}
```


----------



## SlaterB (1. Jun 2011)

du hast ComboBoxen, du hast Listener (ich sag jetzt nicht wo  )

Listener können beliebigen Code enthalten, füge eine Zeile Code nach der anderen ein, da ist überhaupt nix dabei,
ich werde das für dich ganz gewiss nicht machen


----------



## Sabrina2612 (1. Jun 2011)

Ok kein Problem der andere Post hat mir jetzt doch geholfen. So hatte ich das ja auch nicht gemeint. Aber danke für die Mühe. Bin nur momentan total am Verzweifeln.

Lg und Danke
Sabrina


----------



## Sabrina2612 (5. Jun 2011)

So ich habe jetzt hier rumprobiert und kriege es immer noch nicht hin.

Hier mein Code

Das is die GUI (Ausschnitt Fach auswählen in JComboBox)

```
//Auswahl Fach
				Fach = new JComboBox();
				ArrayList items = new ArrayList();
			    Connection conn = null; 
				DB.MySQL_Connection.Treiber();
				DB.MySQL_Connection.Verbindung_Start();
				DB.MySQL_Connection.getConn();
				ResultSet result = MySQL_Connection.conn.executeQuery("SELECT Name FROM Fach");
				while (result.next())
					items.add(result.getString(1));
				result.close();
				DB.MySQL_Connection.Verbindung_Ende();			
				getContentPane().add(Fach, new AnchorConstraint(1, 502, 103, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Fach.setModel(new DefaultComboBoxModel(items.toArray()));
				Fach.setPreferredSize(new java.awt.Dimension(209, 35));
			    Fach.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
			      } );
```

Das sind ide Funktionen der DB

```
package DB;
import java.sql.*; 
 
public class MySQL_Connection {
    
    final static String hostname = "localhost"; 
    final static String port = "3307"; 
    final static String dbname = "clicker"; 
    final static String user = "..."; 
    final static String password = "..."; 
    public static Connection conn = null; 
  

	public static void Treiber(){
        try { 
        	System.out.println("* Treiber laden"); 
            Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
        } 
        catch (Exception e) { 
        	System.err.println("Unable to load driver."); 
            e.printStackTrace(); 
        } 
    }
    
    public static Connection Verbindung_Start(){
        try { 
        	System.out.println("* Verbindung aufbauen"); 
            String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname; 
            conn = DriverManager.getConnection(hostname, user, password); 
        }
        catch (Exception e) { 
            System.err.println("Unable to connect."); 
            e.printStackTrace(); 
        } 
        return conn;
    }
    
    public static void Verbindung_Ende(){
        try {
        	System.out.println("* Verbindung geschlossen"); 
        } 
        catch (Exception e) { 
            System.err.println("Unable to close."); 
            e.printStackTrace(); 
        } 
    }
    

	public static void setConn(Connection conn) {
		MySQL_Connection.conn = conn;
		try {
			conn = DriverManager.getConnection(hostname, user, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
    
    public static Connection getConn() {
		return conn;
	}
	
    public static void main(String[] args) { 
    
    	Treiber();
    	Verbindung_Start();
    	Verbindung_Ende();
    	
    }
        
}
```


Hoffe ihr könnt mir wieder etwas weiterhelfen.


----------



## Sabrina2612 (5. Jun 2011)

Achja er gibt mir einen Fehler in dem GUI Code  in Zeile 8 wegen dem executequery
Lösungsvorschlag wäre casten aber das hilft nix. Habe das gefühl dass conn nicht richtig übergeben wird.

PS der DB Code is eine extra Klasse. Wie kann man die Variable conn mit dem richtigen Wert übergeben an die GUI Klasse.


----------



## awda23ws23 (5. Jun 2011)

Wahrscheinlich

DB.MySQL_Connection.conn.executeQuery


----------



## SlaterB (5. Jun 2011)

welche Fehlermeldung exakt? 
wie sieht es nach dem Casten aus?

die Übergabe beliebiger Objekte von beliebig nach beliebig ist quasi immer dieselbe: im Konstruktor ein Parameter oder später per set-Methode,
innerhalb der Klasse in Attribut längerfristig speichern,

wenn die Information schon im Konstruktor benötigt wird, bleibt logischerweise nur eine der beiden Möglichkeiten


und unbedingt an Konventionen halten: Methoden, Variablen, packages klein schreiben (Treiber(), Fach, DB), nur Klassen groß


----------



## Sabrina2612 (5. Jun 2011)

Die Fehlermeldung lautet:
The Method excecuteQuery(String) is undefined for the typeConnection

Wie muss ich jetzt genau meine Methoden in MySQL Connection umschreiben. Würde halt gerne meine Methoden weiterhin so aufrufen erst Treiber ladenn dann verbindung start dann ein beliebiges statement und zum schluss wieder verbindung ende.

Würdet ihr das auch so vorschlagen?

Ich brauch halt diese Methoden immer wiedre in meinem Programm deswegen habe ich das so ausfgebaut und nicht in einem Konstruktor.


LG Sabrina


----------



## Camino (5. Jun 2011)

Die Methode executeQuery(String) gehört auch zum Statement und nicht zur Connection. Du musst mit Statement und ResultSet arbeiten...


```
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ...");
```


----------



## Sabrina2612 (5. Jun 2011)

Ok habe das jetzt mal mit einem statement umgesetzt nun kommt aber ein fehler:
* Treiber laden
* Verbindung aufbauen
Unable to connect.
java.sql.SQLException: No suitable driver found for localhost
	at java.sql.DriverManager.getConnection(DriverManager.java:640)
	at java.sql.DriverManager.getConnection(DriverManager.java:200)
	at DB.MySQL_Connection.Verbindung_Start(MySQL_Connection.java:29)
	at FA_einegeben.<init>(FA_einegeben.java:69)
	at clicker.actionPerformed(clicker.java:189)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:374)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:829)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:873)
	at java.awt.Component.processMouseEvent(Component.java:6203)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:5968)
	at java.awt.Container.processEvent(Container.java:2105)
	at java.awt.Component.dispatchEventImpl(Component.java:4564)
	at java.awt.Container.dispatchEventImpl(Container.java:2163)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
	at java.awt.Container.dispatchEventImpl(Container.java:2149)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
	at java.awt.EventQueue.access$000(EventQueue.java:96)
	at java.awt.EventQueue$1.run(EventQueue.java:608)
	at java.awt.EventQueue$1.run(EventQueue.java:606)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
	at java.awt.EventQueue$2.run(EventQueue.java:622)
	at java.awt.EventQueue$2.run(EventQueue.java:620)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
java.lang.NullPointerException
	at FA_einegeben.<init>(FA_einegeben.java:70)
	at clicker.actionPerformed(clicker.java:189)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:374)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:829)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:873)
	at java.awt.Component.processMouseEvent(Component.java:6203)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:5968)
	at java.awt.Container.processEvent(Container.java:2105)
	at java.awt.Component.dispatchEventImpl(Component.java:4564)
	at java.awt.Container.dispatchEventImpl(Container.java:2163)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
	at java.awt.Container.dispatchEventImpl(Container.java:2149)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
	at java.awt.EventQueue.access$000(EventQueue.java:96)
	at java.awt.EventQueue$1.run(EventQueue.java:608)
	at java.awt.EventQueue$1.run(EventQueue.java:606)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
	at java.awt.EventQueue$2.run(EventQueue.java:622)
	at java.awt.EventQueue$2.run(EventQueue.java:620)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)


Hier mein Code dazu:

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;

import DB.MySQL_Connection;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;
import com.mysql.jdbc.Statement;



/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class FA_einegeben extends JFrame {
	
	//Variablen Deklaration
	JComboBox Fach;
	JComboBox Vorlesung;
	JTextField A_1;
	JTextField A_2;
	JTextField A_3;
	JTextField A_4;
	JTextField Frage_Eingabe;
	JButton Speicher_exit;
	JButton Speichern;

	public FA_einegeben() {
		
		//Fenster Informationen
		setTitle("*Fragen und Antworten eingeben*");
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setVisible(true);

		try {
			//AnchorLayout für variable Fenstereinstellung der Komponenten
			AnchorLayout thisLayout = new AnchorLayout();
			getContentPane().setLayout(thisLayout);

			{
				//Auswahl Fach
				Fach = new JComboBox();
				ArrayList items = new ArrayList();
			    Connection conn = null; 
			    Statement statement = null;
				DB.MySQL_Connection.Treiber();
				DB.MySQL_Connection.Verbindung_Start();
				ResultSet result = statement.executeQuery("SELECT Name FROM Fach");
				while (result.next())
					items.add(result.getString(1));
				result.close();
				DB.MySQL_Connection.Verbindung_Ende();			
				getContentPane().add(Fach, new AnchorConstraint(1, 502, 103, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Fach.setModel(new DefaultComboBoxModel(items.toArray()));
				Fach.setPreferredSize(new java.awt.Dimension(209, 35));
			    Fach.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
			      } );
			}

			{
				//Auswahl Vorlesung
				ComboBoxModel VorlesungModel = 
					new DefaultComboBoxModel(
							new String[] { "Vorlesung" });
				Vorlesung = new JComboBox();
				getContentPane().add(Vorlesung, new AnchorConstraint(1, 973, 103, 502, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Vorlesung.setModel(VorlesungModel);
				Vorlesung.setPreferredSize(new java.awt.Dimension(208, 35));
			    Vorlesung.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
			      } );
				
			}
			
			{
				//Fragen Eingabe
				Frage_Eingabe = new JTextField();
				getContentPane().add(Frage_Eingabe, new AnchorConstraint(158, 500, 236, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Frage_Eingabe.setText("Bitte geben Sie eine Frage ein");
				Frage_Eingabe.setPreferredSize(new java.awt.Dimension(208, 27));
			}

			{
				//Antwort 1
				A_1 = new JTextField();
				getContentPane().add(A_1, new AnchorConstraint(283, 200, 364, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_1.setText("Antwort 1");
				A_1.setPreferredSize(new java.awt.Dimension(76, 28));
			}
			
			{
				//Antwort 2
				A_2 = new JTextField();
				getContentPane().add(A_2, new AnchorConstraint(399, 200, 481, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_2.setText("Antwort 2");
				A_2.setPreferredSize(new java.awt.Dimension(76, 28));
			}
			
			{
				//Antwort 3
				A_3 = new JTextField();
				getContentPane().add(A_3, new AnchorConstraint(515, 200, 594, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_3.setText("Antwort 3");
				A_3.setPreferredSize(new java.awt.Dimension(76, 27));
			}
			
			{
				//Antwort 4
				A_4 = new JTextField();
				getContentPane().add(A_4, new AnchorConstraint(629, 200, 707, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				A_4.setText("Antwort 4");
				A_4.setPreferredSize(new java.awt.Dimension(76, 27));
			}

			{
				//Speichern in die Datenbank
				Speichern = new JButton();
				getContentPane().add(Speichern, new AnchorConstraint(783, 212, 861, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Speichern.setText("Speichern");
				Speichern.setPreferredSize(new java.awt.Dimension(81, 27));

				Speichern.addActionListener(new ActionListener() {
					
					public void actionPerformed(ActionEvent e) {

						DB.Fragen.Einfügen();
						DB.Antwort.Einfügen();
						
						//Funktion für IDs erstellen? (mit SELECT von Tabellen) 
						
						DB.KombiFA.Einfügen();
						
					}
				});
			}
			
			{
				//Speichern in die Datenbank und Fenster schließen
				Speicher_exit = new JButton();
				getContentPane().add(Speicher_exit, new AnchorConstraint(783, 651, 861, 236, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Speicher_exit.setText("Speichern und schließen");
				Speicher_exit.setPreferredSize(new java.awt.Dimension(183, 27));
				
				Speicher_exit.addActionListener(new ActionListener() {
					
					public void actionPerformed(ActionEvent e) {
						
						DB.Fragen.Einfügen();
						DB.Antwort.Einfügen();
						
						//Funktion für IDs erstellen? (mit SELECT von Tabellen) 
						
						DB.KombiFA.Einfügen();
						System.exit(EXIT_ON_CLOSE);
						
					}
				});
				
			}
			
			{
				this.setSize(451, 374);
			}
			
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	
}
```


----------



## Camino (5. Jun 2011)

Fehlt das?

```
Statement stmt = conn.createStatement();
```


----------



## Sabrina2612 (5. Jun 2011)

Stimmt sorry


----------



## Sabrina2612 (5. Jun 2011)

Hm irgendwie hat er en problem mit meinem treiber muss da nochmal nachschauen.


----------



## Sabrina2612 (7. Jun 2011)

So ich habe das jetzt so umgesetzt. Allerdings kommen immer noch Fehler. Die Klasse FA_eingeben in der der Ausschnitt steht wird aufgerufen durch eine andere Klasse, die das Hauptfenster darstellt.

```
//Auswahl Fach
				Fach = new JComboBox();
				ArrayList<String> items = new ArrayList();
			    DB.MySQL_Connection.Treiber();
				DB.MySQL_Connection.Verbindung_Start();
				Statement statement = DB.MySQL_Connection.createStatement();
				ResultSet result = statement.executeQuery("SELECT Name FROM Fach");
				while (result.next())
					items.add(result.getString(1));
				result.close();
				DB.MySQL_Connection.Verbindung_Ende();			
				getContentPane().add(Fach, new AnchorConstraint(1, 502, 103, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Fach.setModel(new DefaultComboBoxModel(items.toArray()));
				Fach.setPreferredSize(new java.awt.Dimension(209, 35));
			    Fach.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
```

Fehlermeldung sieht so aus:

java.lang.NullPointerException
	at FA_eingeben.<init>(FA_eingeben.java:69)
	at clicker.actionPerformed(clicker.java:189)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:374)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:829)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:873)
	at java.awt.Component.processMouseEvent(Component.java:6203)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:5968)
	at java.awt.Container.processEvent(Container.java:2105)
	at java.awt.Component.dispatchEventImpl(Component.java:4564)
	at java.awt.Container.dispatchEventImpl(Container.java:2163)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
	at java.awt.Container.dispatchEventImpl(Container.java:2149)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
	at java.awt.EventQueue.access$000(EventQueue.java:96)
	at java.awt.EventQueue$1.run(EventQueue.java:608)
	at java.awt.EventQueue$1.run(EventQueue.java:606)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
	at java.awt.EventQueue$2.run(EventQueue.java:622)
	at java.awt.EventQueue$2.run(EventQueue.java:620)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)


----------



## SlaterB (7. Jun 2011)

ist dir der Sinn einer NullPointerException bekannt? wenn nicht solltest du dir jetzt 5 Min. Zeit nehmen und dies lernen,
das ist mit Abstand die wichtigste und zugleich einfachste Exception überhaupt:
sie bedeutet dass du auf eine Variable zugreifst, in der null drinsteht, an null kann man keine Methoden aufrufen

aus dieser einfachen Erkenntnis folgt logisch scharf, dass der StackTrace, insbesondere die letzte Zeile,
> at FA_eingeben.<init>(FA_eingeben.java:69)
mit der Zeilennummer 69 extrem wichtig ist, in Zeile 69 findet der null-Zugriff statt

wenn du anderen Menschen einfach nicht verrätst, welche Zeile deines Codes die Zeile 69 ist, wie sollen dir andere Menschen dann helfen?
es ist nichtmal völlig klar, ob der gepostete Codeausschnitt überhaupt der Konstruktor von FA_eingeben ist,
darauf musst du achten, lieber ganze Klassen oder zumindest komplette Methoden/ Konstruktoren mit Signatur posten

gehe einfach in die Klasse FA_eingeben, gehe in Zeile 69 und finde heraus welches Objekt null ist 
und wenn gefunden warum null oder warum es eigentlich nicht null sein sollte und was hat vorher anscheinend dafür zu sorgen hat aber offensichtlich nicht funktioniert


----------



## Sabrina2612 (7. Jun 2011)

Zeile 69 ist hier zeile 7 also folgendes :                 ResultSet result = statement.executeQuery("SELECT Name FROM Fach");
In meiner Datenbank steht schon ein Testeintrag in Tabelle Fach somit dürfte es auch keinen Null Pointer Fehler geben.


----------



## SlaterB (7. Jun 2011)

dann kann ja nur statement null sein, was eigentlich in der Zeile davor gesetzt wird..,
prüfe doch bitte zwischen diesen Zeilen per Ausgabe, ob statement null ist

das Connection-Objekt ist nicht von einer eigenen Klasse, oder?


----------



## Sabrina2612 (7. Jun 2011)

Ich denke ma hier is das Problem dass statement = connection.createStatement() sein sollte, aber connection is in einer anderen Klasse und wird dort in der Funktion Verbindung_Start() initialisiert.
Jetzt weiß ich nicht wie ich das dort herausbekomme, habe ja extra eine Db Klasse MySQL Connection erstellt in der die Methoden Treiber() Verbindung_Start() und Verbindung_Ende() sind, sodass ich diese immer wieder verwenden kann.

Hast du da eine Idee. Sehr nett dass du benmüht bist mir zu helfen anscheinend sind mir doch ein paar sachen unklarer als gedacht.


----------



## SlaterB (7. Jun 2011)

ach so, dass ist auch nicht mehr Connection direkt, sondern MySQL_Connection.createStatement(),
muss also eine eigene Methode sein, die null zurückgibt (welches du noch nicht durch System.out.println() weiter bestätigt hast)

diese Methode musst du nun also unbedingt posten, wahrscheinlich besser die ganze Klasse,


----------



## Camino (7. Jun 2011)

Ich vermute mal, es liegt daran:

```
Statement statement = DB.MySQL_Connection.createStatement();
```
Du hast da ja nur die Klasse vor das createStatement geschrieben, brauchst aber natürlich auch noch die dortige Connection, also entweder conn oder getConnection().
Wahrscheinlich müsste es so aussehen:

```
Statement statement = DB.MySQL_Connection.conn.createStatement();
```


----------



## Sabrina2612 (7. Jun 2011)

Ok also poste ich hier mal die aktuelle MySQL_Connection Klasse


```
package DB;
import java.sql.*; 

import com.mysql.jdbc.Statement;
 
public class MySQL_Connection {
    
    final static String hostname = "localhost"; 
    final static String port = "3307"; 
    final static String dbname = "clicker"; 
    final static String user = "sabrina"; 
    final static String password = "JSjp2pcXR7uFYC8u"; 
    public static Connection conn = null; 
  

	public static void Treiber(){
        try { 
        	System.out.println("* Treiber laden"); 
            Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
        } 
        catch (Exception e) { 
        	System.err.println("Unable to load driver."); 
            e.printStackTrace(); 
        } 
    }
    
    public static Connection Verbindung_Start(){
        try { 
        	System.out.println("* Verbindung aufbauen"); 
            String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname; 
            conn = DriverManager.getConnection(url, user, password); 
        }
        catch (Exception e) { 
            System.err.println("Unable to connect."); 
            e.printStackTrace(); 
        } 
        return conn;
    }
    
    public static void Verbindung_Ende(){
        try {
        	System.out.println("* Verbindung geschlossen"); 
        } 
        catch (Exception e) { 
            System.err.println("Unable to close."); 
            e.printStackTrace(); 
        } 
    }
    

	public static void setConn(Connection conn) {
		MySQL_Connection.conn = conn;
		try {
			conn = DriverManager.getConnection(hostname, user, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
    
    public static Connection getConn() {
		return conn;
	}
	
    public static void main(String[] args) { 
    
    	Treiber();
    	Verbindung_Start();
    	Verbindung_Ende();
    	
    }

	public static Statement createStatement() {
		// TODO Auto-generated method stub
		return null;
	}
        
}
```

Ich habe schon angefangen getter und setter für connection zu erstellen. Habe jetzt die Befürchtung ich muss diese Klasse mit kompletten getter und setter für jede Variable erstellen. Kann das sein. wäre das ratsam. kann man nich dann auch so die Variablen in anderen Klassen direkt ansprechen um so Null Pointer zu vermeiden.


----------



## SlaterB (7. Jun 2011)

du hast eine NullPointerException und zwar ca eine Zeile nach Aufruf einer Methode mit Inhalt

```
public static Statement createStatement() {
        // TODO Auto-generated method stub
        return null;
    }
```
die ich dir erst in 3 Postings aus der Nase ziehen muss?!
ok, bei so antiproduktiver Mitarbeit ist auch meine Geduld irgendwann zu Ende, ich schreib jetzt erstmal nicht weiter..


----------



## Sabrina2612 (7. Jun 2011)

Sorry wollte dich nicht verärgern hab das alles anscheinend falsch gelernt. Ich will auch nur weiterkommen. Wollte auch nur wissen ob meine Idee jetzt richtig is oder nicht. aber ist schon ok ich versuche das jetzt mal auch ohne Hilfe


----------



## Camino (7. Jun 2011)

Ich hatte die Lösung doch gerade schon geschrieben. Die Methode createStatement würde ich aus der MySQL_Connection wieder löschen. Und warum da eine main-Methode drinsteht, weiss ich auch nicht.

Ich vermute mal, dass dir Eclipse vorgeschlagen hat, die Methode createStatement dort anzulegen und dies dann auch auf deinen Wunsch automatisch gemacht hat. Das liegt daran, dass die Methode createStatement zur Connection gehört, die bei dir vorhin gefehlt hatte. Also, einfach diese Methode wieder dort rauslöschen und die Connection einfügen, wie ich es vorhin geschrieben hatte, dann müsste es eigentlich funktionieren.


----------



## Camino (7. Jun 2011)

Hmm, und nun? Hast du das mal so probiert, wie ich geschrieben hatte? Funktioniert es? Brauchst oder willst du nun keine weitere Hilfe mehr? Na ja, hab nun auch gleich keine Zeit mehr...


----------



## SlaterB (7. Jun 2011)

ich unterstütze den neuen Kurs, falls es hilft


----------



## Sabrina2612 (7. Jun 2011)

Danke an Camino damit geht es. Danke ganz besonders an SlaterB du hast mir auch sehr geholfen. Die Befüllung funktioniert jetzt muss ich nur die andere ComboBox und deren Befüllung abhängig machen von dem was ich in Fach ComboBox ausgewählt habe. Wenn Ihr da schon Ideen habt wie man das mit getselectedItem lösen kann wäre ich froh wenn ihr mir tipps geben könnten.

Falls Ihr mir noch Tipps geben wollt.
Ich werde mich dann nochmal in den Semesterferien falls nicht zuviel Arbeit ansteht nochmal instensiv einem Java Kurs unterziehen.


Danke um die Mühe.


Lg Sabrina


----------



## Sabrina2612 (8. Jun 2011)

Was ist denn wenn ich jetzt ein anderes Problem mit einer Abfrage. Soll ich das dann als neues Thema posten oder geht das auch hier?


----------



## SlaterB (8. Jun 2011)

im Zweifel gar beides (dann aber hier auf das neue Thema verlinken), 
hier schauen wohl nicht mehr viele rein


----------

