Problème de requêtes sur access

Problème de requêtes sur access - VB/VBA/VBS - Programmation

Marsh Posté le 30-08-2005 à 15:07:49    

Bonjour à tous,
 
Pour une gestion de planning je souhaiterai créer une requête access qui affiche les employés sans travail attribué.
J'ai une table contenant le nom des employés, ainsi qu'une requête qui liste les employés avec du boulot attribué, mais impossible d'obtenir ce que je veux avec (en faisant la différence).
Je rage !! help me !

Reply

Marsh Posté le 30-08-2005 à 15:07:49   

Reply

Marsh Posté le 30-08-2005 à 15:17:19    

je ferais une jointure externe en affichant tous les nom employé
 
apres un test sur le champ "boulot attribué"

Reply

Marsh Posté le 30-08-2005 à 16:16:36    

Le problème est que je ne peux pas tester sur le champ boulot attribué étant donné que je recherche les employés sans boulot.
J'ai en fait une table nommée "Jour employé" qui correspond à une journée effectuée par un employé à telle date sur telle chantier etc etc...
Je ne peux tester dessus puisque les personnes sans boulot attribué n'ont pas d'enregistrement sur cette table.
J'ai essayé de faire afficher tous les employés avec la condition : "n'apparait pas dans la requete "employé avec du boulot attribué"", mais ca me met une erreur de fonction d'agrégats un truc du genre

Reply

Marsh Posté le 30-08-2005 à 16:27:03    

voici le message d'erreur exact :  
Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée : 'Not[Employés groupe].[Référence employés]=[requête gens qui bossent].[Référence employé] ,
comme une partie de la fonction d'agrégat.

Reply

Marsh Posté le 30-08-2005 à 17:27:01    

De ce que je me souviens des cours de BDD.. l'opérateur différence ne peut etre effectuer que sur 2 tables comparables (i.e., contenant le meme nombres de colonnes avec des types identiques entre les colonnes de chaques tables)
 
Donc verifie que ta table ne contient que les noms des employes
 
Edit-> J'ai redige ce msg juste apres celui de Lenoiche, mais ayant ete derange, je ne l'ai poste que maintenant...


Message édité par guendalf le 30-08-2005 à 17:31:47

---------------
Guendalf
Reply

Marsh Posté le 30-08-2005 à 17:31:19    

c est pour ca que je te dis de faire une jointure externe entre les 2 tables
 
tu as une table avec tous les employés (ceux qui travaillent et ceux qui n en ont pas )
 
et une autre table avec les gens ki travaillent
 
donc la jointure externe va faire un produit cartesien
il affichera tous les employés , et rajoutera les colonnes de ceux qui travaillent , laissant ces champs vide pour ceux qui ne travaille pas
 
et zou un test du champs vide et ca roulaize ........

Reply

Marsh Posté le 30-08-2005 à 17:41:57    

Si je puis me permettre.. il me semble qu'il suffit de faire une selection de la table des employes pour ne garder que leur noms, puis de faire la difference avec la table contenant uniquement les noms des gens qui travaillent.


---------------
Guendalf
Reply

Marsh Posté le 30-08-2005 à 17:43:38    

c est une solution
lol

Reply

Marsh Posté le 31-08-2005 à 08:29:46    

Comment fait-on la différence dont vous parlez ?

Reply

Marsh Posté le 31-08-2005 à 08:33:40    

ca va pas ca?:
 
select NomEmploye from Employe  
where NomEmploye not in  
(Select NomEmploye from Jour_Employe)

Reply

Marsh Posté le 31-08-2005 à 08:33:40   

Reply

Marsh Posté le 31-08-2005 à 09:05:08    

Bingo !!
merci poulet ! :)

Reply

Marsh Posté le 31-08-2005 à 09:08:28    

:sol:

Reply

Marsh Posté le 01-09-2005 à 09:54:18    

bonjours a tous.
je suis nouveaux dans access , et j'ai du mal a resourdre un pb dans le cadre d'un projets .
 
en fait mon pb est le suivant. j'ai un formulaire qui me sert d'interface pour donnerles paramettres d'une requette.
 
dans le formulaire
jai le code (DoCmd.OpenQuery "nom de la requete" )
 
et dans la requete j'ais le code SQL suivant
Select*
FROM T29
WHERE (((T29.Feld10) Like forms!brice!Bucht & "*" ) And ((T29.Feld11) Like forms!brice!Leiste & "*" ));
 
ici j'ai comme nom de la table T29 ce que je veux c'est de pouvoir utiliser comme nom de la table une variable ,qui sera donne manuellement  dans le formulaire(car en fait j'aimerai applique la mm requete a plusieur table identique  
merci de votre reponse

Reply

Marsh Posté le 01-09-2005 à 11:28:28    

ben au lieu d'utiliser DoCmd.OpenQuery tu te connectes proprement a ta bdd sia ODBC
 
un truc de la forme:
 

Code :
  1. Dim cnn As New ADODB.Connection, rst As New ADODB.Recordset
  2. cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=c:\chemin\tabase.mdb;"
  3. 'ici tu contruit ta requete dynamiquement selon les donnees entrees
  4. sql = "SELECT .... "
  5. rst.Open sql, cnn, adOpenForwardOnly, adLockReadOnly
  6. '...
  7. '...
  8. 'tu lis tes donnees tu fermes tout...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed