Comment savoir si un enrgistrement existe dans une table Access
Benythefrog
Messages postés39Date d'inscriptionlundi 12 janvier 2009StatutMembreDernière intervention12 février 2009
-
12 févr. 2009 à 09:21
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 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
A voir également:
Vérifier si une valeur existe dans une table sql php
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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"
Benythefrog
Messages postés39Date d'inscriptionlundi 12 janvier 2009StatutMembreDernière intervention12 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))"
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"
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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....
mamash_bek
Messages postés20Date d'inscriptionmercredi 6 juin 2007StatutMembreDernière intervention11 juin 20091 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 ?
Benythefrog
Messages postés39Date d'inscriptionlundi 12 janvier 2009StatutMembreDernière intervention12 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
mamash_bek
Messages postés20Date d'inscriptionmercredi 6 juin 2007StatutMembreDernière intervention11 juin 20091 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.
Benythefrog
Messages postés39Date d'inscriptionlundi 12 janvier 2009StatutMembreDernière intervention12 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
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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