Comment savoir si un enrgistrement existe dans une table Access

Benythefrog Messages postés 39 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 12 février 2009 - 12 févr. 2009 à 09:21
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 - 12 févr. 2009 à 14:14
Bonjour a tous et a toutes,amis developpeurs...

Je suis ici pour essayer de resoudre un probleme grace a votre aide et j'espere qu'elle sera benefique(je n'en doutte pas bien au contraire)
Je souhaiterai executer une requette qui me permet de savoir si un enregistrement existe dans ma table
J'ai une table TableTrajet dans laquelle j'ajoute des elements
Cependant je voudrai verifier s'il n'existe pasdans la base...
Ma requette est crée
Select ...from...
Je voudrai savoir comment faire pour verifier si le resultat de ma requette existe
s'il existe alors je passe a l'enregistrement suivant
S'il n'existe pas alors je l'ajoute grace a ma requete d'insertion

Merci d'avance
Benoit

10 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
12 févr. 2009 à 09:44
Salut,

Tu utilises donc un RecordSet alors....Si oui, ta requête va "envoyer" à ton recordset le résultat, si ton recordset est "vide" alors pas de doublon, si le contraire alors tu as le même "référence" dans ta table....Tu n'as pas besoin de faire une boucle si tu fais une requête du genre :

Select * From Tatable Where TonChamp = "Ta_Recherche"
ou
Select TonChamp From Tatable Where TonChamp = "Ta_Recherche"

A+
Exploreur

 Linux a un noyau, Windows un pépin
    ** http://exploreur1.labrute.fr **
0
Benythefrog Messages postés 39 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 12 février 2009
12 févr. 2009 à 09:49
Bonjur exploreur
Je t'envoi mon code
Je pence que tu comprendra mieu mon probleme
Je veut verifier que lorsque j'ajoute avec ma requette insert , il n'y ai pas le meme enregistrement...
J'espere etre claire
Pour plus de precision demande moi y'a pas de soucis...

__________________________________________________________

Dim MaBd As DAO.Database
Dim MaTable As DAO.Recordset
Dim req As String
Dim Req2 As String
Dim Dat As String
Dim HeureDépart As String
Dim HeureArrivée As String
Dim AdresseDépart As String
Dim AdresseArrivée As String
Dim NumMois As Integer
Dim NumVehi As Integer


DoCmd.TransferSpreadsheet acImport, , "NewDoc", "C:\Documents and Settings\Administrateur\Mes documents\Vdis.xls", True
DoCmd.SetWarnings False
SQL1 = "UPDATE NewDoc SET adressedépart=Replace(Adressedépart,chr(39),chr(39) & chr(39))"
sql2 = "UPDATE NewDoc SET adressearrivée=Replace(Adressearrivée,chr(39),chr(39) & chr(39))"


DoCmd.RunSQL SQL1
DoCmd.SetWarnings False
DoCmd.RunSQL sql2
DoCmd.SetWarnings False


Set MaBd = CurrentDb
req = "Select * from NewDoc "
Set MaTable = MaBd.OpenRecordset(req, dbOpenDynaset)
NumVehi = Liste1.Column(0)
While Not MaTable.EOF
    valeur1 = CStr(MaTable!HeureDépart)
    valeur2 = CStr(MaTable!HeureArrivée)
    Dat = Left(valeur1, 10) 'ladate
    HeureDépart = Right(valeur1, 8) 'lheure de départ
    HeureArrivée = Right(valeur2, 8) 'lheure de départ
    AdresseDépart = MaTable!AdresseDépart
    AdresseArrivée = MaTable!AdresseArrivée
    NumMois = Month(Dat)
   
   
    'avant cette requette je souhaite verifier que mon enreg n'existe pas dans ma base...
    ReqSql = "Insert into TableTrajet (DateDépart,HeureDépart,AdresseDépart,HeureArrivée,AdresseArrivée,NumVehicule,NumMois)  Values ('" & Dat & "','" & HeureDépart & "','" & AdresseDépart & "','" & HeureArrivée & "','" & AdresseArrivée & "','" & NumVehi & "'," & NumMois & ") "
    DoCmd.RunSQL (ReqSql)
    DoCmd.SetWarnings False
    MaTable.MoveNext


Wend


'suppression des données dans la table NewDoc pour une nouvelle importation
Req2 = "Delete From NewDoc"
DoCmd.RunSQL (Req2)
DoCmd.SetWarnings False
MsgBox "Importation réussi avec succés"
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
12 févr. 2009 à 10:13
C'est ce que je "pensez"..avant de faire taa requête INSERT fait une requête SELECT et vérifie(via ton recordset) si la/les donnée(s) que tu veux écrire existes ou pas dans ta table....

A+
Exploreur

 Linux a un noyau, Windows un pépin
    ** http://exploreur1.labrute.fr **
0
Benythefrog Messages postés 39 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 12 février 2009
12 févr. 2009 à 10:24
Lol
Leprobleme ce que je ne sis pas commet faire cette requette...
ni coment marche ce recordset
Merci d'avance
Benoit
0

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

Posez votre question
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
12 févr. 2009 à 10:47
Un truc du genre....

Dim sSql As String
sSql "Select * From Tatable Where TonChamp '" & Ta_Recherche & "'"

Set MaTable = MaBd.OpenRecordset(sSql, dbOpenDynaset)

If MaTable > 0 Then
    MsgBox "Existant dans la base"
    MaTable.Close
    Set MaTable = Nothing
    Exit Sub
End If
A+
Exploreur

 Linux a un noyau, Windows un pépin
    ** http://exploreur1.labrute.fr **
0
mamash_bek Messages postés 20 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 11 juin 2009 1
12 févr. 2009 à 10:56
Je te joins un exemple de ce que j'avais pu faire ayant eu d'après ce que j'ai compris de ta demande le même cas.
Petit Détails régulièrement dans ton code tu mets DoCmd.SetWarnings False
Une fois initialisé il reste à False tant que tu ne l'as pas redéclaré à True dans ton code.
'Ou POcode est un champs de ma table
'
  Set rec = CurrentDb.OpenRecordset("select count(POcode) as NBR from population where POpopulation='" & vPop & "';")
    If rec.Fields("NBR").Value = 0 Then DoCmd.RunSQL ("INSERT INTO Population (POpopulation) values ('" & vPop & "');")
    rec.Close
    Set rec = CurrentDb.OpenRecordset("select POcode as NBR from population where POpopulation='" & vPop & "';")
    vPop = rec.Fields("NBR").Value
    rec.Close

Par contre, il est nécessaire de connaitre ce que tu cherches à controler au niveau de table.
Cela te convient il :
   ReqSql = "Select count(NumVehicule) from TableTrajet where DateDépart='" & Dat & "' and HeureDépart='" & HeureDépart & "'  and AdresseDépart='" &
AdresseDépart & "' [..]  and NumMois = '" & NumMois &
"'

Mais suivant la volumétrie de ta table, cela peut devenir un traitement assez lourd et long. Peut être faudrait il revoir la structure de la table et modifier en conséquence tes recordset ?
0
Benythefrog Messages postés 39 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 12 février 2009
12 févr. 2009 à 11:21
C'est exactement ce qu'il me faut pr la requette
Cependant je ne comprens aps tré bien a quoi cela sert mamash_bek
Peut tu m'expliquer en quelque mot a quoi sert ton petit bou de code?
Merci
Benoit
0
mamash_bek Messages postés 20 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 11 juin 2009 1
12 févr. 2009 à 13:42
Cela fait ce que te propose Exploreur:
tu comptes le nombre d'élément d'un champ (ici NumVehicule, on aurait pu mettre le numero d'index si tu l'as fait pour ta table) en fonction de paramètres choisis. S'il est à "0" alors tu n'as pas de données.

Ton recordset peux contenir plusieurs 'colonne' (Fields) tu les appelles soit par n° d'index (de mémoire le premier  est 0) soit en fonction des noms que tu leurs as attribué.
ReqSql = "Select NumVehicule as Voit,NameUser as Utilisateur  from ..."
Pour appeler tes données deux manières:
If rec.Fields("Voit").Value reviens à If rec.Fields(0).Value
If rec.Fields("Utilisateur").Value reviens à If rec.Fields(1).Value

Dans ton cas, le champs Fields(0) est vide alors tu n'as fait aucun enregistrement donc tu fais ton insert.

Dans le cas contraire tu as déjà des données, après à toi de voir ce que tu veux faire des données déjà existantes:
les mettre à jour ? Update
les afficher à l'utilisateur ?

A noter selon la structure de ta table (doublon autorisé ou non
autorisé), même si tu fais un insert (avec le warnings False) cela
n'écrira rien dans la table et aucune alerte à l'écran pour ton
utilisateur.
0
Benythefrog Messages postés 39 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 12 février 2009
12 févr. 2009 à 14:02
Je te remercie pour ce coup de main trés precieux
Grace a toi mon patron va etre heureu
:P
Je suis actuellement en stage dans une entreprise qui s'occupe spécialement de réseau et aucun salarié ne s'y connait vraiment en Programmation
Merci a vous pour votre aide
Merci pour les conseils

Bonne fin de journée
Benoit
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
12 févr. 2009 à 14:14
Ou....comme le souligne mamash_bek, gérer l'erreur retourné par Access quand tu essayes d'écrire une donnée qui existe dans ta base...me souviens plus du N° d'erreur retourné par Access...mais c'est un LONG.... lol

A+
Exploreur

 Linux a un noyau, Windows un pépin
    ** http://exploreur1.labrute.fr **
0
Rejoignez-nous