# Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse



## MrTobi (12. Okt 2011)

Hallo,
ich möchte per Java eine Abfrage einer Accessdatenbank durchführen, wenn ich den SQL String in Access Teste funktioniert dieser einmandfrei, wenn ich den selbigen in Java execute bekomm ich immer ein leeres ResultSet.

Die Abfrage sieht so aus:
SELECT Bauteile.Komponente, Bauteile.KomponentenBezeichnung
FROM Bauteile
WHERE (((Bauteile.Material)="713AG023D2"))
GROUP BY Bauteile.Komponente, Bauteile.KomponentenBezeichnung
HAVING (((Bauteile.KomponentenBezeichnung) Like "ERC*")) OR (((Bauteile.KomponentenBezeichnung) Like "ERA*")) OR (((Bauteile.KomponentenBezeichnung) Like "BGO*")) OR (((Bauteile.KomponentenBezeichnung) Like "BGA*")) OR (((Bauteile.KomponentenBezeichnung) Like "BGC*"));

In Access bekomm ich mein Ergebniss in Java nicht,
kann mir jemand sagen warum?


```
public List<String> getKomponente(String sMatnr) throws SQLException {
		
		List<String> listeBereiche = new ArrayList<String>();
		
		Statement allBereich = null;
		ResultSet completeResult = null;
		allBereich = myConn.createStatement();
		completeResult = allBereich.executeQuery("SELECT Bauteile.Komponente, Bauteile.KomponentenBezeichnung FROM Bauteile WHERE (((Bauteile.Material)='"+sMatrnr+"')) GROUP BY Bauteile.Komponente, Bauteile.KomponentenBezeichnung HAVING (((Bauteile.KomponentenBezeichnung) Like 'ERC*')) OR (((Bauteile.KomponentenBezeichnung) Like 'ERA*')) OR (((Bauteile.KomponentenBezeichnung) Like 'BGO*')) OR (((Bauteile.KomponentenBezeichnung) Like 'BGA*')) OR (((Bauteile.KomponentenBezeichnung) Like 'BGC*'));");		
while (completeResult.next()) {
			  listeBereiche.add(completeResult.getString(1)); 
		}
		allBereich.close();
			return listeBereiche;
```

Da bekomm ich immer "Nichts" zurück.

So dann bin ich auf die Idee gekommen einfach in Access eine Parameterisierte Abfrage zu erstellen und diese dann ich Java mit den entsprechenden Nummern aufzurufen, aber ich weiß erlich gesagt nicht wie dort der Select in Java aussieht er mekert immer rum zu wenige Parameter übergeben.


```
...
completeResult = allBereich.executeQuery("Select * from Abfrage2 where var='"+sMatrnr+"'");
		while (completeResult.next()) {
			  listeBereiche.add(completeResult.getString(1)); 
		}
		allBereich.close();
			return listeBereiche;
	}
```
Fehler:
[Microsoft][ODBC Microsoft Access Driver] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.

Für eure Hilfe wäre ich sehr dankbar.

Grüße
MrTobi


----------



## SlaterB (12. Okt 2011)

ein Tipp der dich in der gesamten Programmierung, ja im gesamten Universum weiterbringt:
fange EINFACH an!

starte mit  [c]SELECT * FROM Bauteile[/c]
funktioniert das, gibts alle Ergebnisse?
wird dein Code überhaupt ausgeführt, könnten Exceptions auftreten, hast du in diesen Grundlagen alles bedacht?
wie genau stellst du 'nichts' als Ergebnis fest, 'nichts' kommt ja strenggenommen auch wenn man den PC gar nicht einschaltet,
paar System.out.println() können immer helfen

wenn jedenfalls [c]SELECT * FROM Bauteile[/c] was liefert, dann kannst du nach und nach Dinge einschränken,
z.B. testen ob das Like in JDBC genauso zu formulieren ist, oder nicht besser nach SQL-Standard mit % statt *?

das aber nicht gleich mit GROUP BY und HAVING, sondern ganz in Ruhe einzeln normale Bauteile-Einträge,
selektiere [c] = 'BGO1'[/c] mit z.B. 5 Ergebnissen, [c] = 'BGO2'[/c] mit 7 Ergebnissen, weitere gibt es nicht die mit BGO beginnen,
teste ob OR funktioniert [c] .. = 'BGO1' or  .. = 'BGO2'[/c] mit hoffentlich 12 Ergebnissen und dann suche eben eine Like-Formulierung die auch 12 Ergebnisse findet 
oder beschreibe mit konkreten Beispielen, bei exakt welchen Testdaten exakt was nicht wie erwartet funktioniert,

im Erfolgsfall alles andere auch intensiv einzeln testen und nach vielen Stunden dann langsam komplizierte Queries mit Gruppierung zusammenbauen 

---

zur parameterisierten Abfrage kann ich leider nix sagen


----------



## MrTobi (12. Okt 2011)

Genau das war der Fehler ein simples % anstatt einem * 

Und ich such stunden und debugge mir den Wolf ab  

Zum Thema leeres Ergebnis: Er hat hat immer ein "leeres" ResultSet gehabt aber eben kein Fehler gebracht das er das Statement nicht ausführen konnte.

Vielen Dank!

Grüße
MrTobi


----------

