# PreparedStatement ohne Parameter?



## rwolf (8. Jul 2012)

hi all,

Lese Daten mit jdbcdbc aus neuerer MS-Access-Tabelle(...accDB)
Leider stehen in den Feldname Umlaute (so was würd ich NIE machen).
das führt beim Setzen von PreparedStaments zu 
scheinbar unsinnigen SQL-Fehlermeldungen :

Abfrage : SELECT Kürzel,Anrede FROM Anrede  (ja,so ist das alles benannt !)
oder : SELECT Kuerzel,Anrede FROM Anrede

*SQL-Fehler : [Microsoft][ODBC-Treiber für Microsoft Access] 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben. *

Abfrage : SELECT * FROM Anrede  funktioniert einwandfrei

in manchen Fällen kann bei meiner Universalanwendung durchaus ein PAramter vorkommen..

```
Connection mk_con = get_gen_con();
        if(mk_con == null)
        {    
            System.err.println("** dbiface fill_mainkey_tab Con = NULL !?");
        }    
        else
        {
            try
            {
                //System.out.println("QPruef_Datahandler fill_mainkey_tab Filter-Var :"+regman_qp.jt_mk_filter_var);
                ps = mk_con.prepareStatement(sql_text);
                
                //- switch-Konstruktion wegen unterschiedlicher Def. in Tabellen !
                switch(menu_code)
                {
                    case 999 :
                    {
                        //#ps.setString(1, regman_qp.jt_mk_filter_var);
                        //ps.setString(1, regman_qp.g_bereich_k);
                        //ps.setInt(2,mps.show_eg_w_especs_only);
                        break;
                    }
                }
            }
            catch ( Exception e )
            {
                System.err.println("QPruef_DataHandler Menucode : "+menu_code+"Error : " +e.getMessage());
                e.printStackTrace();
            }   
            [COLOR="Magenta"]saetze = read_data2Vector_prepSt(ps, out_vec);[/COLOR]
```

und dann diese Routine:

```
public static int read_data2Vector_prepSt(PreparedStatement ps, Vector vec_data)
	{
            int step = 0;
            //test_mode = false;

            if (test_mode)
                System.out.println("pif read_data2Vector_prepSt start");
            //mps.show_msg_dialog("pcdb_iface3","read_data2Vector_prepSt start");
            //System.out.println("pif read_data2Vector step : "+step);
            //if (test_mode)
              //  mu2.show_intarray_content(typ_maske);

            int row_count = 0, field_count=0,i=0;
            ResultSet rs;
            try
            {
                    step++;	//-(1)
                    if (test_mode)
                        System.out.println("pif read_data2Vector_prepSt step : "+step);

                    [COLOR="Red"]ps.execute();[/COLOR]  //- hier hauts ihn raus !

                    step++;	//-(2)
                    rs = (ResultSet) ps.getResultSet();
                    step++;	//-(3)
                    if (test_mode)
                        System.out.println("pif read_data2Vector_prepSt step : "+step);

                    ResultSetMetaData rsmd = rs.getMetaData();
```
Eigentlich wollte ich eine CRUDP(Create,Read,Update,Delete,Print)-Anwendung
für diverse Untertabellen schreiben, aber krieg ich dann bei UPDATE und INSERT die gleichen Probleme ?

wer hat ähnliche Erfahrungen gemacht und auch noch ne Lösung ?

(Später soll dann ja alles auf MS_SQL-Server umgesetzt werden,
hoffentlich werden dann die Feldname ohne Umlaute geschrieben)
aber erstmal muss ich mit MS-Access vorliebnehmen..

gruß
rwolf


----------



## SlaterB (8. Jul 2012)

wieso verwendest du PreparedStatement, hast auskommentierte set-Methoden für ?-Parameter wie man sie in PreparedStatements verwendt und nennst dann als SQL
"SELECT Kürzel,Anrede FROM Anrede" ohne Parameter?

die Fehlermeldung ist GENAU die, die man erhält, wenn man einen ?-Parameter im PreparedStatement hat und nichts als Wert setzt,
insofern nehme ich stark an, dass du in der Hinsicht irgendwas falsch machst,
gib den sql_text aus,


----------



## rwolf (9. Jul 2012)

hallo,
danke für Euer Interesse !

es geht doch um ein universelles Modul, das viele verschiedene 
Abfragen behandeln soll, mal mit, mal ohne Parameter;
und man kann - das hab ich ja mit ORACLE und MS-SQL-Server in einem anderen
Projekt realisiert - durchaus auch ohne Parameter abfragen !
Sozusagen gehört die Parameteranzahl 0 zur erlaubten Zahlenmenge !

Kann es sich hier um Treiberprobleme handeln ? Oder kommt ODBC damit generell nicht klar,
oder MS-Access ?


----------



## SlaterB (9. Jul 2012)

wie gesagt kann das sein, was du vermutest,
meine Vermutung ist aber nach wie vor eine andere, dass es um anderes SQL geht als du denkst, MIT ?,

vielleicht weißt du so genau Bescheid, dass meine Annahmen haltlos sind, 
aber wenn du selber nur den geringsten Zweifel hast, dann solltest du das nochmal überprüfen/ überdenken,

starte ein neues Programm mit main-Methode, nötiger Initialisierung, 
und dann Zeile 27 PreparedStament "SELECT * FROM Anrede" geht oder nicht?
und dann Zeile 30 PreparedStament "SELECT Kürzel,Anrede FROM Anrede" dahinter geht oder nicht?


----------



## bronks (9. Jul 2012)

rwolf hat gesagt.:


> ... MS-Access ?


Access versteht kein Prepare!


----------

