Requête sur db access avec plusieurs paramètres

Signaler
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
survcopt
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
Bonjour,
J'ai une db access contenant une table "Contact" avec une série de champs : Nom Prénom Date ...
Je voudrais adresser une requête (avec comme filtre le nom le prénom et la date) qui me renverrait un bool m'indiquant si cette personne existe déjà dans la base de donnée.
Je me connecte à la base
             string DataBase = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Application.StartupPath + "\\data\\client.mdb";
                Conn.ConnectionString = DataBase;
                Conn.Open();

et c'est après que je pêche car je ne connais pas les termes pour créer la string de ma requête.

Merci pour votre aide : un tuto ou un bout de code.

www.survey-copter.com
A voir également:

11 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
38
Salut

Utilise SqlCommand, insère ta requête SQL dedans et met "Conn" dans la propriété "Connection".
Ensuite, SqlDataReader reader = commande.ExecuteReader();
if(reader.HasRows)
{
    // là, il y a un enregistrement (ou plus)
}else{
    // là il n'y en a pas
}

Si tu n'es pas très familier avec le SQL, voici une requête simple : "SELECT * FROM Contact WHERE nom '"+nom+"' AND prenom '"+prenom+"' AND date = "+date;
Attention que le SQL dans Access n'est pas parfaitement standard. Teste d'abord ta requête directement dans Access.

(et comme je le disais, il s'agit d'une requête simple, normalement, on utilise des requêtes paramétrées)

Krimog :
while (!succeed = try()) ;
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
Merci pour tes indications j'ai fait comme ça :
using System.Data.OleDb;
...
                string DataBase = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Application.StartupPath + "\\data\\client.mdb";
                Conn.ConnectionString = DataBase;
                Conn.Open();
            string SqlSearch "SELECT * FROM Contact WHERE nom '" + TxtNom.Text + "' AND prenom = '" + TxtPrenom.Text + "' AND date = " + TxtDateAnniv.Text;

            OleDbCommand cmd = new OleDbCommand(SqlSearch, Conn);
            OleDbDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                // là, il y a un enregistrement (ou plus)
                reponse = true;
            }
            else
            {
                // là il n'y en a pas
                reponse = false;
            }
           
            Conn.Close();

avec comme paramètre
TxtNom.Text  =  "BELMONDO";
TxtPrenom.Text = "Jean Paul";
TxtDateAnniv.Text = "01/01/1901";

et dans acces j'ai ça

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><title>Contact</title><caption>Contact</caption>----
|Nom |Prenom |Adresse |Mail |DateNaissance |DateAdhesion |Badge |----
1, BELMONDO, Jean Paul, ici, JP@oui.com, 01/01/1901, 01/01/1902, 19011, <tfoot></tfoot>

Mais le code me génère une erreur au moment de la déclaration de reader il me dit

Une exception de première chance de type 'System.Data.OleDb.OleDbException' s'est produite dans System.Data.dll
System.Data.OleDb.OleDbException: Aucune valeur donnée pour un ou plusieurs des paramètres requis.
   à System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   à System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   à System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   à System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   à System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   à System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   à System.Data.OleDb.OleDbCommand.ExecuteReader()

J'ai du oublié quelque chose !!!
Merci

www.survey-copter.com
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
38
Tu as vérifié que ton string de requête est EXACTEMENT le même que sous access ? (n'exécute pas ta requête dans ton programme, affiche-la et copie-colle dans access).

Si le problème n'apparaît pas sur Access, c'est très bizarre. Essaie de modifier ta requête en ajoutant ou enlevant des champs dans la condition... mais je ne garantis vraiment rien.

Krimog :
while (!(succeed = try())) ;
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
Je ne sais pas utiliser access
  BOUUUUUUUUH!!!!!

www.survey-copter.com
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
J'ai tapé ça sous access dans une requête
SELECT FROM Contact WHERE Contact.Nom '"BELMONDO"' AND  Contact.Prenom '"Jean Paul"' AND Contact.DateNaissance = "01/01/1901"

il me dit :
"Dans l'instruction SELECT,un mot réservé ou un argument est mal othographié ou absent,ou la ponctuation est incorrecte"

Une idée ?

Au passage l'aide access est bien faite elle me répond :
<title>Dans l'instruction SELECT, un mot réservé ou un argument est mal orthographié ou absent, ou la ponctuation est incorrecte. (Erreur 3141)</title><link rel="stylesheet" type="text/css" href="sqldoc.css" />Vous avez saisi une
<object id="alink_1" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" type="application/x-oleobject" width="0" height="0"></object>[javascript:alink_1.Click() instruction SQL] ayant une instruction
SELECT incorrecte.
Causes possibles :

Un nom de
<object id="alink_2" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" type="application/x-oleobject" width="0" height="0"></object>[javascript:alink_2.Click() mot réservé] ou
<object id="alink_3" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" type="application/x-oleobject" width="0" height="0"></object>[javascript:alink_3.Click() d’argument] est mal orthographié ou
manquant.
La ponctuation est incorrecte.

www.survey-copter.com
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
Avec l'aide Access j'obtiens ça
SELECT Contact.Nom,Contact.Prenom,Contact.DateNaissance
FROM ContactWHERE Contact.Nom '"BELMONDO"' AND  Contact.Prenom '"Jean Paul"' AND Contact.DateNaissance = "01/01/1901"

et cette erreur
Type de données incompatible dans l'expression du critère
???

www.survey-copter.com
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
38
SELECT Contact.Nom,Contact.Prenom,Contact.DateNaissance
FROM ContactWHERE Contact.Nom '"BELMONDO"' AND  Contact.Prenom '"Jean Paul"' AND Contact.DateNaissance = "01/01/1901"

=>

SELECT Contact.Nom,Contact.Prenom,Contact.DateNaissance
FROM ContactWHERE Contact.Nom 'BELMONDO' AND  Contact.Prenom 'Jean Paul' AND Contact.DateNaissance = 01/01/1901

Vérifier cependant qu'il ne faut pas mettre des ' autour de la date

Krimog :
while (!(succeed = try())) ;
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
avec ton exemple Il m'ouvre une table vide et si je mets les ' pour la date il me met une erreur

J'ai refais un essai en virant Contact.DateNaissance et le AND Contact.DateNaissance = 01/01/1901
et la ça marche il trouve Jean Paul il s'agit donc du format de la date qui n'est pas bon .
mais le plus important dans mon filtre c'est la date donc je continue .

meric

www.survey-copter.com
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
38
Essaie avec une date du genre : YYYY-MM-DD hh:mm:ss (1901-12-31 00:00:00)

Krimog :
while (!(succeed = try())) ;
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
il aime pas du tout , j'ai même essayé de mettre les ' et ben pareil pourtant la date dans la cellule est au format 01/01/1901 si je fais un copier coller.
Allez encore une petite idée ...
Merci

www.survey-copter.com
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
c'est bon j'ai trouvé pour access
il faut écrire
SELECT Contact.Nom,Contact.Prenom,Contact.DateNaissance
FROM ContactWHERE Contact.Nom 'BELMONDO' AND  Contact.Prenom 'Jean Paul' AND Contact.DateNaissance =#01/01/1901#

je fais l'essai en c# maintenant

www.survey-copter.com