Problème SQL et access

mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009 - 22 avril 2004 à 15:39
cs_tds Messages postés 351 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 9 décembre 2004 - 27 avril 2004 à 12:31
J'ai un souci avec SQL et access. J'ai une connexion odbc, qui fonctionne, je peut faire SELECT * FROM Table, ça passe sans aucun problème je récupère tous les enregistrements. Mais si je fais SELECT * FROM Table WHERE Champs = Condition, je n'ai plus aucun enregistrement, alors que la table est renseignée, la requête est bonne et doit renvoyer des données. Je passe par un rs = st.excuteQuery(req), pour excuter et récupérer le résultat.

Merci pour l'aide

mdelph ;)

13 réponses

HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
22 avril 2004 à 15:54
Ecris nous ton code.
Peut etre as-tu fait une erreur de syntaxe dans ta requête SQL, comme par exemple oublié de mettre des cotes pour entourer une chaine de caractères (erreur que l'on retrouve fréquemment).

Est-ce juste ton resultset qui est vide ou alors ta requete qui ne passe pas ?
(si tu fais un try catch, quel est le message d'erreur s'il y en a un?)

Fanny
0
mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009
22 avril 2004 à 16:58
Voilà près de l'intégralité de mon code, 3 classes, une classe connexion, une classe personne qui hérite de connexion, et la classe accueil qui lance le prog.

package Projet.Sources;

import java.sql.*;
import java.io.*;

public class ConnectionBase {

//chaîne de connection au lien odbc
private String url = "jdbc:odbc:GestionDuPersonnel";
//connexion initialisation
private Connection con = null;
//création d'une variable statement employé pour exécuter des requêtes SQL et obtenir les résultats
private Statement statem ;
//exécute la requête passée en paramètre et récupère le résultat
private ResultSet resultat ;
//
private ResultSetMetaData metadata;

//constructeur
//connexion à la base de donées
public void ConnectionBase(){
try {
//déclaration de la classe
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// création et configuration d'une variable connexion url,user et pass
con = DriverManager.getConnection(url,"","");
Clavier.aff("connect");
}
catch (SQLException ex){
Clavier.aff ("Source non trouvée, connection impossible." );
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
}
}

//fermeture de la connexion à la base
public void ConnectionFin(){
try {
resultat.close();
statem.close();
con.close();
}
catch (SQLException ex){
Clavier.aff ("Impossible de fermer la connexion à la base" );
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
Clavier.aff ("Impossible de fermer la connexion");
}
}

//exécution d'une requête SQL de recherche
public ResultSet RequeteSQLRech(String req){
try {
//initialisation de la variable pour exécuter la requête,option pour pouvoi se déplacer
statem = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
//exécution de la requête et recupération des données
resultat = statem.executeQuery(req);
}
catch (SQLException ex){
Clavier.aff ("Impossible d'exécuter la requête n°1. " );
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
Clavier.aff ("Impossible d'exécuter la requête");
}
return resultat;
}
//exécution d'une requête SQL de nise à jour
public ResultSet RequeteSQLUpdate(String req){
try {
//initialisation de la variable pour exécuter la requête
statem = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
//exécution de la requête et recupération des données
statem.execute(req);
resultat = statem.getResultSet();
}
catch (SQLException ex){
Clavier.aff ("Impossible d'exécuter la requête n°2. "+ ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
Clavier.aff ("Impossible d'exécuter la requête");
}
return resultat;
}
//renvoit le nombre d'enregistrement en fonction de la requete
public int nbEnregistrement(ResultSet r){
int i =0;
try{
r.absolute(1); //pointe sur le 1er enregistrement
while(r.next()) { i++; }
r.absolute(1); // replacement du pointeur
}
catch(SQLException ex){
Clavier.aff("Impossible de renvoyer le nombre d'enregistrement ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
// i=i+1; // +1 départ de 0
return i;
}
//renvoit le nombre de colonnes
public int nbColonne(ResultSet r){
int i =0;
ResultSetMetaData metadata;
try{
metadata = r.getMetaData();
i = metadata.getColumnCount();
}
catch(SQLException ex){
Clavier.aff("Impossible de renvoyer le nombre de colonnes ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
return i;
}
//renvoit les enregistrements
public String[][] Enregistrement(ResultSet r){
int nbcol,i,j,nbenreg =0;
String[][] enreg = null; //tableau des enregistrements

try{
nbcol = nbColonne(r); //recupétarion du nombre de colonnes
nbenreg = nbEnregistrement(r); //recupération du nombre d'enregistrements
enreg = new String[nbenreg][nbcol]; //instance du tableau d'enregistrement
//récupération des données dans le tableau
// Clavier.aff(nbenreg);
// Clavier.aff(nbcol);
for (i=0; i<nbenreg; i++)
{
for (j=0; j<nbcol; j++)
{
enreg[i][j] = r.getString(j+1);
// Clavier.aff(enreg[i][j]);
}
r.next(); //passage à l'enregistrement suivant
}
}
catch(SQLException ex){
Clavier.aff("Impossible de récupérer les enregistrements ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
return enreg;
}
//recupération des entêtes de colonnes
public String[] nomColonne (ResultSet r){
int i =0;
String[] nomcol =null;
ResultSetMetaData metadata;

nomcol = new String[nbColonne(r)];
try{
metadata = r.getMetaData();
for(i=0; i<nbColonne(r);i++)
{
nomcol[i] = metadata.getColumnName(i+1);
}
}
catch(SQLException ex){
Clavier.aff("Impossible de renvoyer le nom des colonnes ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
return nomcol;
}
}
*************************************************

package Projet.Sources;
import java.sql.*;

class Personnes extends ConnectionBase {

private String nom;
private String prenom;
private String adresse;
private String cp;
private String ville;
private float nbheure;
private float salair;
private String tel;
private String commentaire;

//constructeur de la classe personne
//renvoit le requête de la liste des personnes
public String ListePersonnes(){
String req;
req = "Select Pers_UID as IDENTIFIANT,Pers_NOM as NOM,Pers_PRENOM as PRENOM,Pers_ADRESSE as ADRESSE,Pers_CP as CP,Pers_VILLE as VILLE, Pers_NBHEURE as HEURES,Pers_SALAIR as SALAIR,Pers_TEL as TELEPHONE,Pers_COMMENTAIRE as COMMENTAIRE from Personnes";
return req;
}
//renvoit le requête de la recherche par nom
public String RecherchePersonnes(String s){
String req;
req = "SELECT Pers_UID as IDENTIFIANT,Pers_NOM as NOM,Pers_PRENOM as PRENOM,Pers_ADRESSE as ADRESSE,Pers_CP as CP,Pers_VILLE as VILLE, Pers_NBHEURE as HEURES,Pers_SALAIR as SALAIR,Pers_TEL as TELEPHONE,Pers_COMMENTAIRE as COMMENTAIRE FROM Personnes WHERE Pers_NOM LIKE '"+s+"*';";
Clavier.aff(req);
return req;
}
//recherche d'un enregistrement par rapport au nom
public void AffPersonnes (String req){
ResultSet result;
int lg,col,i,j =0;
String [][] enreg;
String [] nomcol;

ConnectionBase();//connexion à la base
result = RequeteSQLRech(req); //résultat de la requête
col = nbColonne(result); //récupération du nbre de colonnes
lg = nbEnregistrement(result); //récupération du nbre d'enregistrement

Clavier.aff("rechpers lg :"+lg+" col :"+col);
enreg = new String[lg][col]; //instance du tableau
nomcol = new String[col]; //instance du tableau des nom de colonne
enreg = Enregistrement(result);//récupération du tableau d'enregistrement
nomcol = nomColonne(result);

//afichage des données
for(i = 0;i<lg;i++) {
for(j=0;j<col;j++) {
if (enreg[i][j]==null)
{ Clavier.aff(nomcol[j] +": ");
Clavier.aff("");
}
else
{ Clavier.aff(nomcol[j] +":" );
Clavier.aff("\t"+enreg[i][j]);
}
}
Clavier.aff("______________________________________________________");
Clavier.aff("");
}

ConnectionFin(); //arrêt de la connexion à la base
}
}
**************************************************

package Projet.Sources;

import java.io.*;
import java.util.*;
import java.lang.*;

public class Accueil {

static String nom,prenom,adresse,cp,ville,tel,commentaire;
static float salair,nbheure;

public static void main (String args[])
throws java.io.IOException {
int choix;
int i;
Personnes pers = new Personnes(); //variable de type Personnes et création

do {
AfficheMenu();
choix = Clavier.lireI();
switch(choix){
case 1 : pers.AffPersonnes(pers.ListePersonnes());
break;
case 2 : Clavier.aff("Nom a recherché : ");
nom = Clavier.lireS();
pers.AffPersonnes(pers.RecherchePersonnes(nom));
break;
}

} while (choix!=0);
}
//procédure d'affichage du menu
public static void AfficheMenu () {
Clavier.aff ("\n *** Menu *** \n");
Clavier.aff ("1 - Visualiser la liste des employés");
Clavier.aff ("2 - Rechercher un employés par son nom");
Clavier.aff ("0 - Fin");
Clavier.aff ("\n Quel est votre choix ? ");
}
}

**************************************************
Voilà si qq1 a une idée, se serait sympas
Merci

mdelph ;)
0
mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009
22 avril 2004 à 16:59
Voilà près de l'intégralité de mon code, 3 classes, une classe connexion, une classe personne qui hérite de connexion, et la classe accueil qui lance le prog.

package Projet.Sources;

import java.sql.*;
import java.io.*;

public class ConnectionBase {

//chaîne de connection au lien odbc
private String url = "jdbc:odbc:GestionDuPersonnel";
//connexion initialisation
private Connection con = null;
//création d'une variable statement employé pour exécuter des requêtes SQL et obtenir les résultats
private Statement statem ;
//exécute la requête passée en paramètre et récupère le résultat
private ResultSet resultat ;
//
private ResultSetMetaData metadata;

//constructeur
//connexion à la base de donées
public void ConnectionBase(){
try {
//déclaration de la classe
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// création et configuration d'une variable connexion url,user et pass
con = DriverManager.getConnection(url,"","");
Clavier.aff("connect");
}
catch (SQLException ex){
Clavier.aff ("Source non trouvée, connection impossible." );
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
}
}

//fermeture de la connexion à la base
public void ConnectionFin(){
try {
resultat.close();
statem.close();
con.close();
}
catch (SQLException ex){
Clavier.aff ("Impossible de fermer la connexion à la base" );
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
Clavier.aff ("Impossible de fermer la connexion");
}
}

//exécution d'une requête SQL de recherche
public ResultSet RequeteSQLRech(String req){
try {
//initialisation de la variable pour exécuter la requête,option pour pouvoi se déplacer
statem = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
//exécution de la requête et recupération des données
resultat = statem.executeQuery(req);
}
catch (SQLException ex){
Clavier.aff ("Impossible d'exécuter la requête n°1. " );
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
Clavier.aff ("Impossible d'exécuter la requête");
}
return resultat;
}
//exécution d'une requête SQL de nise à jour
public ResultSet RequeteSQLUpdate(String req){
try {
//initialisation de la variable pour exécuter la requête
statem = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
//exécution de la requête et recupération des données
statem.execute(req);
resultat = statem.getResultSet();
}
catch (SQLException ex){
Clavier.aff ("Impossible d'exécuter la requête n°2. "+ ex.getMessage());
}
catch (java.lang.Exception ex){
ex.printStackTrace();
Clavier.aff ("Impossible d'exécuter la requête");
}
return resultat;
}
//renvoit le nombre d'enregistrement en fonction de la requete
public int nbEnregistrement(ResultSet r){
int i =0;
try{
r.absolute(1); //pointe sur le 1er enregistrement
while(r.next()) { i++; }
r.absolute(1); // replacement du pointeur
}
catch(SQLException ex){
Clavier.aff("Impossible de renvoyer le nombre d'enregistrement ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
// i=i+1; // +1 départ de 0
return i;
}
//renvoit le nombre de colonnes
public int nbColonne(ResultSet r){
int i =0;
ResultSetMetaData metadata;
try{
metadata = r.getMetaData();
i = metadata.getColumnCount();
}
catch(SQLException ex){
Clavier.aff("Impossible de renvoyer le nombre de colonnes ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
return i;
}
//renvoit les enregistrements
public String[][] Enregistrement(ResultSet r){
int nbcol,i,j,nbenreg =0;
String[][] enreg = null; //tableau des enregistrements

try{
nbcol = nbColonne(r); //recupétarion du nombre de colonnes
nbenreg = nbEnregistrement(r); //recupération du nombre d'enregistrements
enreg = new String[nbenreg][nbcol]; //instance du tableau d'enregistrement
//récupération des données dans le tableau
// Clavier.aff(nbenreg);
// Clavier.aff(nbcol);
for (i=0; i<nbenreg; i++)
{
for (j=0; j<nbcol; j++)
{
enreg[i][j] = r.getString(j+1);
// Clavier.aff(enreg[i][j]);
}
r.next(); //passage à l'enregistrement suivant
}
}
catch(SQLException ex){
Clavier.aff("Impossible de récupérer les enregistrements ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
return enreg;
}
//recupération des entêtes de colonnes
public String[] nomColonne (ResultSet r){
int i =0;
String[] nomcol =null;
ResultSetMetaData metadata;

nomcol = new String[nbColonne(r)];
try{
metadata = r.getMetaData();
for(i=0; i<nbColonne(r);i++)
{
nomcol[i] = metadata.getColumnName(i+1);
}
}
catch(SQLException ex){
Clavier.aff("Impossible de renvoyer le nom des colonnes ");
Clavier.aff(ex.getErrorCode() + ex.getMessage());
}
return nomcol;
}
}
*************************************************

package Projet.Sources;
import java.sql.*;

class Personnes extends ConnectionBase {

private String nom;
private String prenom;
private String adresse;
private String cp;
private String ville;
private float nbheure;
private float salair;
private String tel;
private String commentaire;

//constructeur de la classe personne
//renvoit le requête de la liste des personnes
public String ListePersonnes(){
String req;
req = "Select Pers_UID as IDENTIFIANT,Pers_NOM as NOM,Pers_PRENOM as PRENOM,Pers_ADRESSE as ADRESSE,Pers_CP as CP,Pers_VILLE as VILLE, Pers_NBHEURE as HEURES,Pers_SALAIR as SALAIR,Pers_TEL as TELEPHONE,Pers_COMMENTAIRE as COMMENTAIRE from Personnes";
return req;
}
//renvoit le requête de la recherche par nom
public String RecherchePersonnes(String s){
String req;
req = "SELECT Pers_UID as IDENTIFIANT,Pers_NOM as NOM,Pers_PRENOM as PRENOM,Pers_ADRESSE as ADRESSE,Pers_CP as CP,Pers_VILLE as VILLE, Pers_NBHEURE as HEURES,Pers_SALAIR as SALAIR,Pers_TEL as TELEPHONE,Pers_COMMENTAIRE as COMMENTAIRE FROM Personnes WHERE Pers_NOM LIKE '"+s+"*';";
Clavier.aff(req);
return req;
}
//recherche d'un enregistrement par rapport au nom
public void AffPersonnes (String req){
ResultSet result;
int lg,col,i,j =0;
String [][] enreg;
String [] nomcol;

ConnectionBase();//connexion à la base
result = RequeteSQLRech(req); //résultat de la requête
col = nbColonne(result); //récupération du nbre de colonnes
lg = nbEnregistrement(result); //récupération du nbre d'enregistrement

Clavier.aff("rechpers lg :"+lg+" col :"+col);
enreg = new String[lg][col]; //instance du tableau
nomcol = new String[col]; //instance du tableau des nom de colonne
enreg = Enregistrement(result);//récupération du tableau d'enregistrement
nomcol = nomColonne(result);

//afichage des données
for(i = 0;i<lg;i++) {
for(j=0;j<col;j++) {
if (enreg[i][j]==null)
{ Clavier.aff(nomcol[j] +": ");
Clavier.aff("");
}
else
{ Clavier.aff(nomcol[j] +":" );
Clavier.aff("\t"+enreg[i][j]);
}
}
Clavier.aff("______________________________________________________");
Clavier.aff("");
}

ConnectionFin(); //arrêt de la connexion à la base
}
}
**************************************************

package Projet.Sources;

import java.io.*;
import java.util.*;
import java.lang.*;

public class Accueil {

static String nom,prenom,adresse,cp,ville,tel,commentaire;
static float salair,nbheure;

public static void main (String args[])
throws java.io.IOException {
int choix;
int i;
Personnes pers = new Personnes(); //variable de type Personnes et création

do {
AfficheMenu();
choix = Clavier.lireI();
switch(choix){
case 1 : pers.AffPersonnes(pers.ListePersonnes());
break;
case 2 : Clavier.aff("Nom a recherché : ");
nom = Clavier.lireS();
pers.AffPersonnes(pers.RecherchePersonnes(nom));
break;
}

} while (choix!=0);
}
//procédure d'affichage du menu
public static void AfficheMenu () {
Clavier.aff ("\n *** Menu *** \n");
Clavier.aff ("1 - Visualiser la liste des employés");
Clavier.aff ("2 - Rechercher un employés par son nom");
Clavier.aff ("0 - Fin");
Clavier.aff ("\n Quel est votre choix ? ");
}
}

**************************************************
Voilà si qq1 a une idée, se serait sympas
Merci

mdelph ;)
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
22 avril 2004 à 17:11
8-) JB@WAre

req = "SELECT Pers_UID as IDENTIFIANT,Pers_NOM as NOM,Pers_PRENOM as PRENOM,Pers_ADRESSE as ADRESSE,Pers_CP as CP,Pers_VILLE as VILLE, Pers_NBHEURE as HEURES,Pers_SALAIR as SALAIR,Pers_TEL as TELEPHONE,Pers_COMMENTAIRE as COMMENTAIRE FROM Personnes WHERE Pers_NOM LIKE '"+s+"*';";


Il me semble que le charactère '*' n'a pas la même signification dans access que dans un autre sgbd.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009
22 avril 2004 à 17:20
like ' me*' correspond à like 'me%' pour access

mdelph ;)
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
22 avril 2004 à 17:37
8-) JB@WAre

hein hein mais il n'empèche que ta condition ne coincide avec rien. essaie sans ce caractère '*' pour voir.

;)
0
mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009
22 avril 2004 à 17:43
idem, si je fait WHERE Champ = condition, c'est exactement pareil, idem pour un SELECT max()......

mdelph ;)
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
22 avril 2004 à 19:35
8-) JB@WAre

euh j'avais pas fait gaffe et j'ai du mal a croire que ca marche. avec un driver ODBC sur une base access, il me semblait que les nom des tables devaient êtres précisées comme ceci : Select .... FROM [NomDeLaTable] Where ...

:dissapprove)
0
mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009
22 avril 2004 à 19:41
bien sûr il faut select ....from....where

mdelph ;)
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
22 avril 2004 à 20:01
8-) JB@WAre

euh je voulais insister sur [NomDeLaTable]
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
22 avril 2004 à 20:02
8-) JB@WAre

enfin les crochets quoi
0
mdelph Messages postés 13 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 23 novembre 2009
23 avril 2004 à 03:33
malgrés l'heure tardive, j'avais compris,mais tu peux mettre les crochets où tu veux c'est toujours pareil, parfois il ne met même pas d'erreur... java ça me désespère

mdelph ;)
0
cs_tds Messages postés 351 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 9 décembre 2004
27 avril 2004 à 12:31
SOLUCE: jette MS-Access, c'est une vrai merde...
PS (les "*" = "%")...

B@ron {EU.BELGIUM}
0
Rejoignez-nous