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

Windows Forms Discussion :

Ranger ses objets dans LDAP avec les OU (OrganizationalUnit)


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Ranger ses objets dans LDAP avec les OU (OrganizationalUnit)
    Bonjour à tous,

    je souhaite otenir la liste de toutes les OU du domaine Active Directory que j'explore.

    Pour cela, jusqu'à présent, j'ai utilisé ce code :

    Ma question est la suivante : Comment faire pour récupérer toutes les OU (OrganizationalUnit) et seulement ces champs là.
    Je souhaite en effet proposer à l'utilisateur de choisir dans quelle OU placer son utilisateur nouvellement créé. Je dois donc récupérer la liste des OU existantes, et je l'afficherai dans une dropDownList.

    Voici le code que j'ai utilisé jusqu'à présent.
    Avez vous une solution avec des filtres, j'avoue être un peu paumé pour récupérer les OU d'un domaine...

    Merci

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.DirectoryServices;
    using System.Configuration;
     
    namespace ActiveDirectory
    {
        public class ADActions
        {
            public static bool ExistEntry(UserDetails ud)
            {
                try
                {
                    //create an instance of the DirectoryEntry
                    DirectoryEntry deEntry = new DirectoryEntry("LDAP://DC=rnd,DC=as", "Administrator", "Azerty123");
                    //GetDirectoryObject();
                    //create instance fo the direcory searcher
                    DirectorySearcher deSearch = new DirectorySearcher();
                    deSearch.SearchRoot = deEntry;
                    //set the search filter
                    deSearch.Filter = "(&(objectClass=user)(cn=" +
                        ud.GIVEN_NAME + " " +
                        ud.INITIALS + ". " +
                        ud.SN + "))";
                    deSearch.SearchScope = SearchScope.Subtree;
     
                    //find the first instance
                    SearchResult results = deSearch.FindOne();
                    if (results != null)
                    {
                        return true;
                    }
                    return false;
                }
                catch (Exception e)
                {
                    throw new Exception("Error in existence:\r\n", e);
                }
            }//ExistEntry
            public static void AddUserToActiveDirectory(UserDetails ud)
            {
                if (!ExistEntry(ud))
                {
                    DirectoryEntry deEntry = new DirectoryEntry("LDAP://OU=" + ud.OU + ",DC=rnd,DC=as", "Administrator", "Azerty123");
                    DirectoryEntry newUser = deEntry.Children.Add("CN=" +
                        ud.GIVEN_NAME + " " +
                        ud.INITIALS + ". " +
                        ud.SN, "user");
                    try
                    {
                        newUser.Properties["sAMAccountName"].Add(ud.SAM_ACCOUNT_NAME);
                        newUser.Properties["sn"].Add(ud.SN);
                        newUser.Properties["givenName"].Add(ud.GIVEN_NAME);
                        // CommitChanges() permet de valider les données auprès du serveur.
                        newUser.CommitChanges();
                    }
                    catch (DirectoryServicesCOMException dcex)
                    {
                        throw new DirectoryServicesCOMException("Error while adding a new user", dcex);
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("Error while adding a new user", ex);
                    }
                    try
                    {
                        //La deuxième phase consiste à affecter à l’utilisateur un Mot de Passe et activer son compte.
                        newUser.Invoke("SetPassword", new object[] { ud.PASSWORD });
                        newUser.Properties["userAccountControl"].Value = 0x0200;
                        newUser.CommitChanges();
                        newUser.Close();
                    }
                    catch (DirectoryServicesCOMException dcex)
                    {
                        throw new DirectoryServicesCOMException("Error while adding a new user's password and activation", dcex);
                    }//catch
                    catch (Exception ex)
                    {
                        throw new Exception("Error while adding a new user's password and activation", ex);
                    }//catch
                }//if
            }//AddUserToActiveDirectory
        }//class ADActions
    }//namespace

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Comment ajouter un utilisateur à l'intérieur d'un containeur comme une OU
    Voici ce qu'il faut faire pour ajouter un utilisateur dans une Organizational Unit:

    Dans mon Designer avec un formulaire AddUser
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.DirectoryServices;
    using AD;
     
    namespace ActiveDirectory
    {
        public partial class AddUser : Form
        {
            //DirectoryEntry deEntry = new DirectoryEntry("LDAP://OU=ELEVES,OU=IS3,OU=PARIS,DC=supinfo,DC=com", "Login", "Password");
     
            public AddUser()
            {
                InitializeComponent();
                this.tbGivenName.Text = "Juju";
                this.tbInitials.Text = "JG";
                this.tbSurname.Text = "Gari";
                this.tbSameAccountName.Text = "toto_as3";
                this.tbPassword.Text = "Azerty123";
                this.tbMail.Text = "totoas3@channel.fr";
                LoadOrganizationalnits();
                LoadGroups();
            }
     
            private void btnClose_Click(object sender, EventArgs e)
            {
                Dispose();
            }
            private void btnAddEntry_Click(object sender, EventArgs e)
            {
                this.btnAddEntry.Text = "Processing";
                this.btnAddEntry.Enabled = false;
     
                UserDetails ud = new UserDetails(this.tbGivenName.Text, this.tbSurname.Text,
                    this.tbInitials.Text, this.tbCommonName.Text, this.tbMail.Text,
                    this.tbSameAccountName.Text, this.tbPassword.Text, this.cbOu.SelectedItem.ToString());
                //TODO : ajouter l'entrée dans le Ldap courant
                try
                {
                    using (DirectoryEntry userEntry = GetPath(cbOu.SelectedItem.ToString()))
                    {
                        object conn = userEntry.NativeObject;
                        ADActions adActions = new ADActions();
                        adActions.AddUserToActiveDirectory(ud, this.cbGroups.SelectedItem.ToString(), userEntry);
                        this.lblMessage.Text = "The creation of user " + ud.GIVEN_NAME + " " + ud.SN + " has been done successfully.";
                        this.lblMessage.ForeColor = Color.Blue;
                    }
                }
                catch (Exception exc)
                {
                    this.lblMessage.Text = exc.Message +
                        ":\r\n" +
                        exc.InnerException.Message + "\r\n";
                    this.lblMessage.ForeColor = Color.Red;
                }
                this.btnAddEntry.Text = "Add Entry";
                this.btnAddEntry.Enabled = true;
            }
            private void LoadOrganizationalnits()
            {
                DirectoryEntry orgEntries = new DirectoryEntry("LDAP://" + Common.domainName, Common.adminUsername, Common.adminPassword);
                try
                {
                    DirectorySearcher searcher = new DirectorySearcher(orgEntries);
                    // On filtre sur tous les objets de la catégorie OU
                    searcher.Filter = "(objectCategory=" + AD.Common.filterOrganizationalUnit + ")";
                    foreach (SearchResult result in searcher.FindAll())
                    {
                        // On récupère l'entrée trouvée lors de la recherche
                        DirectoryEntry DirEntry = result.GetDirectoryEntry();
                        // On récupère les infos
                        string name = (DirEntry.Properties["name"].Value != null) ? DirEntry.Properties["name"].Value.ToString() : String.Empty;
                        // On peut maintenant afficher les informations désirées
                        cbOu.Items.Add(name);
                    }
                    orgEntries.Close();
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message);
                    orgEntries.Close();
                }
            }
            private string GetDistinguishedName(string categoryFilter, string searchedObjectName)
            {
                using (DirectoryEntry dnEntries = new DirectoryEntry("LDAP://" + Common.domainName, Common.adminUsername, Common.adminPassword))
                {
                    try
                    {
                        DirectorySearcher searcher = new DirectorySearcher(dnEntries);
                        // On filtre sur tous les objets de la catégorie OU
                        searcher.Filter = "(objectCategory=" + categoryFilter + ")";
                        foreach (SearchResult result in searcher.FindAll())
                        {
                            // On récupère l'entrée trouvée lors de la recherche
                            DirectoryEntry DirEntry = result.GetDirectoryEntry();
                            // On récupère les infos
                            string name = (DirEntry.Properties["name"].Value != null) ? DirEntry.Properties["name"].Value.ToString() : String.Empty;
                            if (name == searchedObjectName)
                            {
                                string dn = (DirEntry.Properties["distinguishedName"].Value != null) ? DirEntry.Properties["distinguishedName"].Value.ToString() : String.Empty;
                                dnEntries.Close();
                                return dn;
                            }//if
                        }//foreach
                        return null;
                    }//try
                    catch (Exception Ex)
                    {
                        MessageBox.Show(Ex.Message);
                        dnEntries.Close();
                        return null;
                    }//catch
                }//using
            }
            private void LoadGroups()
            {
                DirectoryEntry groupEntries = new DirectoryEntry("LDAP://" + Common.domainName, Common.adminUsername, Common.adminPassword);
                try
                {
                    DirectorySearcher searcher = new DirectorySearcher(groupEntries);
                    // On filtre sur tous les objets de la catégorie Groups
                    searcher.Filter = "(objectCategory=" + AD.Common.filterGroup + ")";
                    foreach (SearchResult result in searcher.FindAll())
                    {
                        // On récupère l'entrée trouvée lors de la recherche
                        DirectoryEntry DirEntry = result.GetDirectoryEntry();
                        // On récupère les infos
                        string name = (DirEntry.Properties["name"].Value != null) ? DirEntry.Properties["name"].Value.ToString() : String.Empty;
                        // On peut maintenant afficher les informations désirées
                        cbGroups.Items.Add(name);
                    }
                    groupEntries.Close();
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message);
                    groupEntries.Close();
                }
            }
            private void CopyText(object sender, EventArgs e)
            {
                if (this.tbInitials.Text.Length < 1)
                {
                    this.tbCommonName.Text = this.tbGivenName.Text + " " + this.tbSurname.Text;
                }
                else
                {
                    this.tbCommonName.Text = this.tbGivenName.Text + " " + this.tbInitials.Text + ". " + this.tbSurname.Text;
                }
     
            }
            private DirectoryEntry GetPath(string organizationalUnit)
            {
                try
                {
                    string path = null;
                    if (organizationalUnit == null)
                    {
                        return new DirectoryEntry("LDAP://" + Common.domainName, Common.adminUsername, Common.adminPassword);
                    }//if
                    else if (organizationalUnit.Length > 0)
                    {
                        List<string> listOu = AD.ADActions.GetListOfOrganizationalUnits(GetDistinguishedName(Common.filterOrganizationalUnit, organizationalUnit));
                        if (listOu.Count > 0)
                        {
                            for (int i = 0; i < listOu.Count; i++)
                            {
                                path += "OU=" + listOu[i] + ",";
                            }//for
                        }//if
                        else if (listOu == null)
                        {
                            path = null;
                        }//else
                        return new DirectoryEntry("LDAP://" + path + Common.domainNameAsDN, Common.adminUsername, Common.adminPassword);
                    }//else
                    else return new DirectoryEntry("LDAP://" + path + Common.domainNameAsDN, Common.adminUsername, Common.adminPassword);
                }//try
                catch (Exception e)
                {
                    throw new Exception("LDAP query impossible :\r\n", e);
                }
            }
        }
    }
    Dans ma librairie ADActions.cs
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.DirectoryServices;
    using System.Configuration;
     
    namespace AD
    {
        public class ADActions
        {
            public bool ExistUser(UserDetails ud, DirectoryEntry Ldap)
            {
                DirectorySearcher searcher = new DirectorySearcher(Ldap);
                // On filtre sur la catégorie User
                // (objectCategory=user)(cn=Juju JG. Gari))
                searcher.Filter = "(objectCategory=" + AD.Common.filterUser + ")";
                //searcher.SearchScope = SearchScope.Subtree;
                try
                {
                    /*
                    SearchResult result = searcher.FindOne();
                    if (result != null)
                    {
                        return true;
                    }
                    */
                    foreach (SearchResult result in searcher.FindAll())
                    {
                        // On récupère l'entrée trouvée lors de la recherche
                        DirectoryEntry DirEntry = result.GetDirectoryEntry();
                        // On récupère les infos
                        string dn = (DirEntry.Properties["sAMAccountName"].Value != null) ? DirEntry.Properties["sAMAccountName"].Value.ToString() : String.Empty;
                        if (dn == ud.SAM_ACCOUNT_NAME)
                        {
                            return true;
                        }
                    }//foreach
                }//try
                catch (Exception e)
                {
                    throw new Exception("Error in existence:\r\n", e);
                }
                return false;
            }//ExistEntry
            public void AddUserToActiveDirectory(UserDetails ud, string groupName, DirectoryEntry Ldap)
            {
                object conn = Ldap.NativeObject;
                if (!ExistUser(ud, Ldap))
                {
                    AddUserIntoAD(ud, Ldap);
                }
            }//AddUserToActiveDirectory
            public void AddUserIntoAD(UserDetails ud, DirectoryEntry Ldap)
            {
                try
                {
                    // Création du user Test User et initialisation de ses propriétés
                    //new DirectoryEntry("LDAP://rnd.as/OU=AS3,OU=AtronicMonaco")
                    DirectoryEntry user = Ldap.Children.Add("cn=" + ud.GIVEN_NAME + " " + ud.INITIALS + ". " + ud.SN, "user");
                    //Ldap.Path = "LDAP://rnd.as/OU=AS3,OU=AtronicMonaco";
                    user.Properties["SAMAccountName"].Add(ud.SAM_ACCOUNT_NAME);
                    user.Properties["sn"].Add(ud.SN);
                    user.Properties["givenName"].Add(ud.GIVEN_NAME);
                    user.Properties["initials"].Add(ud.INITIALS);
                    user.Properties["mail"].Add(ud.MAIL);
                    //user.Properties["ou"].Add(ud.OU);
                    // On envoie les modifications au serveur
                    user.CommitChanges();
     
                    // On va maintenant lui définir son password. L'utilisateur doit avoir été créé
                    // et sauvé avant de pouvoir faire cette étape
                    user.Invoke("SetPassword", new object[] { Common.adminPassword });
                    // On va maintenant activer le compte : ADS_UF_NORMAL_ACCOUNT
                    user.Properties["userAccountControl"].Value = 0x0200;
                    // On envoie les modifications au serveur
                    user.CommitChanges();
                }
                catch (DirectoryServicesCOMException dsce)
                {
                    throw new DirectoryServicesCOMException("Error while adding the user " + ud.SAM_ACCOUNT_NAME, dsce);
                }
                catch (Exception e)
                {
                    throw new Exception("Error while adding the user " + ud.SAM_ACCOUNT_NAME, e);
                }
            }
            public SearchResultCollection SearchOneLevel(/*string path*/)
            {
                DirectoryEntry entry = new DirectoryEntry(AD.Common.path);
                DirectorySearcher mySearcher = new DirectorySearcher(entry);
                mySearcher.Filter = "(objectCatergory=" + AD.Common.filterOrganizationalUnit + ")";
                mySearcher.SearchScope = SearchScope.OneLevel; //enum to restrict search
                return mySearcher.FindAll();
            }// SearchOneLevel()
            public static string GetLastOrganizationalUnit(string organizationaUnitDistinguishedName)
            {
                //Should be like : "OU=AS3,OU=AtronicMonaco,DC=rnd,DC=as"
                string[] arrayOfDistinguishedName = organizationaUnitDistinguishedName.Split(new char[] { ',' });
                for (int i = 0; i < arrayOfDistinguishedName.Length; i++)
                {
                    if (arrayOfDistinguishedName[i].Contains("OU="))
                    {
                        string[] valueOfOrganizationalUnit = arrayOfDistinguishedName[i].Split(new char[] { ',' });
                        return valueOfOrganizationalUnit[1].ToString();
                    }
                }
                return null;
            }//GetLastOrganizationalUnit
            public static List<string> GetListOfOrganizationalUnits(string organizationaUnitDistinguishedName)
            {
                try
                {
                    if (organizationaUnitDistinguishedName != null)
                    {
                        List<string> childrenToParent = new List<string>();
                        //Should be like : "OU=AS3,OU=AtronicMonaco,DC=rnd,DC=as"
                        string[] arrayOfDistinguishedName = organizationaUnitDistinguishedName.Split(new char[] { ',' });
                        for (int i = 0; i < arrayOfDistinguishedName.Length; i++)
                        {
                            if (arrayOfDistinguishedName[i].Contains("OU="))
                            {
                                string[] valueOfOrganizationalUnit = arrayOfDistinguishedName[i].Split(new char[] { '=' });
                                childrenToParent.Add(valueOfOrganizationalUnit[1].ToString());
                            }//if
                        }//for
                        //Parents entries are the first, then comes the Children entries
                        return childrenToParent;
                    }//if
                    else if (organizationaUnitDistinguishedName == null)
                    {
                        return null;
                    }//else
                    else return null;
                }
                catch (Exception e)
                {
                    throw new Exception("Get List Of OUs :\r\n", e);
                }
            }
        }//class ADActions
    }//namespace
    Dans ma librairie Common.cs
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace AD
    {
        public class Common
        {
            public const string domainName = "rnd.as";
            public const string domainNameAsDN = "DC=rnd,DC=as";
            public const string path = "LDAP://" + domainName;
            //Active Directory constants
            public const string adminUsername = "Administrator";
            public const string adminPassword = "Azerty123";
            //filters
            public const string filterComputer = "Computer";
            public const string filterOrganizationalUnit = "organizationalUnit";
            public const string filterGroup = "group";
            public const string filterUser = "user";
        }
    }
    Dans ma librairie UserDetails.cs
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace AD
    {
        public class UserDetails
        {
            private string _givenName = null;
            private string _sn = null;
            private string _initials = null;
            private string _cn = null;
            private string _mail = null;
            private string _samAccountName = null;
            private string _password=null;
            private string _ou = null;
     
            public UserDetails(string givenName, string sn, string initials, string cn,
                string mail, string samAccountName,string password, string ou)
            {
                this._givenName = givenName;
                this._sn = sn;
                this._initials = initials;
                this._cn = cn;
                this._mail = mail;
                this._samAccountName = samAccountName;
                this._password=password;
                this._ou = ou;
            }
     
            public string GIVEN_NAME
            {
                get { return this._givenName; }
                set { this._givenName = value; }
            }
            public string SN
            {
                get { return this._sn; }
                set { this._sn = value; }
            }
            public string INITIALS
            {
                get { return this._initials; }
                set { this._initials = value; }
            }
            public string CN
            {
                get { return this._cn; }
                set { this._cn = value; }
            }
            public string MAIL
            {
                get { return this._mail; }
                set { this._mail = value; }
            }
            public string SAM_ACCOUNT_NAME
            {
                get { return this._samAccountName; }
                set { this._samAccountName = value; }
            }
            public string PASSWORD
            {
                get { return this._password; }
                set { this._password = value; }
            }
            public string OU
            {
                get { return this._ou; }
                set { this._ou = value; }
            }
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/09/2008, 12h45
  2. Réponses: 8
    Dernier message: 12/07/2008, 12h29
  3. Conserver ses objets dans les pages
    Par Arthis dans le forum ASP.NET
    Réponses: 3
    Dernier message: 06/08/2007, 11h49
  4. valeurs dans URL avec les pseudo frames
    Par paradeofphp dans le forum Langage
    Réponses: 3
    Dernier message: 05/09/2006, 12h38
  5. Copier contenu TB_A dans TB_B avec les même champs
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 16h22

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