Création de table Access

Résolu
andreti62 Messages postés 5 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 23 juillet 2009 - 21 juil. 2009 à 22:29
andreti62 Messages postés 5 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 23 juillet 2009 - 23 juil. 2009 à 21:24
Bonjour à tous, je viens humblement demander votre aide pour enfin créer une table correctement. Pour info j'utilise Visual Studio 2008.
Avant tout voici mon code:
Imports System.Windows.Forms
Imports ADOX
Imports ADODB
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.Sql
Imports System.Data.SqlClient

Public Class Dialog1

    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
        createtable()
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
        Me.Close()
    End Sub

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        Me.Close()
    End Sub

    Private Sub Dialog1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Focus()
    End Sub

    Public Sub createtable()

        Dim cat As New ADOX.CatalogClass
        Dim tbl As New ADOX.Table
        Dim nomtable As String
        nomtable = TextBox1.Text
        cat.ActiveConnection = "Provider=Microsoft.JET.OLEDB.12.0;Data Source=C:\second_oeuvre\bd1.mdb;"
        With tbl.Name = nomtable
            'Ajout des differentes colonnes de la table
            'adVarWChar correspond au champs    texte sous access, 50 est la longueur, si on ne met rien, elle est de 255
            tbl.Columns.Append("id", ADOX.DataTypeEnum.adInteger)
            tbl.Columns.Append("designation", ADOX.DataTypeEnum.adVarWChar, 50)
            tbl.Columns.Append("unites", ADOX.DataTypeEnum.adVarWChar, 50)
            tbl.Columns.Append("PU", ADOX.DataTypeEnum.adVarWChar, 50)
            tbl.Columns.Append("STT", ADOX.DataTypeEnum.adVarWChar, 50)
            tbl.Columns.Append("ref_chantier", ADOX.DataTypeEnum.adVarWChar, 50)
            tbl.Columns.Append("date", ADOX.DataTypeEnum.adVarWChar, 50)
            tbl.Columns.Append("stade", ADOX.DataTypeEnum.adVarWChar, 50)
            tbl.Columns.Append("metreur", ADOX.DataTypeEnum.adVarWChar, 50)
            'Definition de id en cle primaire
            tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id")
            'Ligne indispensable pour acceder à  la prpriété autoincrement
            tbl.Columns.Item("id").ParentCatalog = cat
            'Mise en place de l'autoincrement sur id
            tbl.Columns.Item("id").Properties("AutoIncrement").Value = True
        End With
        'Création de la table
        cat.Tables.Append(tbl)
        'fermeture des objet
        tbl = Nothing
        cat = Nothing
    End Sub

L'erreur, j'imagine que vous vous en doutez se produit à la ligne cat.activeconnection=...

Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit les uns avec les autres.

Ca fait déjà un moment que je bloque sur ce problème. J'espère que quelqu'un pourra me venir en aide.
Merci d'avance!

5 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 juil. 2009 à 00:39
Salut,

Je ne connais pas trop l'API ADOX,
mais il semble que ta connexion ne soit pas ouverte.

Des infos supplementaires sont dispo ici

Ensuite n'hesites pas à mettre le code fonctionnel, si quelqu'un à besoin de la même réponse.

Bon dev
3
andreti62 Messages postés 5 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 23 juillet 2009
22 juil. 2009 à 22:32
Merci pour la réponse rapide le lien m'a bien aidé. Alors pour ceux qui veulent créer des tables access:
    Public Sub createtable()
        Dim connexion As New ADODB.Connection
        Dim cat As New ADOX.Catalog
        Dim tbl As New ADOX.Table
        Dim nomtable As String
        nomtable = TextBox1.Text
        connexion.Open("Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\second_oeuvre\bd1.mdb;")
        cat.ActiveConnection = connexion
        tbl.Name = nomtable
        'Ajout des differentes colonnes de la table
        'adVarWChar correspond au champs    texte sous access, 50 est la longueur, si on ne met rien, elle est de 255
        tbl.Columns.Append("id", ADOX.DataTypeEnum.adInteger)
        tbl.Columns.Append("designation", ADOX.DataTypeEnum.adVarWChar, 50)
        tbl.Columns.Append("unites", ADOX.DataTypeEnum.adVarWChar, 50)
        tbl.Columns.Append("PU", ADOX.DataTypeEnum.adVarWChar, 50)
        tbl.Columns.Append("STT", ADOX.DataTypeEnum.adVarWChar, 50)
        tbl.Columns.Append("ref_chantier", ADOX.DataTypeEnum.adVarWChar, 50)
        tbl.Columns.Append("date", ADOX.DataTypeEnum.adVarWChar, 50)
        tbl.Columns.Append("stade", ADOX.DataTypeEnum.adVarWChar, 50)
        tbl.Columns.Append("metreur", ADOX.DataTypeEnum.adVarWChar, 50)
        'Definition de id en cle primaire
        tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id")
        'Ligne indispensable pour acceder à  la prpriété autoincrement
        tbl.Columns.Item("id").ParentCatalog = cat
        'Mise en place de l'autoincrement sur id
        tbl.Columns.Item("id").Properties("AutoIncrement").Value = True

        'Création de la table
        cat.Tables.Append(tbl)
        'fermeture des objet
        tbl = Nothing
        cat = Nothing
        connexion.Close()
        connexion = Nothing
    End Sub

C'est probablement perfectible mais au moins ça marche.
3
andreti62 Messages postés 5 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 23 juillet 2009
23 juil. 2009 à 20:30
Pendant qu'on y est, j'ai un soucis pour supprimer cette table dernièrement créée. C'est quand même dommage de vouloir supprimer une table alors qu'on vient de se donner autant de mal pour la créer. Enfin bref, le code:

    Public Sub deltable()
        Dim connexion As New ADODB.Connection
        Dim cat As New ADOX.Catalog
        Dim tbl As New ADOX.Table
        Dim nomtable As String
        nomtable = ComboBox1.Text
        tbl.Name = nomtable
        connexion.Open("Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\second_oeuvre\bd1.mdb;")
        cat.ActiveConnection = connexion
        'suppression de la table
        cat.Tables.Delete(tbl)
        'fermeture des objet
        tbl = Nothing
        cat = Nothing
        connexion.Close()
        connexion = Nothing
    End Sub


Encore une fois je compte sur vous. Merci d'avance
0
andreti62 Messages postés 5 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 23 juillet 2009
23 juil. 2009 à 20:36
Et si j'indiquai l'erreur, ça pourrait être utile:
Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
andreti62 Messages postés 5 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 23 juillet 2009
23 juil. 2009 à 21:24
Sur cette ligne au fait:
cat.Tables.Delete(tbl)
0
Rejoignez-nous