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

Langage Delphi Discussion :

Erreur lors de la récupération des users de l'Active Directory


Sujet :

Langage Delphi

  1. #1
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut Erreur lors de la récupération des users de l'Active Directory
    Salut tout le monde, voici le code que j'utilise pour récupérer la liste des comptes actifs de l'Active Directory :
    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
    procedure RemplirUserSessionList( aList : TStrings );
    var
      Container : IADsContainer;
      e : IEnumVARIANT;
      varArr : OleVariant;
      lNumElements : ULong;
      obj : IADs;
      hr : Integer;
      NomOrdinateur : string;
      User : IADsUser;
    begin
    //  CoInitialize( nil );
     
      Container := nil;
      NomOrdinateur := GetNomOrdinateur;
      ADsGetObject( 'WinNT://' + NomOrdinateur, IADsContainer, Container );
     
      Container.Filter := VarArrayOf( [ 'user' ] );
      hr := ADsBuildEnumerator( Container, e );
     
      while Succeeded( Hr ) do
      begin
        hr := ADsEnumerateNext( e, 1, varArr, lNumElements );
     
        if lNumElements = 0 then
          Break;
     
        IDispatch( varArr ).QueryInterface( IADs, obj );
        if obj <> nil then
        begin
          ADsGetObject( 'WinNT://' + NomOrdinateur + '/' + obj.Name, IADsUser, User );
     
          if not User.AccountDisabled then // Le compte n'est pas disabled
            if not User.IsAccountLocked then // Le compte n'est pas locked
              if ( User.Get( 'userFlags' ) and ADS_UF_PASSWD_CANT_CHANGE ) = 0 then // Le user peut changer son mot de passe
                aList.Add( obj.Name );
        end;
     
        varArr := varEmpty;
      end;
     
    //  User._Release;
    //  obj._Release;
    //  Container._Release;
     
    //  CoUninitialize;
    end;
    Et je l'appelle ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure Test;
    var
      slUser : TStringList;
    begin
      slUser := TStringList.Create;
      RemplirUserSessionList( slUser );
      ShowMessage( slUser.Commatext );
      slUser.Free;
    end;
    Lorsque je l'exécute, j'ai un message d'erreur à la ligne ShowMessage( slUser.Commatext ); si j'essaie d'afficher le Count ou autre chose de la slUser, ça met le message d'erreur, d'ailleurs si je n'affiche pas le ShowMessage, j'ai le message d'erreur sur le Free.
    Le message d'erreur est :
    ---------------------------
    Notification d'erreur du débogueur
    ---------------------------
    Echec du projet C:\Travail\MyReport5\MyReport5.5.0\Data5.exe avec le message : 'violation d'accès à 0x87d03020 : lecture de l'adresse 0x87d03020'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
    ---------------------------
    OK
    ---------------------------
    J'ai essayé en rajoutant/supprimant des CoInitialize( nil ); / CoUninitialize;
    En appelant des ._Release; ou pas mais j'ai toujours cette erreur.

    Ce qui est bizarre est que ma StringList est bien instanciée, dans le code RemplirUserSessionList, elle est bien instanciée et si j'affiche un commatext, cela fonctionne. Elle perd son instanciation à la sortie de la procédure, comme si un objet se libérait et au lieu de se libérer, il libérait la StringList.

    Merci pour votre aide car je ne trouve pas.

  2. #2
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Up ?

    PS : même si vous ne connaissez pas la solution, pouvez-vous essayer le code pour me dire si ça bugue aussi chez vous ou pas ?

    Merci.

  3. #3
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Et si au lieu de commatext, vous mettez text as-tu la même erreur ? (désolé, je ne suis pas en active directory, je n'ai pas pu tester votre code).

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Salut,

    je sais pas si ça peut aider le schmilblik à avancer, mais j'ai testé avec juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for hr := 0 to 5 do aList.Add(IntToStr(hr));
    dans ta proc RemplirUserSessionList, et ça donne 0,1,2,3,4,5

    Y a donc un 'blème ailleurs : vire la boucle pour déjà voir si tu peux récupérer le premier user, et à coups de ShowMessage bien placés dans la proc tu devrais y arriver (j'ai pas d'AD, là).
    Good luck,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    En fait le problème est plus complexe.
    Le même code appelé dans une fonction bugue et ce code copié/collé à la place de son appel ne bugue pas.
    Que je fasse du .Commatext, .Text, .Count ou que je remplace la déclaration de la fonction pour qu'elle retourne la liste ou son commatext ne répare le problème.
    La fonction en elle-même fonctionne car si je mets un ShowMessage au moment du aList.Add( obj.Name ); j'obtiens bien chaque nom de chaque utilisateur de l'AD.

    Le plus bizarre est que j'utilise cette même méthode (je rajoute son unité dans le projet) dans un autre projet et elle fonctionne parfaitement.

    PS : pas besoin d'avoir un AD installé sur sa machine, je fais sur un XP famillial et il me retrouve Administrateur et le nom de ma cession, d'ailleurs, ce code est bizarre car si on ne filtre pas sur user, on retrouve aussi les groupes d'utilisateurs ainsi que les services installés sur la machine.

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par WebPac Voir le message
    PS : pas besoin d'avoir un AD installé sur sa machine (...)
    Cool, mais qu'est-ce qu'il faut rajouter dans les uses pour que ça compile (un peu la flemme de chercher... ) ?
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Salut, il faut rajouter Variants, ActiveDs_TLB, ActiveX et adshlp dans les uses.

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Yep,
    ActiveDs_TLB et adshlp inconnus de mon D7...
    Désolé, je suis contraint de passer la main...
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Salut,
    si tu veux télécharger les fichiers sources, voici un lien.

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Yep, Webpac !

    Merci pour le lien.
    Je ne te serai pas d'une grande utilité, il y a dans cette source plein de choses avec lesquelles je n'ai jamais joué...

    Cependant, j'arrive (effectivement ça fonctionne sans AD !) à un résultat en déportant la déclaration de slUser comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    implementation
     
    {$R *.dfm}
     
    var
      slUser : TStringList;
     
    procedure RemplirUserSessionList( aList : TStrings );
    ...
    Les spécialistes des pointeurs et autres instanciations d'objets y verront sans doute une explication.
    Pour trouver cette soluce, je me suis inspiré d'un projet où il faut remplir un mémo grace à une procédure qui travaille comme toi avec TStrings, comme ça : RemplirMemo ( Memo.Lines );
    Et comme Memo est sur la Mainform, il est connu de tout le prog.
    Valà, je sais pas trop si ça peut t'aider...
    Mes 2 cts,
    --
    jp
    PS : c'est normal que mon firewall me lève une tentative d'accès à des adresses ip:DNS ("des" parce que pas toujours les mêmes) sur ADsGetObject( 'WinNT://' + NomOrdinateur, IADsContainer, Container ); ?
    PS2 : manquait la déclaration de "Variants" dans adshlp.pas... ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Salut, pour les tentatives de conexion sortante, je ne sais pas trop, mon firewall doit les laisser passer sans me prévenir, on va dire : "sûrement".

    Je pense que le problème vient des fonctions utilisées qui supprime plus d'objet sur la pile qu'il ne faudrait, mais la question est pourquoi ?
    Vu que les objets sur la pile sont libérés, c'est donc normal que la StringList en variable locale est libérée mais qu'elle ne le soit pas si elle est en variable globale.
    Le problème est que c'est source d'autre bug, quelle autre variable peut être libérée sans qu'on ne le sache et surtout pourquoi et comment le réparer ?

    Déclarer ma variable en global ne me plait guerre, de toute façon, pour l'instant, je cherche une autre solution sans passer par tout ça et si vraiment je dois l'utiliser, je ferrai directement un copier/coller du code sans appeler la fonction (bien que ce ne soit pas propre) car ça fonctionne aussi.

    Pour les autres, la question de l'origine du bug reste ouverte.

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Salut !

    Je crois que tu devrais ouvrir un nouveau topic avec un titre plus explicite et plus en rapport avec le problème que tu rencontres : ça attirera peut-être des « pointures » !
    Au fait,
    (...) d'ailleurs, ce code est bizarre car si on ne filtre pas sur user, on retrouve aussi les groupes d'utilisateurs ainsi que les services installés sur la machine.
    tu fais ça comment ?
    J'ai essayé avec Container.Filter := VarArrayOf( [ '' ] ); ou en commentant cette ligne, dans les 2 cas ça merdouille,

    Meilleurs vœux et bon coding,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Salut,

    pour récupérer les services et les groupes en plus des users :
    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
    procedure RemplirUserSessionList( aList : TStrings );
    var
      Container : IADsContainer;
      e : IEnumVARIANT;
      varArr : OleVariant;
      lNumElements : ULong;
      obj : IADs;
      hr : Integer;
      NomOrdinateur : string;
      User : IADsUser;
    begin
      CoInitialize( nil );
     
      Container := nil;
      NomOrdinateur := GetNomOrdinateur;
      ADsGetObject( 'WinNT://' + NomOrdinateur, IADsContainer, Container );
      Container.Filter := VarArrayOf( [ '' ] );
      hr := ADsBuildEnumerator( Container, e );
     
      while Succeeded( Hr ) do
      begin
        hr := ADsEnumerateNext( e, 1, varArr, lNumElements );
     
        if lNumElements = 0 then
          Break;
     
        IDispatch( varArr ).QueryInterface( IADs, obj );
        if obj <> nil then
        begin
    //      ADsGetObject( 'WinNT://' + NomOrdinateur + '/' + obj.Name, IADsUser, User );
     
    //      if not User.AccountDisabled then // Le compte n'est pas disabled
    //        if not User.IsAccountLocked then // Le compte n'est pas locked
    //          if ( User.Get( 'userFlags' ) and ADS_UF_PASSWD_CANT_CHANGE ) = 0 then // Le user peut changer son mot de passe
                aList.Add( obj.Name );
        end;
     
        varArr := varEmpty;
      end;
     
      CoUninitialize;
    end;
    Il faut récupérer tous les obj sans utiliser le code qui correspond au IADsUser.

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Merci de ta précision, hélas ça le fait pas ...
    Un ShowMessage(IntToStr(aList.Count)); au bon endroit me retourne 0.
    Limitation de mon 2K ?
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Merci de ta précision, hélas ça le fait pas ...
    Un ShowMessage(IntToStr(aList.Count)); au bon endroit me retourne 0.
    Limitation de mon 2K ?
    --
    jp
    Je ne saurrais tu dire, je n'ai pas de 2000 sous la main pour tester.
    Peut-être ton parefeu qui bloque ? Vu qu'il peut parfois bloquer ce genre de code.

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par WebPac Voir le message
    Peut-être ton parefeu qui bloque ? Vu qu'il peut parfois bloquer ce genre de code.
    Bah, je crois pas puisque comme il me pose la question, un coup j'interdis un coup j'autorise, mais le résultat est le même...
    Enfin bon, c'est pas grave, juste anecdotique, et on s'éloigne de ton problème : laisse tomber.
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Bon, j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //  Container.Filter := VarArrayOf( [ '' ] );
    Mais ça ne règle pas ton problème,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  18. #18
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Et non acubécé,

  19. #19
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par WebPac Voir le message
    Et non acubécé,
    No comprendo
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  20. #20
    Membre confirmé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Points : 512
    Points
    512
    Par défaut
    Citation Envoyé par Jipété Voir le message
    No comprendo
    --
    jp
    Petit jeu de mots associé à ton nom : J P T A Q B C.
    Jipété acubécé.
    Je sais, y a mieux, mais on fait avec ce qu'on a.

Discussions similaires

  1. [Dojo] Erreur lors de la récupération des données JSON
    Par benoxy dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 21/05/2010, 18h12
  2. Réponses: 7
    Dernier message: 15/11/2006, 10h14
  3. Réponses: 1
    Dernier message: 04/06/2006, 16h08
  4. Erreur lors de l' utilisation des objets ADO
    Par aityahia dans le forum Bases de données
    Réponses: 10
    Dernier message: 24/03/2006, 13h46
  5. Eviter les erreurs lors de l'utilisation des compo Tsocket
    Par Coussati dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/02/2006, 19h14

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