Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1745 connectés 

 


Dernière réponse
Sujet : Requête SQL.
Mara's dad

Loom the Gloom a écrit a écrit :

ok alors essayons de comprendre
au lieu d'avoir incident.agression, incident.vol etc
je mets un champ typeIncident. et là dedans je stocke quoi ? quelle relation fais je avec cette nouvelle table ?  
 
pour cette nouvelle table, quels sont donc les champs que je dois créer ?  
je précise que j'ai déja une table typeIncident qui me donne la liste des 9 types d'incident possible
 
 
...  




 
Et tu as donc 9 relations entre INCIDENT et typeIncident ! ! !
 
Bon, dans ta table typeIncident tu ajoutes un champs NiveauDeGravité s'il n'y en as pas déjà un.
 
Ensuite il te faut une nouvelle table qui fasse la relation entre INCIDENT et typeIncident, disons ListeIncidents.
 
Dans ListeIncidents il faut au moins 2 champs:
1- Identifiant de l'indident
2- Identifiant du type d'incident
 
Exemple de requête:
 
SELECT INCIDENT.id, Max(typeIncident.NIVEAU) AS MaxDeNIVEAU
FROM INCIDENT, ListeIncidents, typeIncident
WHERE (((ListeIncidents.id_incident)=[INCIDENT].[ID]) AND ((ListeIncidents.id_typeIncident)=[typeIncident].[ID]))
GROUP BY INCIDENT.id;
 
Qui te donne pour chaque incident le type d'incidant ayant le niveau le plus élevé.


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Mara's dad

Loom the Gloom a écrit a écrit :

ok alors essayons de comprendre
au lieu d'avoir incident.agression, incident.vol etc
je mets un champ typeIncident. et là dedans je stocke quoi ? quelle relation fais je avec cette nouvelle table ?  
 
pour cette nouvelle table, quels sont donc les champs que je dois créer ?  
je précise que j'ai déja une table typeIncident qui me donne la liste des 9 types d'incident possible
 
 
...  




 
Et tu as donc 9 relations entre INCIDENT et typeIncident ! ! !
 
Bon, dans ta table typeIncident tu ajoutes un champs NiveauDeGravité s'il n'y en as pas déjà un.
 
Ensuite il te faut une nouvelle table qui fasse la relation entre INCIDENT et typeIncident, disons ListeIncidents.
 
Dans ListeIncidents il faut au moins 2 champs:
1- Identifiant de l'indident
2- Identifiant du type d'incident
 
Exemple de requête:
 
SELECT INCIDENT.id, Max(typeIncident.NIVEAU) AS MaxDeNIVEAU
FROM INCIDENT, ListeIncidents, typeIncident
WHERE (((ListeIncidents.id_incident)=[INCIDENT].[ID]) AND ((ListeIncidents.id_typeIncident)=[typeIncident].[ID]))
GROUP BY INCIDENT.id;
 
Qui te donne pour chaque incident le type d'incidant ayant le niveau le plus élevé.

Loom the Gloom ok alors essayons de comprendre
au lieu d'avoir incident.agression, incident.vol etc
je mets un champ typeIncident. et là dedans je stocke quoi ? quelle relation fais je avec cette nouvelle table ?  
 
pour cette nouvelle table, quels sont donc les champs que je dois créer ?  
je précise que j'ai déja une table typeIncident qui me donne la liste des 9 types d'incident possible
 
 
...
Loom the Gloom

Mara's dad a écrit a écrit :

Je te l'ai déjà dis, le design de ta base est ... pas top !
 
Au lieu de multiplier les champs :
INCIDENT.agression
INCIDENT.vol
INCIDENT.incendie
...
 
Tu ferais mieux d'avoir une autre table, qui te donne la liste des types d'incident pour un INCIDENT, chaque type étant affecté d'un niveau de gravité, ce qui te permetrait de sélectionner directemment celui ayant le niveau le plus haut et qui te débarasserait de tous ces iif() qui font quand même pas très propre.
 
Comment tu va faire pour maintenir ton application le jour ou un utilisateur te pondra de nouveaux types d'incidents ?
 
C'est pas une question en l'air !
Tu peux être QUAZIEMENT certain que çà va arriver, même si on t'a jurré que çe n'est pas le cas...
 
Si t'as besoin d'aide pour la modélisation, ben, tu sais ou demander  :D  




 
 
je sais bien que c pas trop évolutif, mais c'était la seule solution que j'avais envisagé
je leur avait dit, qu'il ne pourrait pas ajouter de type d'incident, mais que les sous catégories pouvaient être rajoutées autant que possible (j'avais fait pour en tout cas)
 
je vais réflechir à cette nouvelle organisation
 
n'hésites pas à développer ton idée
 
et encore merci  :jap:

Mara's dad Je te l'ai déjà dis, le design de ta base est ... pas top !
 
Au lieu de multiplier les champs :
INCIDENT.agression
INCIDENT.vol
INCIDENT.incendie
...
 
Tu ferais mieux d'avoir une autre table, qui te donne la liste des types d'incident pour un INCIDENT, chaque type étant affecté d'un niveau de gravité, ce qui te permetrait de sélectionner directemment celui ayant le niveau le plus haut et qui te débarasserait de tous ces iif() qui font quand même pas très propre.
 
Comment tu va faire pour maintenir ton application le jour ou un utilisateur te pondra de nouveaux types d'incidents ?
 
C'est pas une question en l'air !
Tu peux être QUAZIEMENT certain que çà va arriver, même si on t'a jurré que çe n'est pas le cas...
 
Si t'as besoin d'aide pour la modélisation, ben, tu sais ou demander  :D
Loom the Gloom kess que c que ce message d'erreur...  
 
"la fonction iif sans () dans l'expression iif(..... "
 
ça veut dire koi ?
c  la tout le pb...
Loom the Gloom up :bounce:
Loom the Gloom

Harkonnen a écrit a écrit :

je viens de tester, en remplaçant tes fonctions VB par des fonctions à moi, et ça pète aussi
 
donc, comme dit thegti, à mon avis le seul moyen est de diviser ta requete en sous requetes.
 
bon courage... si j'ai 5mn dans la journée j'essaierai de m'y coller, mais c'est pas gagné :(  




 
 
ok je veux bien la séparer en plusieurs requetes mais comment faire ? je coupe à quel niveau ? et comment je fais après pour n'avoir plus qu'une requete globale ?
 
merci qd meme de te prendre la tete pr ça  :jap:  :ange:

Harkonnen je viens de tester, en remplaçant tes fonctions VB par des fonctions à moi, et ça pète aussi
 
donc, comme dit thegti, à mon avis le seul moyen est de diviser ta requete en sous requetes.
 
bon courage... si j'ai 5mn dans la journée j'essaierai de m'y coller, mais c'est pas gagné :(
thegti J'ai déjà eu le même problème, c limité Access
Faut décomposer la requêtes en plusieurs sous-requêtes.
Maintenant, vu la mauvaise tournure de ta requête, c'est pas gagné ;)
Loom the Gloom

Harkonnen a écrit a écrit :

cette requete se "compile" normalement sous access, sans erreur ?  




 
 
qu'entends tu par se compile ?  
le module dans lequel je la crée passe ; lorsque je clique sur le bouton qui appelle la création de la requête ça marche, mais quand j'essaie d'obtenir les résultats ou de passer en mode création, ça plante...

Loom the Gloom

Harkonnen a écrit a écrit :

ouh putain........  :ouch:  




 
c pas de la requête de pd ça hein ??   :D  
stp soit gentil avec moi si je programme comme une merde !!  
 
 
SQL RULEZZZ  :sol:

Harkonnen cette requete se "compile" normalement sous access, sans erreur ?
Harkonnen ouh putain........  :ouch:
Loom the Gloom ok, surtout ne t'effraie pas ...!!  :D  
 
SELECT INCIDENT.date, nomSource, RUE.nomRue, QUARTIER_ELU.nomQuartierElu, QUARTIER.nomQuartier, catIncident, INCIDENT.description
FROM INCIDENT, QUARTIER_ELU, RUE, QUARTIER, SOURCE, CAT_INCIDENT
WHERE INCIDENT.numQuartierElu=QUARTIER_ELU.numQuartierElu AND SOURCE.numSource = 2^(chercheSelection(INCIDENT.numSource , 20)) AND INCIDENT.numRue= RUE.numRue AND INCIDENT.numQuartier=QUARTIER.numQuartier AND CAT_INCIDENT.catIncident = iif(INCIDENT.agression =0,iif(INCIDENT.vol =0,iif(INCIDENT.incendie =0 , iif(INCIDENT.dégradation =0,iif(INCIDENT.comportement =0,iif(INCIDENT.problèmes =0,iif(INCIDENT.regroupements =0,iif(INCIDENT.éclairage =0,SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 9 AND numCatIncident = 2^chercheSelection(INCIDENT.divers, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=9) ,'Eclairage public'),SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 7 AND numCatIncident = 2^chercheSelection(INCIDENT.regroupements, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=7)),SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 6 AND numCatIncident = 2^chercheSelection(INCIDENT.problèmes, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=6)),SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 5 AND numCatIncident = 2^chercheSelection(INCIDENT.problèmes, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=5)), SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 4 AND numCatIncident = 2^chercheSelection(INCIDENT.dégradation, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=4)),SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 3 AND numCatIncident = 2^chercheSelection(INCIDENT.incendie, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=3)),SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 2 AND numCatIncident = 2^chercheSelection(INCIDENT.vol, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=2)),SELECT catIncident FROM CAT_INCIDENT WHERE typeIncident = 1 AND numCatIncident = 2^chercheSelection(INCIDENT.agression, SELECT COUNT(*) FROM CAT_INCIDENT WHERE typeIncident=1));
 
 
 
 
tu comprends mieux le pb ???? :lol:
Harkonnen envoie toujours
Loom the Gloom

Harkonnen a écrit a écrit :

la grille d'interrogation doit etre la grille qui te permet de faire une requete en mode création, en faisant glisser les champs de la table
 
c'est pour ça que tu devrais faire ta requete directement en mode SQL dans access je pense, à la mimine  :)  




 
ouais mais la actuellement je suis en mode sql, et ça ne marche pas mieux.
 
il faudrait que cette requete se fasse automatiquement en cliquant sur un bouton, c'est pour ça que je la fais par vba.
si je te montre la requête , tu peux trouver l'erreur potentielle ??

Harkonnen la grille d'interrogation doit etre la grille qui te permet de faire une requete en mode création, en faisant glisser les champs de la table
 
c'est pour ça que tu devrais faire ta requete directement en mode SQL dans access je pense, à la mimine  :)
Loom the Gloom

Harkonnen a écrit a écrit :

:hello:  
 
j'imagine que tu fais ta requete dans l'assistant requete d'access en mode création ;)
 
et si tu la faisais directement en mode SQL ? je me souviens avoir tapé des requetes immenses sans aucun prob  




 
Harkonnen fidèle au poste !!
 
 
ben en fait je crée la requête sous vba en faisant un createquerydef, ms ça revient au mem paske après je suis allé la modifier en mode dsl et ca change rien
 
au fait g vérifié dans les restrictions d'access, et une requete sql peut faire 64000 caractères, donc c pas ça. il semblerait que ce soit au niveau du nombre de caractères dans une cellule de grille d'interrogation qui est limité à 1024, et c ça qui plante ! as tu une idée de ce que c'est ?

Harkonnen :hello:  
 
j'imagine que tu fais ta requete dans l'assistant requete d'access en mode création ;)
 
et si tu la faisais directement en mode SQL ? je me souviens avoir tapé des requetes immenses sans aucun prob
Loom the Gloom

thegti a écrit a écrit :

Tu décomposes ta requête en plusieurs requêtes  




 
et je coupe à quel niveau ?  
 
et je les relie comment après ?? :??:

thegti Tu décomposes ta requête en plusieurs requêtes
Loom the Gloom

HappyHarry a écrit a écrit :

tu fais koi exactement ?  




 
ben en fait g une grosse requête sql bien immense, avec plein de iif, des jointures, des requêtes imbriquées, etc... mais on dirait qu'elle est trop grosse...
sans entrer dans le détail, voilà... y'a t'il moyen de remédier à cela ??

HappyHarry tu fais koi exactement ?
Loom the Gloom

HappyHarry a écrit a écrit :

les 1024 caracteres autorises par koi ???  




 
ben je sais pas, il me dit l'expression entrée dépasse la limite des 1024 caractères pour la grille de création...
 
ça vous dit qqchose ?

HappyHarry les 1024 caracteres autorises par koi ???
Loom the Gloom comment faire lorsqu'on veut créer une requête sous vba, mais que cette requête dépasse les 1024 caractères autorisées ???
 
merci

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)