[access] comparer donnée formulaire
Résolublux Messages postés 5003 Date d'inscription Statut Modérateur Dernière intervention -
Une fois de plus j'ai besoin de vos conseils :
J'ai un formulaire de création de prise où j'ai 5 champs :
le champ Prise rempli automatiquement
le champ Switch pour indiquer le Switch concerné
le champ Port pour indiquer le port concerné
le champ Remarque
le champ Type de switch
En fait ce que je cherche à faire, c'est qu'après avoir rentrer le numéro de Switch, si le port saisie est déjà pris par une autre prise (visible dans ma table T_PRISE), qu'Access me dise via une msgbox que la ressource est déjà utilisée.
Ou mieux encore, c'est que au moment de la saisie de Switch, qu'Access me dise directement quels ports sont disponibles ou non, mais c'est déjà plus corsé.
En fait j'ai cherché comment faire cela via la fonction Dlookup mais trouver la syntaxe pour comparer le Switch de les ports utilisés me parait legèrement ardue !!!
Je cherche comment faire autrement mais je ne vois pas trop, si quelqu'un a une idée ou une piste, ce serai très très sympa :-)
Configuration: Windows XP Internet Explorer 6.0
- [access] comparer donnée formulaire
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook compte désactivé - Guide
- Access appdata - Guide
- Comparer prix amazon - Accueil - Commerce
- Un formulaire rempli - Guide
16 réponses
Le fil porte sur la validation en Access d'un formulaire de prise afin d'éviter d'utiliser un port déjà pris sur un switch, en consultant une table T_PRISE, pour trouver une solution réelle. Des pistes explorées incluent l'usage de DLookup pour repérer les ports occupés, la réflexion sur le modèle de données; une requête SQL est envisagée pour calculer les ports disponibles pour un switch donné. D'autres échanges signalent des difficultés comme des doublons ou des ports inexistants et recommandent de vérifier l'intégrité référentielle, d'ajuster les enregistrements et de tester les requêtes SQL pour obtenir des ports réellement libres.
ce que tu peux faire, c'est transformer ta saisie de port en liste déroulante, et lorsque tu saisis un switch, créer une requête qui va chercher les ports dispo, et que tu mets en .rowsource de ta liste choix_port...
à part la plaisanterie de bas niveau. En fait ce que je voulai faire c'est créer une liste déroulante pour les switchs déjà, pour que quand ma prise est par exemple 2310A (donc 2e etage), qu'il interprete le 2 comme l'etage et qu'il me donne que le choix entre les switchs du 2e etage (ex: RSSTAE23 où le 2 est de nouveau l'etage).
Ensuite à partir de là, que les port disponibles s'affichent dans une liste déroulante comme tu me le conseil, ou sous une autre forme...
Je viens seulement de revenir devant mon poste donc je vais me pencher sur ton conseil, et au pire j'essairai d'avancer ce WE... si jamai tu as un autre conseil par rapport à ce que je viens de dire, ba hésite pas..
merci encore !!
Mon profil suffira...
Il te suffit te récupérer une partie de ton numéro de prise (avec left, right et tout le toutim) pour passer ça en paramètre de la requête switch que tu mettras en .rowsource...
num = left(prise,1)
strsql = "select .... from switch where mid(switch,7,1) = " & num & ";"
liste_switch.rowsource = strsql
Ou un truc comme ça, je l'ai écrit en vitesse, je ne suis pas sûr de la syntaxe...
bon j'ai tester quelque chose avec la fonction left pour extraire le 1er caractère de mon num de prise mais g une erreur "Projet ou bibliotheque introuvable) sur la fonction Left. Je sais ps cela viens peut etre du fait que je ne travail pas sur le PC habituel de ma bse. En tous cas voici le code, si quelqu'un sait pourquoi j'ai une telle erreur....
Dim num num = Prise.Value num = Left(Prise, 1) msgbox num
Private Sub Modifiable70_Enter() Dim num Dim StrSql num = Prise.Value num = Left(Prise, 1) StrSql = "SELECT [N° Switch] from R_AJOUT_PRIZ WHERE mid([N° Switch],7,1) = " & num & ";" Modifiable70.RowSource = StrSql End Sub
Cela fonctionne à merveille sauf que maintenant j'ai une utre contrainte :
tous les switchs d'etage ont la nomenclature RSSTAE.. donc grace au code ci dessus, j'arrive à ne selectionner que les switchs d'Etage de la prise concerné sauf qu'il me faut aussi systématiquement les switchs d'imprimante avec la nomenclature suivante RSSTAG..
mon problème est d'arriver à ce que Access inclue toujours c'est switchs peut importe l'Etage. J'ai déjà fait des recherches et des essais mais je n'y parvient pas, voici un des codes que j'ai essayé, donc is vous pouviez m'aider ce serai top !!!
Dim StrSql2 StrSql2 = "SELECT [N° Switch] from R_AJOUT_PRIZ WHERE Left(N° Switch, 6)= " & "RSSTAG" & ";" Modifiable70.RowSource = StrSql2
J'ai aussi penser à faire la chose suivante mais je n'y arrive pas non plus : dans ma requete R_AJOUT_PRIZ, j'ai un champ "Type de switch" donc il faudrai que je lui dise via VBA de toujours selectionner les N° de Switch d'un Type Imprimante, mais je coince
bon, j'ai réussi à régler mon souci de switchs et de switchs d'imprimante via ceci :
StrSql = "SELECT [N° Switch] from R_AJOUT_PRIZ WHERE (mid([N° Switch],7,1) = " & num & ") OR (Left([N° Switch], 6)= " & "'RSSTAG'" & ");"
maintenant je peux presque clôre ce topic, j'ai juste encore à trouver la bonne requete pour qu'Access me calcule les ports dispos selon le switch sélectionner, donc mon problème de départ...
Je voulais simplement te tenir u courant blux, vu que c'est toi qui m'a aidé jusque là....
Bref, je verrai cela demain
Bonne soirée à tous...
Quelqu'un aurait-il la moindre idée de comment m'y prednre pour créer une requete qui me calcul quels ports sont disponibles pour un switch donné selectionné ?? et comment calculer le nombre de ports dispos par switchs ???
car je cherche depuis 2h30 et je ne trouve absolument rien du tout, je ne vois absolument pas comment faire cela.
please help car je nage...
vous trouverez via ce lien, une image de l'etat de ma requete :
http://hebergement-images.voiloo.net/membres/viewimg.php?img=3c731da1ed2a87cb9d4f0d319c5a6712.jpg
c'est vraiment compliqué tout ça et j'avoue que là je patoge !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionselect [port switch] from t_prise, t_switch where [switch d'etage] = [N°switch] and [N°switch] = "le_switch_de_mon_choix";
Je récapitule mon souci :-)
J'ai un formulaire de création de prise où, grace à une liste déroulante, je choisi un switch (logique jusque là).
Lorsque j'ai choisi ce switch, je veux (par exemple dans une autre liste deroulante) choisir le port. Sauf que je ne veux afficher que les ports du switch qui sont libres.
Je cherche egalement à savoir le nombre de ports disponibles par switch mais aussi, lorsque je choisi un switch, savoir (via une zone de texte) quels ports sont occupés et par quelles prises.
Je sais ça fait beaucoup de choses mais une fois que je saurais ça, je vais avoir largement moins de problèmes :-)
Pour le moment j'arrive à calculer le nombre de ports occupés pour un switch donné via le lien de mon post précédent.
J'espère avoir réussi à etre clair dans mes explications, je cherche depuis ce matin comment faire tout cela et je rame vraiment...
Enfin bon, je m'égousille là dessus depuis ce matin et je n'avance pas d'un poil !! ça commence à me gonfler mais bon, j'y arriverai j'ai pas le choix, en espérant que ce soit avec votre aide ;-)
Pour etre sûr que j'ai interpreté correctement ton code, je te met ci dessous ce que j'ai mis...
SELECT [Switch d'Etage] FROM T_PRISE, T_SWITCH WHERE [Switch d'Etage] = [N° Switch] and [N° Switch] = "Formulaires![F_RCH_PORT_SWITCH]![Switch d'Etage] ";
Je l'ai peut etre mal interprété
c'est peut etre idiot ce que je vais dire mais concaténer quoi ??
un truc du genre ??
SELECT [Switch d'Etage] FROM T_PRISE, T_SWITCH WHERE [Switch d'Etage] = [N° Switch] and [N° Switch] = " & Formulaires![F_RCH_PORT_SWITCH]![Switch d'Etage & ";
mais dans ce cas je vois qu'est ce que je concatène avec quoi lol
ou alors tu parles de cette partie ?
SELECT [Switch d'Etage] FROM T_PRISE, T_SWITCH
avec une concaténation à ce niveau ??
SELECT [Switch d'Etage] FROM T_PRISE, & T_SWITCH &
c'est peut etre totalement idiot ce que je suppose là mais disons que je suis ps le plus familier avec SQL même si j'ai compris ce que j'ai fait jusqu'ici (j'evite de faire quelque chose que je comprend ps en général), déjà que je commence à comprendre VBA tout juste !
voici ma requete :
SELECT [T_PRISE].[Switch d'Etage] FROM T_PRISE, T_SWITCH WHERE ((([T_PRISE].[Switch d'Etage])=[N° Switch]) And (([T_SWITCH].[N° Switch])=" & Switch d'Etage & "));
et le code de ma zone de liste :
Private Sub Liste6_Enter() Dim essai essai = [R_ESSAI] Me.Liste6.RowSource = essai End Sub
Je vais revérifier, il doit y avoir quelque chose de pas clair ou alors je ne suis pas bien reveillé lol
Private Sub Liste6_Enter()
Dim essai
essai = "SELECT [T_PRISE].[Switch d'Etage] "
essai = essai + " FROM T_PRISE, T_SWITCH "
essai = essai + " WHERE ((([T_PRISE].[Switch d'Etage])=[N° Switch]) "
essai = essai + " And (([T_SWITCH].[N° Switch])=" & [Switch d'Etage].value & "));
Me.Liste6.RowSource = essai
End Sub
J'ai testé ton code mais le résultat fait que, dans mon formulaire j'ai une inputbox qui apparait me demandant un paramètre pour le switch selectionné à ce moment là.
Dans tous les cas, une chose que je comprend pas : je cherche, lors d'une création de prise et après le choix d'un switch, de ne pouvoir choisir que les ports disponibles sur le switch selectionné et dans ce code que tu me conseilles, je ne vois aucune notion de port lol. Nous sommes nous bien compris au départ ou m'étais-je mal exprimé ??
Car dans le dernier post que j'avai laissé, j'ai pensé à faire en sorte que dans une zone de texte (par exemple) l'ensemble des ports du switch concerné s'affiche, pour ensuite inversé la chose et me lister les ports disponibles...
En gros, de lister tous les ports concerné par le switch X dans ma zone de texte.
limite faudrais que je reprenne tout du début mais c'est surtout que je ne sais tjs pas comment faire ce que je veux faire au mieux.
J'aimerai te demander un service :
pourrais-tu me donner les trames de la démarche pour créer un recordset, le parcourir.... ??
J'ai chercher et lu deux trois trucs sur les recordset et je ne comprends pas bien la démarche...
En espérant pas t'ennuyer à force :-)
access ajout d enregistrement requete#2007 04 11%2014%3A21%3A27
(Je commence tout doucement à m'embrouiller tout seul lol)
Par contre pourrais-tu me dire si l'idée que j'ai évoqué en 19 ne serai pas une solution plus simplement réalisable ??
je comprend pas tres bien ce que tu veu faire en 19
excuse moi, c'est pas que je voulais pas te répondre, c'est juste que j'ai d'abord répondu à blux, puis je voulais te répondre de suite mais merci le plantage ! Donc mille excuses...
donc pour te répondre
ba en fait je crois que je suis le 2e boulet que blux aide depuis deux semaines :p
en fait ce que j'ai mis en 19 était simplement un test. J'ai voulu, lorsque je choisi mon switch via une liste déroulante, que tous les ports occupés, donc déjà enregistrer, concernant le switch en question, s'affichent dans une zone de texte et non dans des enregistrements distincts...
Capiche ?? lol, je dit ça parce que je sais que je suis pas doué pour les explications...
voilà, désolé encore
bonne nuit...
est-ce que la requête 10 sort bien les ports affectés à un switch quand on la restreint avec un N° de switch ? (à tester dans ACCESS sans VBA, ni tout le toutim...)
En plus je viens de remarquer que un truc ne fonctionne plus alors que ça marchai très bien et que je n'y ai pas touché !
quand je clic sur le bouton "enregistrer" de mon formulaire d'ajout prise, il ne me sauvegarde plus rien...
C'est pile le truc que je déteste dans Access : d'abord tout fonctionne puis, par la magie du st-esprit, ça ne fonctionne plus, mais bref c'est un autre souci...
Ca m'f'ra toujours rire, ça... :-)
la requete en 10 me sort du vent c'est à dire que la seule chose qu'elle m'affiche est une entete de colonne "Port Switch" sans rien dessous...
Pas très normal, je me serais trompé dans la requête ? Si tu ne restreins pas avec un numéro de switch, ça donne quoi ?
Un doute qui me taraude : les entrées dans t_prise sont bien créées quand tu branches la prise à un switch ?
Ca m'f'ra toujours rire, ça... :-)
Si si, promis !! une requete à laquelle j'ai pas touché depuis qu'elle fonctionne et là, ba.............................. bref lol
Pour ta première question, je verrai ça demain et te tiens au courant...
Et pour cette fameuse question qui te taraude lol, oui tous les champs de ma table T_PRISE sont crées quand je crée une prise physiquement, dès qu'elle devient active en gros...
Bonne nuit...
bon quelques nouvelles : en fait j'ai vu une personne se matin et j'ai trouvé une autre façon pour m'y prendre. En fait selon le switch selectionné (lors de la cration d'une prise), j'ai mis une zone de texte qui m'affiche l'ensemble des ports déjà utilisés via ce code :
test = Me.Switch.Value 'MsgBox test test2 = "SELECT [Switch d'Etage] FROM R_RCH_PRIZ WHERE [Switch d'Etage] = " & test & " ;" essai = "SELECT [Port Switch] FROM R_RCH_PRIZ WHERE [Switch d'Etage] = '" & test & "' ;" Me.Liste74.RowSource = essai
Ce code étant applique sur la zone de liste du choix du switch.
Une fois que je connais les ports utilisés, j'ai mis une zone de liste déroulante avec un choix allant de 1 à 24 (vu qu'il y a 24 ports par switch). Sur cette liste je veux comparer la valeur selectionnée au contenu du ma zone de texte qui affiche les ports utilisés. Si l'utilisateur choisi un port déjà utilisé, je veux une Msgbox qui lui le dise et si le port n'est pas utilisé, ba tout va bien.
Voici le code :
Private Sub Modifiable78_BeforeUpdate(Cancel As Integer)
Dim truc
Dim truc2
Me.Modifiable78.OnChange = truc
truc = Me.Modifiable78.Value
truc2 = "SELECT [Port Switch] FROM R_RCH_PRIZ WHERE [Port Switch] = '" & truc & "' ;"
'truc2 = truc2 + "SELECT [Port Switch] FROM R_RCH_PRIZ WHERE [Switch d'Etage] = '" & test & "' ;"
If truc2 = essai Then
MsgBox "faux"
Else
MsgBox "ok"
End If
End Sub
Voilà où j'en suis, seulement il doit y avoir un truc qui coche dans le 2e code car j'ai une msgbox "ok" à chaque coup... si vous voyez l'erreur, je suis preneur :-) en attendant, je cherche...
Ba je cherche depuis ce matin, en suivant ton raisonnement de faire cela, sauf que pour l'instant......
Lol, c'est pas evident mais je trouverai, merci pour tes indications blux même si en relisant ton code, y'a certaines choses que je ne comprend pas :-( genre :
Set Ws = DBEngine.CreateWorkspace("tmp", "admin", "", dbUseJet)
par exemple !
Pour le reste :
une requête UPDATE T_PORT SET prise = '' WHERE SWITCH = AND PORT =
et DELETE * FROM PRISE WHERE PRISE =
Un truc comme ça, en fait...
En fait j'ai testé le code qui suit mais il me dit "objet requis"
Dim test test = "UPDATE T_PORT SET Prise = '" & Resultat.Value & "' WHERE [N°Switch] = '" & Switch.Value & "' AND PORT = '" & Port.Value & "'" test = test & "DELETE [Port] FROM T_PORT WHERE Prise = 'Calcul'
Je crois que je galère un peu à comprendre tou ça :-(
Dim test Dim test2 test = "UPDATE T_PORT SET Prise = '" & Resultat.Value & "' WHERE [N°Switch] = '" & Switch.Value & "' AND PORT = '" & Port.Value & "'" test2 = "DELETE [Port] FROM T_PORT WHERE Prise = '" & Resultat.Value & "'; " MsgBox test MsgBox test2
mais je ne sais pas si ca fonctionne car au moment du click, j'ai une MsgBox "Objet Requis", but why ??