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:
Aucune valeur donnée pour un ou plusieurs des paramètres requis
Access type de données incompatible dans l'expression du critère - Meilleures réponses
Type de données incompatible dans l'expression du critère - Meilleures réponses
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)
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";
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()
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.
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.
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
???
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
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 .
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
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#