IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Problème avec la propriété "Filter" de mes DBLookupComboBox


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Points : 89
    Points
    89
    Par défaut Problème avec la propriété "Filter" de mes DBLookupComboBox
    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)


    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;
    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.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;
    Celle-ci permet de filtrer les personnes travaillant de le service (et le donc le site) choisi (à l'aide de la DBLookupComboBox4).


    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 :

    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)
    Voilà je ne comprends rien, à l'aide!!!

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Points : 89
    Points
    89
    Par défaut

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Juste une question, pourquoi ne pas relancer une requête au lieu d'un filter ?
    en SQL Server, ça devrait être plus rapide ? car le Filter construit une requête qui mélange ta requête d'origine avec le filter, et souvent pas très jojo ...

    perso, je n'ai pas utilisé le filter depuis mon arret de Paradox ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with TMachinQuery(DBLookupComboBox5.ListSource.DataSet) do
    begin
      DisableControls(); 
      Close();
      SQL.Text := 'Select Truc From Machin Where Bidule = Chose';
      Open();
      EnableControls();			
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Tu trouveras, je pense, une meilleure aide dans le forum Delphi et base de données.

Discussions similaires

  1. Problème avec la propriété filter
    Par Morgoth818 dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/08/2007, 22h20
  2. [Delphi 6] Problème avec la propriété Text d'un composant
    Par bionoir dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/12/2005, 12h23
  3. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo