Access - Estado de cursor Inválido

E ae galera, blz?

Estou tendo problemas com o access, tento acessar a tabela names com o seguinte código:

try { 
			Class.forName ( "sun.jdbc.odbc.JdbcOdbcDriver" );
			
			Connection con = 
				DriverManager.getConnection ( "jdbc:odbc:Data", "", "" );
			
			Statement stt = con.createStatement();
			
			System.err.println ( "statement criado com sucesso" );
			
			String consulta = "SELECT * FROM names";
			
			ResultSet result = stt.executeQuery( consulta ); 
			
			ResultSetMetaData data = result.getMetaData();
			
			StringBuffer output = new StringBuffer();
			
			int column = data.getColumnCount();
			
			for ( int i = 1; i <= column; i++ )
				output.append ( result.getObject ( i ) );
							
			System.err.println ( output.toString() );
						
			stt.close();
			con.close();	
		}
		
		catch ( SQLException sqlex ) {
			System.err.println ( sqlex.getMessage() );
		}
		
		catch ( ClassNotFoundException cnfex ) {
			System.err.println ( "Class not found" );
		}

Porém gera o seguinte erro:

Estado de cursor inválido

O que significa isso e como posso arrumar?

Valeu

Bem troque tuas linhas:

[code] ResultSetMetaData data = result.getMetaData();

     StringBuffer output = new StringBuffer(); 
      
     int column = data.getColumnCount(); 
      
     for ( int i = 1; i <= column; i++ ) 
        output.append ( result.getObject ( i ) ); 
                  
     System.err.println ( output.toString() ); 
               
     stt.close(); 
     con.close();    [/code]

por estas:

[code]while ( result.next()) {
int column = data.getColumnCount();

     for ( int i = 1; i <= column; i++ ) 
        output.append ( result.getObject ( i ) ); 
                  
     System.err.println ( output.toString() ); 

}[/code]

não testei, mas acredito que resolve o teu problema.

:okok:

quando eh gerado um resultset por “default” ele fica posicionado no registro “beforefirst” entao … se vc quiser acessar o primeiro registro antes precisa chamar o metodo “.next” do resultset … par ir ao primeiro registro … se nao essa msg “ESTADO DE CURSOR INVALIDO” ira aparecer … ela represente que o cursor ou esta no beforefirst ou no afterlast ! o metodo “.next” retorna “false” se estiver em qualquer um desses dois estados … se nao retorna true !

Isso aqui tah mto estranho :sad:

To usando esse código:

try {
			Class.forName ( "sun.jdbc.odbc.JdbcOdbcDriver" );
			
			Connection con = 
				DriverManager.getConnection ( "jdbc:odbc:Teste", "", "" );
						
			Statement stmt = con.createStatement();
			
			String query = "SELECT COF_NAME, TOTAL FROM COFFEES " +
			   "WHERE COF_NAME LIKE 'Colombian'";
			
			ResultSet rs = stmt.executeQuery ( query );
									
			while (rs.next()) {
				String s = rs.getString(1);
				int n = rs.getInt(2);
				System.out.println(n + " pounds of " + s + " sold to date.");
			}
					
			rs.close();
			stmt.close();
			con.close();
		}

Aparentemente está certo neh?

Porém, quando execute, ele passa direto pelo meu while, como se rs.next() fosse false.

Parece, q quando eu re-executo meu programa, o cursor não volta pra posição 0.

Por q isso, deveria voltar pra 0 ?

Como eu mudo o ResultSet pra q ele permita q eu ande com o cursor tanto pra frente quanto pra trás?

ps: estou usando o access97.

Valeu

vc tem certeza que essa consulta que vc fez esta retornado algum registro ?
Pq senao vai passar direto pelo whili mesmo pois nao ha nenhum registro !
tenta fazer com uma consulta simples sem condicao nenhuma !

quando vc chamaro metodo CrateSatement do
passa estes parametros conforme abaixo …
isso deve resolver o problema de navegacao que vc tem

stmt = conexao.createStatement(ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_INSENSITIVE);

[quote=“MAMS”]quando vc chamaro metodo CrateSatement do
passa estes parametros conforme abaixo …
isso deve resolver o problema de navegacao que vc tem

stmt = conexao.createStatement(ResultSet.CONCUR_UPDATABLE, ResultSet.TYPE_SCROLL_INSENSITIVE);[/quote]

Amigo, fiz isso q vc sugeriu ( na verdade as constantes estão invertidas ) e mesmo assim não funcionou.

Acredito q possa ser algum problema no meu banco, pode ser isso?

[]'s