# JComboBox mit Access DB Werten füllen



## Waldi (28. Okt 2005)

Hallo Leute.

Hab eine Access DB und will diese Abfragen, die Ergebnisse in ein Vector einlesen und dann in einer ComboBox ausgeben. Scheint einfach - ist es aber nicht. Wenn ich mit System.out.Println(vector). Mache dann gibt er mir das Ergebnis aus. Hier die Klasse mit dem DB Aufbau und dem Vector:


```
// Notwendige Klassen importieren
import java.sql.*;
import java.util.*;

// Klassendefinition
class Accjdbc5 extends AuftragÖffnen
{
	private static final long serialVersionUID = 1L;
	static	Vector			myData;
	static  String          query_str;          // String fuer den Abfrageterm
    static  ResultSet       my_result;          // Ergebnissatz
    static  Integer         kd_nummer;          // Variable fuer die Kundennummer
    static  String          kd_vorname;         // Variable fuer den Kundenvornamen
    static  String          kd_name;            // Variable fuer den Kundennachnamen
    static  java.sql.Date   kd_auf_dat;         // Variable fuer das Auftragsdatum
    static  Integer         kd_auf_preis;       // Variable fuer den Auftragspreis

    static void SqlAbfrage()
    {
    	try {
                // 1. JDBC-Treiber laden
                Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");

                // 2. Datenbank-URL spezifizieren
                String db_url = "jdbc:odbc:jdbc_test1";
                
                // 3. Connect zur Datenbank ausführen (Kennwort muss beim Programmaufruf uebergeben werden)
                Connection my_con = DriverManager.getConnection(db_url, "java", "master");
                System.out.println("INFO: Verbindung zur Datenbank erfolgreich durchgefuehrt.");

                // 4. Statement erzeugen
                Statement my_stmt = my_con.createStatement();

                // 5. Abfrageterm als String festlegen
                String query_str = "SELECT * FROM T_Kunden";

                // 6. Abfrage ausfuehren
                ResultSet my_result = my_stmt.executeQuery(query_str);

                Vector myData = new Vector();
                
                // 7. Abfrageergebnis bearbeiten und ausgeben
                while(my_result.next()) {
                    //kd_nummer = new Integer(my_result.getInt("kdnr"));
                    kd_name = my_result.getString("name");              
                    myData.add(new String(kd_name));
                    //kd_vorname = my_result.getString("vorname");
                    //kd_auf_dat = my_result.getDate("datum");
                    //kd_auf_preis = new Integer(my_result.getInt("preis"));
                    //System.out.print(kd_nummer);
                    //System.out.print(kd_vorname);
                    //System.out.print(kd_auf_dat);
                    //System.out.print(ExpandString(SQLDateToString(kd_auf_dat),15));
                    //System.out.println(kd_auf_preis.toString());
                 }
                //System.out.println(myData);
                //System.out.println(myData.size());
             
                //8. Connect zur Datenbank beenden
                /*my_con.close();
                System.out.println("INFO: Verbindung zur Datenbank geschlossen.");
                System.out.println("=========================================================");
                System.out.println();*/
            }
            // Ggf. aufgetretene Exceptions abfangen
            catch(SQLException my_sqlex) {
                System.out.println("**************************************************************************");
                System.out.println("ERROR: Datenbankfehler: " + my_sqlex.getMessage());
                System.out.println("--------------------------------------------------------------------------");
                my_sqlex.printStackTrace();
                System.out.println("**************************************************************************");
            }
            catch(Exception my_ex) {
                System.out.println("**************************************************************************");
                System.out.println("ERROR: Sonstiger Fehler: " + my_ex.getMessage());
                System.out.println("--------------------------------------------------------------------------");
                my_ex.printStackTrace();
                System.out.println("**************************************************************************");
            }
        }

    public static void main(String[] args) 
    {
	SqlAbfrage();
    }
}
```

Und das ist der JComboBox Konstruktor


```
private JComboBox getJComboBoxAuftrWhln() 
	{
		if (jComboBoxAuftrWhln == null) 
		{
			jComboBoxAuftrWhln = new JComboBox(Accjdbc5.myData);
			jComboBoxAuftrWhln.setBounds(new java.awt.Rectangle(40,20,221,21));
		};
		return jComboBoxAuftrWhln;
	}
```

Das eigentliche Problem: Er übernimmt nicht die Daten aus dem Vector in die ComboBox. Jetzt meine Frage. Wiso nicht?? Ich vermute mal das es ein Anfänger Fehler ist. (Bin auch einer). Ich hoffe das ihr mir antwortet. 

Bis dann Waldi


----------



## Waldi (2. Nov 2005)

Ist die Antwort so schwer oder hab ich falsch gefragt???


----------



## bronks (2. Nov 2005)

Waldi hat gesagt.:
			
		

> Ist die Antwort so schwer oder hab ich falsch gefragt???


Die ganze Sache hast Du viel zu verwirrend dargestellt und dank der viel zu vielen auskommentierten Zeilen schwer zu lesen ...

Das Problem ist nicht JDBC, sondern die Sprache und die Ablauflogik. 

Du greifst hier:

```
jComboBoxAuftrWhln = new JComboBox(Accjdbc5.myData);
```
auf einen absolut leeren Vector zu, den niemals jemand gefüllt hat. Ich empfehle Dir mindestens die ersten drei Kapitel von hier: http://www.galileocomputing.de/openbook/javainsel5/


----------



## Waldi (2. Nov 2005)

du magst recht haben das ich anfänger bin. Aber hier wird doch der vector gefüllt


```
while(my_result.next()) { 
//kd_nummer = new Integer(my_result.getInt("kdnr")); 
kd_name = my_result.getString("name");              
[b]myData.add[/b](new String(kd_name));
```

der Vector heist ja myData

Ausserdem funzt das: 
	
	
	
	





```
System.out.println(myData);
```

Da gibt er was aus: Halt nur auf der Konsole


----------



## bronks (2. Nov 2005)

Wenn Du das "System.out.println(myData)" in der Funktion "getJComboBoxAuftrWhln()" aufrufst, dann wird auch in der Console nichts ausgegeben. Du holst Dir nur einen leeren Vector und der Code der den Vector füllt wird nie ausgeführt.

Das ganze holen der Daten und füllen des Vector mußt Du in eine Funktion reinpacken, die den Vector gefüllt zurückgibt, aber so klappt das nicht.


----------



## Waldi (2. Nov 2005)

Dankeschön für die Antwort. Ich werde das dann nachlesen.  :### Sind da sonst noch Fehler drin oder ist das alles??


----------

