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

Delphi Discussion :

Problème de filtre avec ADOTABLE Dans TEdit sur un DBGRID


Sujet :

Delphi

  1. #21
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 123
    Points : 5 793
    Points
    5 793
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    tu n'as peut-être pas tort mais moi, quand on ne me le spécifie pas, je perds le fil. (Déjà qu'ADO n'a jamais été ma tasse de thé )
    Comme la discussion a été lancée sans indication je pars toujours sur la version community (donc 11)
    Toutefois si le helper n'existe pas, la fonction existe si j'en crois ceci http://www.delphibasics.co.uk/Method...hod=StartsWith
    Joli déterrage - Je me rappelais plus que StartWith était possible avec D7 - Faut dire que c'est un peu loin maintenant !

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 452
    Points : 35
    Points
    35
    Par défaut
    Je me demande pourquoi la discussion est marquée comme résolue alors que je n'ai pas encore résolu mon problème. J'ai toujours un problème avec mon code. Voici ce que j'ai utilisé comme code :

    Dans le Edit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TFMAJ_Sit_Cl5.Edit9Change(Sender: TObject);
    Var
      CountR : Integer;
    Begin
      if Edit9.Text = '' then
          AT_Prv.Filtered := False
        Else
          Begin
            AT_Prv.Filter := Format('Produit %s %s', ['LIKE', QuotedStr(Edit9.Text + '%')]);
            AT_Prv.Filtered := True;
            CountR := AT_Prv.RecordCount;
            LabelX.Caption := IntToStr(CountR);
            if CountR = 0 then
              Begin
                LabelX.Visible := True;
                LabelX.Caption := 'Enregistrement " ' + Edit9.Text + ' " Non Existe';
              End
            Else
              LabelX.Visible := False;
          End;
    end;


    Dans le ADOTABLE !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFMAJ_Sit_Cl5.AT_PrvFilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    begin
    Accept := Copy(LowerCase(DataSet['Produit'].AsString),1,Length(edit9.text))=LowerCase(edit9.text)
     
    end;

    erreur :
    Images attachées Images attachées  

  3. #23
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 946
    Points
    1 946
    Par défaut
    Citation Envoyé par LandGreen Voir le message
    Je me demande pourquoi la discussion est marquée comme résolue alors que je n'ai pas encore résolu mon problème.
    La discussion a été créé par Ferhat. Tu ne peux donc pas enlever le Résolu.
    Le mieux est de créer une autre discussion.

  4. #24
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 067
    Points
    41 067
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    @sergio_is_back ce n'est pas tant un déterrage que un lien que je garde sous le coude, j'ai ou plutôt j'avais, du D3 en maintenance et comme windows n'aime pas les anciens formats hlp et fait sauter l'installation de l'ancien lecteur d'aide presque à chaue mise à jour, je gagne du temps P.S. je ne comprends pas le

    Citation Envoyé par LandGreen Voir le message
    Je me demande pourquoi la discussion est marquée comme résolue alors que je n'ai pas encore résolu mon problème.
    parce que ce n'est aps vous qui avez initier la discussion.

    J'ai toujours un problème avec mon code.
    vous avez oublier que j'avais stipuler "en remplacement de"
    Dans la discussion que j'avais pointé avec ferhart, OnDev indiquait comment utiliser OnfilterRecord qui vous avait déjà suggéré l'utilisation de OnFilterRecord.
    Bref c'est l'un ou l'autre pas les deux.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TFMAJ_Sit_Cl5.Edit9Change(Sender: TObject);
    Var
      CountR : Integer;
    begin
      AT_Prv.Filtered:=Trim(Edit9.Text)<>''
      AT_Prv.Refresh;
      if AT_Prv.RecordCount=0 
        then  LabelX.Caption := 'Enregistrement " ' + Edit9.Text + ' " Non Existe'
        else  LabelX.Caption := IntToStr(AT_Prv.RecordCount);
    end;
    Pourquoi faut-il que j'ai l'impression d'écrire à votre place ? Bien sûr il faudra peut-être adapté à D7, ceci est écrit à la volée sans test sur Delphi

    Dans le ADOTABLE !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFMAJ_Sit_Cl5.AT_PrvFilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    begin
    Accept := Copy(LowerCase(DataSet['Produit'].AsString),1,Length(edit9.text))=LowerCase(edit9.text)
    end;
    Dommage j'aurai bien aimé un test avec StartsWith

    Cependant, j'aimerais vous faire remarquer que le message d'erreur est loin d'être le même qu'un problème de syntaxe.
    Un filtre ne peux pas être utiliser sur une table détail
    Vous avez oublié de nous indiquer, en ne nous indiquant pas que cette table était déjà filtrée, du fait qu'il s'agissait d'une table "détail". voilà ce que c'est que de se brancher sur une discussion dont vous n'êtes pas l'auteur, ommettant ainsi des explications CAPITALES
    Si vous voulez garder la recherche, il va falloir revoir l'utilisation de la Table, passer à une Query (Select <liste des colonnes> from Tabledetail where codemaitre=:code)
    ce qui, de mon point de vue sera beaucoup plus "économique" ne terme de temps d'accès sur la partie filtre
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #25
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 123
    Points : 5 793
    Points
    5 793
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    P.S. je ne comprends pas le
    Est-ce l'important ?
    Y'a des gens qui "moinssent" pour le plaisir de "moinsser" !!!

  6. #26
    Membre habitué
    Homme Profil pro
    libre
    Inscrit en
    Mai 2024
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Mai 2024
    Messages : 104
    Points : 186
    Points
    186
    Par défaut
    J'ai toujours un problème avec mon code. Voici ce que j'ai utilisé comme code :
    Tu utilises les deux codes pour la même opération alors il y a une petite interférence

    Soit le premier cas via le OnChange du TEdit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.SearchEditChange(Sender: TObject);
    var
     S:string;
    begin
     S := Trim(SearchEdit.Text);
     if S = '' then
     begin
        TagsTable.Filtered := False;
     end else
     begin
       TagsTable.Filter := 'ManagedTxt LIKE '+QuotedStr(S+'%');
       TagsTable.Filtered := True;
     end;
    end;
    Ou via l’événement OnFilterRecord du AdoTable qui utilise également OnChange du TEdit pour activer et désactiver le filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.TagsTableFilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    var
    s:string;
    begin
      S := Trim( SearchEdit.Text );
      Accept := StrLIComp(PChar(DataSet.FieldByName('ManagedTxt').AsString),
                          PChar(S),Length(S)) = 0;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.SearchEditChange(Sender: TObject);
    begin
     TagsTable.Filtered := Trim(SearchEdit.Text) <> '';
     TagsTable.Refresh
    end;

  7. #27
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 532
    Points : 25 071
    Points
    25 071
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Dommage j'aurai bien aimé un test avec StartsWith
    plutot StartText et semble que cela a été loupé totalement :

    Citation Envoyé par ShaiLeTroll Voir le message
    En D7

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Accept := StrUtils.StartText(edit9.text, DataSet['Produit'].AsString);
    StrUtils étant une unité à inclure dans uses.


    Ne pas oublier de faire un Refresh du DataSet lors du changement du filtre, peut-être qu'un bouton pour appliquer le filtre sera moins intrusif qu'un filtre sur un OnChange du TEdit, cela pourrait être lent

    Un code issu dans outil que j'ai codé avec la possiblité de fitrer sur le champ de son choix FFormula := Format('%s LIKE :pFilterValue', [LFieldName]); qui génère le SQL à la volée puis utilise les paramètres.
    And ADO, on peut utiliser aussi un paramètre pour le LIKE, en tout cas SQL Server le supporte, je n'ai pas vu quelle était la base de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    { TConfigEntities.TFilter }
     
    //------------------------------------------------------------------------------
    constructor TConfigEntities.TFilter.Create(AConfigContext: TConfigContext; AField: TField; const AFieldValue: string; APartial: Boolean);
    begin
      inherited Create();
     
      FFieldName := AField.FieldName;
      FFieldDataType := AField.DataType;
      FFieldValueRaw := AFieldValue;
      if APartial then
        FFieldValue := Format('%%%s%%', [AFieldValue])
      else
        FFieldValue := AFieldValue;
      FPartial := APartial;
      FParamName := 'pFilterValue';
    end;
     
    //------------------------------------------------------------------------------
    constructor TConfigEntities.TFilter.Create(AConfigContext: TConfigContext; ATableType: TConfigTableType; const AFieldName, AFieldValue: string; APartial: Boolean);
    begin
      Create(AConfigContext, AConfigContext.GetMetaDataField(ATableType, AFieldName), AFieldValue, APartial);
    end;
     
    //------------------------------------------------------------------------------
    function TConfigEntities.TFilter.GetFormula(): string;
    var
      LFieldName: string;
    begin
      if FFormula = '' then
      begin
        if FTableAlias <> ''then
          LFieldName := FTableAlias + '.' + FFieldName
        else
          LFieldName := FFieldName;
     
        if FPartial then
        begin
          // https://docs.microsoft.com/fr-fr/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15
          if FFieldDataType in [ftDate, ftDateTime, ftTime, ftTimeStamp] then
            FFormula := Format('CONVERT(VARCHAR, %s, 21) LIKE :pFilterValue', [LFieldName])
          else if FFieldDataType in [ftBoolean] then
          begin
            if ContainsText(BoolToStr(True, True), FFieldValueRaw) then
              FFormula := Format('%s = 1', [LFieldName])
            else if ContainsText(BoolToStr(False, True), FFieldValueRaw) then
              FFormula := Format('%s = 0', [LFieldName])
            else if ContainsText('NULL', FFieldValueRaw) then
              FFormula := Format('%s IS NULL', [LFieldName])
            else
              FFormula := Format('CAST(%s AS CHAR(1)) LIKE :pFilterValue', [LFieldName])
          end
          else
            FFormula := Format('%s LIKE :pFilterValue', [LFieldName]);
        end
        else
          FFormula := Format('%s = :pFilterValue', [LFieldName]);
      end;
      Result := FFormula;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    //------------------------------------------------------------------------------
    function TConfigEntities.TSQLEngine.LoadConfigs(AConfigContext: TConfigContext; ATableType: TConfigTableType; AFilter: TFilter; ASelect: TSelectOptionnalFields): string;
    const
      SQL_SELECT =
        ' SELECT %2:s %1:s ' + sLineBreak +
        ' FROM %0:s ' + sLineBreak ;
    var
      LConfigW: TConfigTableWrapper;
      LVersionningSupports: TConfigVersionningSupports;
    begin
      LConfigW := TConfigManager.Instance.Tables[Ord(ATableType)];
      LVersionningSupports := AConfigContext.VersionningSupports[ATableType];
     
      Result := Format(SQL_SELECT,
        [ AConfigContext.GetDistinguishTableName(LConfigW.TableName),
          LConfigW.FieldNames.PK +', '+ LConfigW.FieldNames.GUID +', '+ LConfigW.FieldNames.Name +
            IfThen(sofVersion in ASelect, ', '+LConfigW.FieldNames.Version, '') + IfThen(sofXML in ASelect, ', '+LConfigW.FieldNames.XML, ''),
          IfThen(LVersionningSupports.VersionLocalNotEmpty and not (sofVersion in ASelect), 'DISTINCT', '')
        ]);
      if Assigned(AFilter) then
        Result := Result + ' WHERE ' + AFilter.Formula + sLineBreak;
      Result := Result + ' ORDER BY ' + LConfigW.FieldNames.Name + sLineBreak;
    end;


    Et si c'est une relation maitre-detail , faudrait plutôt utiliser une Query SQL, les paramètres permettant de chainer les dépendances, on peut ainsi ajouter directement dans le WHERE le filtre sans tout les ajouts mentionnés dans ce sujet



    Citation Envoyé par LandGreen Voir le message
    Je me demande pourquoi la discussion est marquée comme résolue alors que je n'ai pas encore résolu mon problème. J'ai toujours un problème avec mon code. Voici ce que j'ai utilisé comme code :
    Peut-être qu'il faudrait songer ) arrêter le développement logiciel, si déjà, pour vous, comprendre un forum est hors de votre portée, déjà autant de temps pour un problème aussi simple qui se résout en 5 minutes, c'est choquant !
    Citation Envoyé par free07 Voir le message
    La discussion a été créé par Ferhat. Tu ne peux donc pas enlever le Résolu.
    Le mieux est de créer une autre discussion.
    D'ailleurs en créant une nouvelle discussion, penser à fournir un lien vers les sujets déjà existants sur le même projet pour mettre un peu le contexte et ainsi que les sujets comme celui-ci qui sert de base de réflexion, cela évite que l'on propose des pistes déjà explorées qui n'ont pas abouti issu du forum ou de stackoverflow par exemple
    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

  8. #28
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 452
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par sergio_is_back Voir le message
    Est-ce l'important ?
    Y'a des gens qui "moinssent" pour le plaisir de "moinsser" !!!

    je me suis trompé ça concerne Free07

  9. #29
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 452
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par free07 Voir le message
    La discussion a été créé par Ferhat. Tu ne peux donc pas enlever le Résolu.
    Le mieux est de créer une autre discussion.

    Bonjour,

    J'aurais accepté avec amour ta critique si tu étais l'un des membres les plus actifs que je salue :

    sergio_is_back
    SergioMaster
    Volid
    ShaiLeTroll


    Ce sont des gens qui aident vraiment les autres. Mais toi, c'est la première fois que je te vois intervenir. Je me demande si tu es arbitre ou modérateur ? Au moins, tu aurais dû ajouter une réponse concernant le problème que je rencontre ; ça aurait rendu ta critique (ou ton attaque) plus jolie.

    Merci de laisser les modérateurs officiels faire leur travail.

  10. #30
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 452
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Volid Voir le message

    Ou via l’événement OnFilterRecord du AdoTable qui utilise également OnChange du TEdit pour activer et désactiver le filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.TagsTableFilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    var
    s:string;
    begin
      S := Trim( SearchEdit.Text );
      Accept := StrLIComp(PChar(DataSet.FieldByName('ManagedTxt').AsString),
                          PChar(S),Length(S)) = 0;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.SearchEditChange(Sender: TObject);
    begin
     TagsTable.Filtered := Trim(SearchEdit.Text) <> '';
     TagsTable.Refresh
    end;

    Comme d'habitude, vous m'avez sauvé ! Merci beaucoup.
    J'ai choisi la deuxième solution et ça fonctionne parfaitement.
    Encore merci !

  11. #31
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 946
    Points
    1 946
    Par défaut
    Bonjour,

    Citation Envoyé par LandGreen Voir le message
    Bonjour,

    J'aurais accepté avec amour ta critique si tu étais l'un des membres les plus actifs que je salue :

    sergio_is_back
    SergioMaster
    Volid
    ShaiLeTroll


    Ce sont des gens qui aident vraiment les autres. Mais toi, c'est la première fois que je te vois intervenir. Je me demande si tu es arbitre ou modérateur ? Au moins, tu aurais dû ajouter une réponse concernant le problème que je rencontre ; ça aurait rendu ta critique (ou ton attaque) plus jolie.

    Merci de laisser les modérateurs officiels faire leur travail.
    Tu posais une question dont je connaissais la réponse j'y ai donc répondu tout simplement, c'est dommage de considérer cela comme une critique ou une attaque.

    Je ne suis ni modérateur, ni arbitre, je suis juste un vieil ( et vieux ) utilisateur de ce site, d'ailleurs j'y suis membre bien avant 2005 ( comme c'est précisé sur mon profil ) à l'époque ce n'était qu'un forum de discussion, il n'y avait pas les actualités et j'y étais plus + actif que maintenant.
    Maintenant, je n'ai plus trop le temps.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/09/2016, 12h27
  2. Réponses: 2
    Dernier message: 12/01/2008, 14h57
  3. Problème de requête avec cumul des conditions sur un champ
    Par UtopieAmbiante dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2006, 10h52
  4. Réponses: 13
    Dernier message: 01/12/2005, 05h34
  5. Réponses: 7
    Dernier message: 23/07/2005, 12h50

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