Création de table Access

[Résolu]
Signaler
Messages postés
5
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
23 juillet 2009
-
Messages postés
5
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
23 juillet 2009
-
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

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
34
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
Messages postés
5
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
23 juillet 2009

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.
Messages postés
5
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
23 juillet 2009

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
Messages postés
5
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
23 juillet 2009

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é.
Messages postés
5
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
23 juillet 2009

Sur cette ligne au fait:
cat.Tables.Delete(tbl)