Bien le bonjour !!!
J'ai pendant quelques temps cherché comment affiné la sélection d'un salarié (selon son lieu de travail et le service dans lequel il travaille), et j'ai fini par trouvé (à l'aide de ce forum :p)!
J'utilise donc la propriété Filter, vous l'aurez compris.
Seulement voilà, je ne sais pas trop comment m'expliquer, alors je vais vous présenter mon Code. Mais avant toute chose, quelques règles afin de mieu comprendre :
-Une Personne travaille sur un Site. (Travaille est l'association porteuse des identifiants de Personne + Site, permettant de savoir qui travaille où)
-Un Site héberge un ou plusieurs Services. (Héberger est l'association porteuse des identifiants de Site + Service, permettant de savoir quel site héberge quel service)
-Une Personne émarge un Service. (Emarger est l'association porteuse des identifiants de Personne + Service, permettand de savoir qui travaille dans quoi)
Cette fonction permet de filtrer les services hébergés par le Site choisi (à l'aide de la DBLookupComboBox3).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TForm2.DBLookupComboBox3Exit(Sender: TObject); begin if CheckBox1.Checked then while DM1.SiteSite_ID.Value <> DM1.HebergerSite_ID.Value do DM1.Heberger.Next; DBLookupComboBox4.ListSource.DataSet.Filter := 'Serv_ID = '+inttostr(DM1.HebergerServ_ID.Value); while DM1.SiteSite_ID.Value = DM1.HebergerSite_ID.Value do begin DBLookupComboBox4.ListSource.DataSet.Filter := DBLookupComboBox4.ListSource.DataSet.Filter + 'OR Serv_ID = '+inttostr(DM1.HebergerServ_ID.Value); DM1.Heberger.Next; end; end;
Celle-ci permet de filtrer les personnes travaillant de le service (et le donc le site) choisi (à l'aide de la DBLookupComboBox4).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TForm2.DBLookupComboBox4Exit(Sender: TObject); begin if CheckBox2.Checked then while DM1.ServiceServ_ID.Value <> DM1.EmargerServ_ID.Value do DM1.Emarger.Next; DBLookupComboBox5.ListSource.DataSet.Filter := 'Pers_ID = '+inttostr(DM1.EmargerPers_ID.Value); while DM1.ServiceServ_ID.Value = DM1.EmargerServ_ID.Value do begin DBLookupComboBox5.ListSource.DataSet.Filter := DBLookupComboBox5.ListSource.DataSet.Filter + 'OR Pers_ID = '+inttostr(DM1.EmargerPers_ID.Value); DM1.Emarger.Next; end; end;
Maintenant voici mon problème, que je ne comprends pas. =/
Asser aléatoirement (où alors je n'ai pas compris exactement quand sa bug) je reçois un message d'erreur lorsque je souhaite ouvrir ma 2ème ou 3ème DBLookupComboBox (pour choisir le Service ou le Salarié).
Ce message d'erreur dit :
Voilà je ne comprends rien, à l'aide!!!First chance exception at $7C812A5B. Exception class EDBEngineError with message 'General SQL error.
[Microsoft][ODBC SQL Server Driver][SQL Server]Ligne 1 : syntaxe incorrecte vers ')'.
[Microsoft][ODBC SQL Server Driver][SQL Server]Certaines parties de l'instruction SQL sont par trop imbriquées. Réécrivez la
requête ou subdivisez-la en requêtes plus petites.'. Process Project_GESPERS.exe (3400)
Partager