Access2007 Abfragen

Saban

Erfahrenes Mitglied
Hallo Zusammen!

ich soll eine Oberfläche schreiben zur Pflege einer Datenbank. Die Komponenten der Oberfläche beziehe ich noch vorübergehend aus einer Access07 Datenbank, d.h. ich beziehe die Namen der Komponenten aus dieser.
Ich lege mir ein Checkbox Array (JAVA) an
Code:
JCheckbox array[]
bis hier her klappt alles wunderbar. Das was mich stört ist das ich 10 Panels und eine JTable hab für die ich jeweils die Abfragen doppelt durch gehen muss. Einmal für die größe des Arrays also für die Anzahl und einmal für die Ergebnisse der Abfrage. Ich sollte vllt dazu sagen das immer nur bestimmte Checkboxen angezeigt werden. Ein Kriterium wäre zb die Angabe eines Zeitraums und je nach dem werden einige angezeigt und einige ausgeblendet. Deswegen initialisiere ich mein Array immer neu. Wenn man mir jetzt sagt ich soll nen Count in meine SQL Abfrage einbauen geht des auch schlecht weil ich erst mal mein Array initialisieren muss bevor ich es befüllen kann...
Code:
array = new JCheckbox(anzahl)

String [] chbName = results aus der Datenbank

array[index] = new JCheckbox(str[index])

ich will alles in einem abwasch erledigen und nicht jedes query 2 mal durch gehen müssen... Bin für jede Hilfe dankbar!

MfG
Saban
 
Hi
Ich denke das wäre im Java Forum besser aufgehoben gewesen ;)

Also so wie ich das sehe hast du zwei Möglichkeiten.

1. Du erstellst ein scrollable ResultSet:
Java:
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = s.executeQuery(strSQL);
rs.last(); //zum letzen Eintrag springen
JCheckbox[] array = new JCheckbox[rs.getRow()]; //Zeilennummer auslesen
rs.beforeFirst(); //Wieder zurück zum Anfang
while(rs.next()) { //und los
//Array abfüllen
}

oder du machst es nicht mit einem Array sondern mit einer List (z.B. ArrayList):
Java:
List<JCheckBox> myBoxes = new ArrayList<JCheckBox>();
		myBoxes.clear();
		while(rs.next()) {
			myBoxes.add(die_neue_box);
		}


Have Fun
jeipack
 
Hi!

wusste nicht genau ob es mehr java oder mehr sql ist :D

wow danke sieht echt viel versprechend aus! Leider kenn ich mich mit den Vor- und Nachteilen von JLists nicht aus... Aber das krieg ich scho noch raus :)

Danke dir!

MfG
Saban
 
Hi!

Ich hab da doch noch ne Frage und zwar setzt du ja bei deinem Statement objekt einige Eigenschaften vom ResultSet wie zB.
Code:
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

Wenn ich die Eigenschafen übernehme oder druch CONCUR_UPDATE... ersetze überspringt mir das Programm die Stelle
Code:
while(resultSet.next())

wenn ich es weg lasse bekomme ich die Fehlermeldung
Code:
java.sql.SQLException: Resultset set type is TYPE_FORWARD_ONLY

kannst du mir da vllt nochmal helfen :confused:

MfG
Saban
 
Hmm
Poste doch mal den Code.


Wenn do sowas machst:
Java:
rs.last();
while(rs.next())
Dann wird die while-Schleife natürlich übersprungen da rs schon beim letzen Datensatz ist. Hast du rs.beforeFirst(); vergessen?

Und wo genau kommt die Fehlermeldung:
Code:
java.sql.SQLException: Resultset set type is TYPE_FORWARD_ONLY
?
Poste mal den Code dazu und sag in welcher Linie genau das kommt?
Sowas kommt wenn du in einem "normalen" ResultSet rumscrollen willst (also wieder einen Datensatz zurück) - obwohl.. im Moment kann ich den Fehler nicht nachproduzieren..*komisch*
 
Also hier mein Code
Java:
	public 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";
		
		resultSet = stmt.executeQuery(sql);
		resultSet.last();
		
		String tabDaten[][] = new String[resultSet.getRow()][COLUMNNAMES.length];
		
		resultSet.beforeFirst();
		
		int zaehler = -1;
		while(resultSet.next()){
			++zaehler;
			
			tabDaten[zaehler][0] = ändereDatum(String.valueOf(resultSet.getDate("Datum")));
			tabDaten[zaehler][1] = resultSet.getString("Werknummer") + " - " + resultSet.getString("MontageWnr");;
			tabDaten[zaehler][2] = resultSet.getString("TNR");
			tabDaten[zaehler][3] = resultSet.getString("MZG");
			tabDaten[zaehler][4] = resultSet.getString("KST_Belast");
			tabDaten[zaehler][5] = resultSet.getString("GSTD");
			tabDaten[zaehler][6] = resultSet.getString("Beschreibung");
			tabDaten[zaehler][7] = resultSet.getString("Baugruppe");
		}
		
		return tabDaten;
	}

und hier die Fehlermeldung wenn ich die Eigenschaften beim Statement weg lasse
Java:
Exception in thread "main" java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY
	at sun.jdbc.odbc.JdbcOdbcResultSet.last(Unknown Source)
	at GUI_Tool.BK_Connection.getTableData(BK_Connection.java:56)
	at GUI_Tool.BK_Frame.<init>(BK_Frame.java:38)
	at GUI_Tool.BK_Main.main(BK_Main.java:8)

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hi!

ich hab jetzt sogar die ResultSet eigenschaften so gesetzt
Java:
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

es klappt einfach nicht :( kann mir keiner weiter helfen :confused:

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hi!

ich hab da noch was gefunden!

Bei dieser Programmierung muss natürlich ein Treiber JDBC 2-fähig sein und scrollbare Cursor unterstützen, das heißt Cursor, die auch rückwärts laufen können. Gleichzeitig muss dann aber auch beim Aufbau eines Statement-Objekts ein scrollbarer Cursor angemeldet werden:
Ziemlich weit am schluss von JavaInsel

Meine Fragen sind wie kann ich meine Version überprüfen?
Und wie update ich die? Ich find bis jetzt nur jar Dateien... reicht des?

MfG
Saban
 
Klar, die JAR Datei kannst du einfach als Lib deinem Projekt hinzufügen und die alte entfernen..

Aber aus Zeitmangel sag ich jetzt einfach mal:
Machs mit ner ArrayList<JCheckBox> ;)

Gruss
 
Hi!

also auf heise.de hatte ich gelesen das der mySQLConnector 5.1.7 dafür genügen sollte hat aber auch nicht geklappt... :( :( :(
Also werd ich es jetzt mit ner JList probieren bzw mich mal mit der JList beschäftigen und wenn das auch Probleme macht dann bleibt mir nur die möglichkeit den selben sql zweimal ausführen zu lassen... :(

MfG
Saban
 

Neue Beiträge

Zurück