Newsgroup: it.comp.java
Titolo: [aiuto!]java.sql.SQLException: .... Function sequence error

Ciao a tutti,
ho un problema con delle query SQL.
Il mio programma è costutito da applets che comunicano con una servlet
che esegue le query al batabase. La prima volta che esegue la query va
tutto bene, non mi da alcun errore e visualizza tutti i risultati. Dalla
seconda volta in avanti mi da questo essrore:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Function
sequence error
e visualizza solo uno o due dei risultati (su una ventina circa).
(Il Web Server è Apache ed il DB è MSAccess)
Se qualcuno vuole dare un'occhiata al codice ....
Grazie a tutti
Alessandra
/***** questa è la classe che utilizzo per aprire la connessione al db e
per eseguire le query */////
package Simulatore.Servlets;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import Simulatore.Comuni.*;
/* ***************************************************************** */
/*                          DRVMSACCESS                              */
/* ***************************************************************** */
public class DrvMsAccess {
       String DNS=null;      //fonte dati ODBC in INPUT
       Connection dbcon=null;    //driver connessione JDBC
//       String query;             //query in input
       String tipo;
       Statement stmt=null;           // prepara lo statment SQL ODBC
       ResultSet rs=null;             // risultato della chiamata SQL in
output
       ResultSetMetaData rsmd;   // caratteristiche dati in output
       boolean eccezione = true;
       String PATH="C:\\Program Files\\Apache
Group\\Apache\\Home\\Simulatore\\Logs\\";
       PrintWriter toFile;
       /* COSTRUTTORE CLASSE APERTURA CONNESSIONE */
       public DrvMsAccess (String DNS){
          try{
              FileWriter File = new FileWriter (PATH+"Sqlac.log", true);
           toFile = new PrintWriter(File);
           } catch (IOException io) {System.out.println("Scrittura nel
file"+io);}
    try {
      // se la connessione e' chuisa, apre la connessione
      if ((dbcon == null)|| (dbcon.isClosed())){
       this.DNS=DNS; //fonte dati ODBC
       String url ="jdbc:odbc:"+DNS; // definisco tipo e fonte dati
       //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       new sun.jdbc.odbc.JdbcOdbcDriver();
       dbcon=DriverManager.getConnection(url,"","");
       stmt = dbcon.createStatement();
      }
    } catch (SQLException exc) {
      toFile.println ("\n **** Sqlexception catturata1 ***\n");
      toFile.println("errore nello scrivere i dati sul db: "+exc);//
errori sql
      toFile.flush();
    }
   catch (Exception e) {e.printStackTrace();}// errori generici
        }//fine costruttore
         /* **********************************************************
*/
       /*                 Esegue la query SQL                        */
       /* ********************************************************** */
     public void ExecStmt(String query, String tipo){
//        this.query = query;
//        this.tipo = tipo;
        try {
    toFile.println("ExecStmt: query:"+query);
    toFile.println("ExecStmt: tipo:"+tipo);
    toFile.flush();
       if (tipo.equals("execute")) {
     toFile.println("ExecStmt: tipo=execute");
        toFile.flush();
        rs=stmt.executeQuery(query);
        toFile.println("ExecStmt: sono dopo executeQuery: "+ query);
        toFile.flush();
       }
       else {
        stmt.executeUpdate(query);
        toFile.println("ExecStmt: sono else executeQuery La query è: "+
query);
        toFile.println("ExecStmt: scrivi aggettivi");
        toFile.flush();
       }
       eccezione=false;
     } catch (SQLException exc) {
     toFile.println("\n  SQLException catturata esecuzione query \n");
     toFile.println("errore nella query: "+ query+" errore "+exc);
     toFile.flush();
     eccezione = true;
  }// errori sql
  toFile.println("eccezione= "+eccezione);
  toFile.flush();
    }//End ExecStmt()
       /* ********************************************************** */
       /*              CHIUSURA STATMENT SQL                         */
       /* ********************************************************** */
     public void CloseStmt() {
       try{
            rs.close();
            stmt.close();
       } catch (SQLException exc) {
               System.out.println("\n  SQLException catturata3 \n");
               System.out.println("errore nello scrivere i dati sul db:
"+exc);
         }
       }//End CloseStmt
       /* ********************************************************** */
       /*            Chiusura connessione JDBC-ODBC                  */
       /* ********************************************************** */
     public void CloseCon(){
        try{
            dbcon.close();
        } catch (SQLException exc) {
                 System.out.println("\n  SQLException catturata4 \n");
                 System.out.println("errore nello scrivere i dati sul
db: "+exc);
        }
       }//End CloseCon
}   //End DrvMsAccess
//questo if è nella servlet: creo qui la query e richiamo la classe
precedente.
 if (TipoRich.equals("ElencoTestAttivi")){
       //query="SELECT * FROM TEsperimento ORDER BY IDE";
       query="SELECT IDE,NomeEsp,Note FROM TEsperimento";
       toFile.println("query ElencoTestAttivi " + query);
       toFile.flush();
       Sqlac.ExecStmt(query,"execute");
       try {
        toFile.println("Sono nel try di rs.next " + query);
           toFile.flush();
            while(Sqlac.rs.next()) {
                  Elenco.addElement(new
OggTest(Sqlac.rs.getInt("IDE"),Sqlac.rs.getString("NomeEsp"),Sqlac.rs.getString("Note")));
            }
       } catch (SQLException sql) {toFile.println("***Eccezione
rs.next"+sql); toFile.flush();}
/***nell'init della servlet ho:
 Sqlac =new DrvMsAccess("LOGIN");

Alessandra Magenta wrote:

Ho dato uno sguardo al tuo codice ma non ho trovato (almeno cosi' a prima vista) errori: ti
posso pero' consigliare di effettuare la connessione al db in modo "static" tramite un'altra
classe.
Ciao
Andrea Checchi - Focala

Ciao Andrea,
forse ho trovato .....
Uno dei campi del DB era di tipo Memo, ed io su quel campo facevo
rs.getString()
ho provato a cambiare tipo ed ho messo Text
Ora funziona.
Per utilizzare il memo cosa devo fare?
Uso rs.getObject() e poi faccio un cast con una stringa?
Ora provo.... spero funzioni
Grazie dell'aiuto e del consiglio
Alessandra


</html>
...se tu evitassi di scrivere in HTML tutti potrebbero leggere meglio!
non solo... ma che ne diresti di imparare un po' a quotare?
Kali

 Kali
Hai ragione, scusa.
Andrea Checchi