Access2007 Abfragen

5.1 sollte wirklich genügen..

Keine JList, sondern ne List (wie eben z.B. ArrayList). Eine JList ist etwas anderes.

Gruss
 
Warum so umständlich mit Java ?

Probier mal die MS Visual C# 2008 Express Edition aus. Da kann mit mit wenigen Klicks ne Oberfläche bauen und hat auch noch gute Schnittstellen in Sachen Datenbanken (besonders zu Access und MSSQL) und man findet überall im Netz Snippets zu.

Der mySQLConnector ist wie der Name schon sagt für MySQL und nicht für Access zu gebrauchen. Die Jet-Datenbank die dahinter liegt, kann zwar SQL-Querys verarbeiten, aber dafür brauchst du den Access DB-Treiber für ODBC. Da bringt der mySQLConnector nichts.
 
Dass es um Access geht habe ich schon ganz vergessen..
Wenn ich auf ne AccessDB zugreiffe richte ich mir unter Windows immer zuerst eine Datenquelle ein...

Da du die reine Abfrage (Nicht Scrollable) machen kannst, hab ichs mal so gemacht:
Java:
	public ArrayList<String[]> getTableData(String wnr, String kstBelast, String mzg, String vonDatum, String bisDatum) throws SQLException{
		   
        String sql =    " SELECT    *" +
                        " FROM      BAUKOM_ADM_BK_STUNDEN_TAETIGKEIT AS ST, BAUKOM_ADM_BK_WERKNUMMER AS WNR" +
                        " WHERE     ST.werknummer = WNR.werknummer" +
                        " AND       ST.werknummer IN (" + wnr + ")" +
                        " AND       kst_belast IN (" + kstBelast + ")" +
                        " AND       mzg IN (" + mzg + ")" +
                        " AND       Datum >= dateValue('" + vonDatum + "')" +
                        " AND       Datum <= dateValue('" + bisDatum + "')" +
                        " ORDER BY  tnr, mzg, kst_belast, datum";
        
        //Von mir eingefügt, ist bei dir wohl nicht in dieser Funktion
        Connection con =null;
        Statement stmt = con.createStatement();
        ResultSet resultSet;
        //Fertig: Von mir eingefühgt
        
        resultSet = stmt.executeQuery(sql);

       
        
        
        ArrayList<String[]> datensaetze= new ArrayList<String[]>();
        while(resultSet.next()){
            String tabDaten[] = new String[COLUMNNAMES.length];
           
            tabDaten[0] = ändereDatum(String.valueOf(resultSet.getDate("Datum")));
            tabDaten[1] = resultSet.getString("Werknummer") + " - " + resultSet.getString("MontageWnr");;
            tabDaten[2] = resultSet.getString("TNR");
            tabDaten[3] = resultSet.getString("MZG");
            tabDaten[4] = resultSet.getString("KST_Belast");
            tabDaten[5] = resultSet.getString("GSTD");
            tabDaten[6] = resultSet.getString("Beschreibung");
            tabDaten[7] = resultSet.getString("Baugruppe");
            datensaetze.add(tabDaten);
        }
       
        return datensaetze;
    }
(Nicht super elegant, aber funktioniert und ist keine grosse Änderung für dich im Code.
Mit:
datensaetze.get(i)
kannst du dann aufs jeweilige Array tabDaten zugreifen.

Have fun
 
Hi!

erst mal sorry das ich mich so spät erst melde!
Also das mit der Arraylist klappt wunderbar! Danke für den SUPER TIP! bei allem anderen ausser bei den Tabellen Daten, weil ich da ein zwei dimensionales Array habe und ich habe noch keine möglichkeit gefunden eine zwei dimensionale Arraylist zu erstellen :confused:

Also ich erzeuge auch Panels per SQL Abfrage wo ich die größe nicht kannte und das klappt mit dem ArrayList wunderbar. Bei den Tabellen Daten jedoch habe ich wie schon gesagt ein 2 Dim Array für die Zeilen und Spalten der Tabelle.

Hast du dafür vllt auch einen Tip? :(

Edit: Ich benutze Java weil des für die Aufgabe verlangt ist. Die Aufgabe wäre mit VB wahrscheinlich genauso schnell zu lösen.

MfG
Saban
 
Hi

ich kann mir das grad irgendwie nicht vorstellen :confused: dann müsste ich ja eine Liste machen mit der ich so viele Listen adde wie ich Spalten habe oder?

MfG
Saban
 
Hmm Also ein bisschen selber knobeln solltest du schon auch noch..:p

hier mal ein Beispiel:
Java:
		ArrayList<ArrayList<String>> meine2DListe = new ArrayList<ArrayList<String>>();
		
		//so viele Spalten hat deine Abfrage:
		int anzColumns=5;
		while(rs.next()) {
			//pro durchlauf füllst du eine tempListe und addest sie dann der meine2DListe
			ArrayList<String> tempListe = new ArrayList<String>();
			//hier addest du jetzt so viele Strings wie du nunmal auslesen willst
			for(int i=1;i<=anzColumns;i++) {
				tempListe.add(rs.getString(i));
			}
			//und hier eben das anfügen an die grosse Liste
			meine2DListe.add(tempListe);
		}

have fun

Edit: Wobei mir gerade auffällt, dass du das ja auch mit dem zuvor von mir schon geposteten Code machen kannst.
Du hast ja COLUMNNAMES.length, du hast sogar schon ein Array von Typ String mit der Länge von COLUMNNAMES.length. Mit folgendem Code hättest dus gleich dort einbauen können:
Java:
        while(resultSet.next()){
            String tabDaten[] = new String[COLUMNNAMES.length];
           for(int i=0; i<COLUMNNAMES.length;i++) {
              tabDaten[i]=resultSet.getString(i+1);
            }
            datensaetze.add(tabDaten);
        }

Also wenn ich dich jetzt nicht falsch verstanden habe ists eigentlich ganz simpel ;) Und wie gesagt.. selber rausfinden. Nur so bringts auch wirklich was.

Gruss
 
Ich hab ne Lösung!

Einlesen tue ich alles in eine ArrayList und lese es dann mit

Java:
		System.out.println(COLUMNNAMES.length);
		
		for(int zeile = 0; zeile < str_liste.size()/8; zeile++){
			for(int spalte = 0; spalte < 8; spalte++) {
				tabDaten[zeile][spalte] = str_liste.get(zeile * 8 + spalte); 
			}
		}

aus.

Danke für deine tollen Tips JiepJack!

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Zurück