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

Access Discussion :

DBB acces et champ auto incrementant


Sujet :

Access

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut DBB acces et champ auto incrementant
    Bonjour.

    Je débute en programmation VB (je connais un peut le php/sql)

    Je suis en train de réaliser une petite application pour mes cours.
    Nous devons utiliser une base de donnée access.
    Sauf que j'ai pas access pour la créer...

    J'ai donc suivis dans les cours proposés ici ( http://plasserre.developpez.com/v6-7.htm ) pour savoir comment créer une base de donnée au format access.

    Sauf que maintenant je ne parviens pas exactement a créer les tables comme je le voudrai.

    L'exemple donné fonctionne parfaitement.
    Mais quand je veut modifier un champ pour le transformer en auto-incrémentant j'obtiens un message d'erreur.


    Le code donné en exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetCommand.CommandText = "CREATE TABLE PARENT (CLI_ID INTEGER NOT NULL PRIMARY KEY, CLI_NOM CHAR(32) NOT NULL, CLI_PRENOM VARCHAR(32))"
    J'y reconnais une requête au format SQL.
    Je la modifie donc ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetCommand.CommandText = "CREATE TABLE PARENT (CLI_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, CLI_NOM CHAR(32) NOT NULL, CLI_PRENOM VARCHAR(32))"
    Ou encore ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetCommand.CommandText = "CREATE TABLE PARENT (CLI_ID INT NOT NULL PRIMARY KEY UNSIGNED, CLI_NOM CHAR(32) NOT NULL, CLI_PRENOM VARCHAR(32))"
    Mais j'ai alors le message d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Une exception non gérée du type 'System.Data.OleDb.OleDbException' s'est produite dans system.data.dll
    sur la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetCommand.ExecuteNonQuery()
    Qui est la ligne suivant la mise en forme de ma requête.




    Je voudrai donc savoir comment faire un champ auto-incrémentant.


    J'utilise vb.net 2003 v7.1.3088
    Pour le framework 1.1
    (Je ne sais pas ce qu'est tout ça mais dans mes recherches j'ai vu que c'était parfois demandé)



    J'ai aussi deux petites question bonus:
    - Comment remplir des champs avec les donnée que l'on veut en utilisant du code ?
    - Comment faire les liaisons entre les tables avec du code ? Les tables étant liée entres elles dans access je ne sais pas comment faire cela (en sql je n'ai pas connaissances de tel liaisons, ou alors en les faisant lors des requêtes)


    C'est la première fois que je poste ici, j'espère que j'y met la forme qu'il convient et que je ne suis pas trompé de rubrique.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Points : 405
    Points
    405
    Par défaut
    Peut être un ALTER TABLE serait plus efficace

    Pour ajouter des données dans ta table tu vas devoir utiliser les INSERT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "INSERT INTO [Ma Table] ([Mon premier Champs],[Mon Nième Champs) VALUES (Ma Valeur, Mon Autre Valeur)"
    Pour la liaison, à part les JOIN je ne vois rien d'autres
    S'il n'y a pas de Solution, c'est qu'il n'y a pas de Problème.
    ----------------------------------------------------------------------------------------
    Pour se protéger, un bon préservatif pour votre PC : AntiVir et SpyBot - Search & Destroy

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci.

    Je viens de faire le test d'un "ALTER TABLE" pour modifier le champ créer pour le faire auto incrémentant.
    Et j'obtiens la même erreur.

    Dés que je met juste UNSIGNED ou juste AUTO_INCREMENT j'obtien le message d'erreur:
    Une exception non gérée du type 'System.Data.OleDb.OleDbException' s'est produite dans system.data.dll

    J'ai même tenté de changer un peut le structure de ma requête pour faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetCommand.CommandText = "CREATE TABLE PARENT (CLI_ID INT NOT NULL UNSIGNED AUTO_INCREMENT, CLI_NOM CHAR(32) NOT NULL, CLI_PRENOM VARCHAR(32), PRIMARY KEY(CLI_ID))"
    Tout comme j'ai l'exemple dans un petit vade-mecum sur MySQL super bien fait (sans vouloir faire de la pub collection mémento édition eyrolles).

    Mais j'ai encore une fois le même message d'erreur.

    Je ne parviens toujours pas à rendre un champ auto-incrémentant en utilisant du code VB.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    A propos de la création de la table au moyen d'une commande SQL, il te faut connaître précisément la syntaxe à employer et les types de données valides dans le "dialecte" SQL du SGBD cible.

    J'imagine que tu utilise le moteur de bases de données Jet.

    Voici plusieurs liens qui te donnent la syntaxe à respecter pour:

    * la commande CREATE TABLE:
    http://office.microsoft.com/en-gb/ac...322201033.aspx

    Syntaxe CREATE TABLE:

    CREATE [TEMPORARY] TABLE table (field1 type [(size)] [NOT NULL] [WITH COMPRESSION | WITH COMP] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]])

    où index1, index2 sont des clauses CONSTRAINT

    * la clause CONSTRAINT du CREATE TABLE:
    http://office.microsoft.com/en-gb/ac...322141033.aspx

    Syntaxe CONSTRAINT (champ unique):

    CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
    REFERENCES foreigntable [(foreignfield1, foreignfield2)]
    [ON UPDATE CASCADE | SET NULL]
    [ON DELETE CASCADE | SET NULL]}
    Ensuite il te faut connaître les types de données valides pour ton dialecte SQL. Voici une liste minimaliste et abrégée valable pour toutes les versions de Jet :
    Extrait de MSDN:

    Data type [Storage size] Description

    * BINARY [1 byte per character] Any type of data may be stored in a field of this type. No translation of the data (for example, to text) is made. How the data is input in a binary field dictates how it will appear as output.

    * BIT [1 byte] Yes and No values and fields that contain only one of two values.

    * BYTE [1 byte] An integer value between 0 and 255.

    * COUNTER [4 bytes] A number automatically incremented by the Microsoft Jet database engine whenever a new record is added to a table. In the Microsoft Jet database engine, the data type for this value is Long.
    CURRENCY 8 bytes A scaled integer between – 922,337,203,685,477.5808 and 922,337,203,685,477.5807.

    * DATETIME (See DOUBLE) [8 bytes] A date or time value between the years 100 and 9999.

    * GUID [128 bits] A unique identification number used with remote procedure calls.

    * SINGLE [4 bytes] A single-precision floating-point value with a range of – 3.402823E38 to – 1.401298E-45 for negative values, 1.401298E-45 to 3.402823E38 for positive values, and 0.

    * DOUBLE [8 bytes] A double-precision floating-point value with a range of – 1.79769313486232E308 to – 4.94065645841247E-324 for negative values, 4.94065645841247E-324 to 1.79769313486232E308 for positive values, and 0.

    * SHORT [2 bytes] A short integer between – 32,768 and 32,767.

    * LONG [4 bytes] A long integer between – 2,147,483,648 and 2,147,483,647.

    * LONGTEXT [1 byte] per character Zero to a maximum of 1.2 gigabytes.
    LONGBINARY As required Zero to a maximum of 1.2 gigabytes. Used for OLE objects.

    * TEXT [1 byte per character] Zero to 255 characters.
    En fait, à la place des types "natifs" tu peux aussi utiliser des types synonymes de façon à rester "compatible" avec les standards SQL.
    Et aussi, avec les différentes versions de Jet, il est apparu des types supplémentaires et en particulier le type AUTOINCREMENT analogue au type COUNTER mais permettant de spécifier le "germe" (seed) de production du n° automatique (valeur initiale et incrément).
    Pour en savoir beaucoup plus: http://msdn.microsoft.com/en-us/libr...tsql_datatypes

    Pour conclure, je pense que la requête de création de table devrait plutôt ressembler à ceci:
    Code jetSQL : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE PARENT (CLI_ID COUNTER NOT NULL CONSTRAINT Primary PRIMARY KEY, CLI_NOM TEXT(32) NOT NULL, CLI_PRENOM TEXT(32))

    Tiens nous au courant et bonne continuation !
    _

  5. #5
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ObjetCommand.CommandText = "CREATE TABLE PARENT (CLI_ID COUNTER  PRIMARY KEY, CLI_NOM CHAR(32) NOT NULL, CLI_PRENOM VARCHAR(32))"

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci.

    J'examine tout ça.
    Le temps de tester puis de comprendre et je vous dit si ça marche.

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup.

    Ca a été long et laborieux à cause de ma méconnaissance et ma haine profonde de l'anglais
    Mais avec quelques traductions en ligne, un dico en/fr dans une main et un livre sur le vb.net dans l'autre j'ai pu me débrouiller (oui je sais il faut connaitre cette langue pour l'informatique).

    Grâce à vous deux j'ai pu créer mes tables avec les champs que je veut.

    Maintenant je vais passer à la création de relations entre mes tables.

    Merci encore.


    PS: est-ce qu'il faut que je post le code que j'ai réalisé (enfin un extrait) ?

  8. #8
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Points : 405
    Points
    405
    Par défaut
    Citation Envoyé par Lim-Dul le Nécro Voir le message
    Merci beaucoup.
    PS: est-ce qu'il faut que je post le code que j'ai réalisé (enfin un extrait) ?
    Tu n'es pas obligé, mais si tu pense que ça peut aider quelqu'un d'autre ...
    S'il n'y a pas de Solution, c'est qu'il n'y a pas de Problème.
    ----------------------------------------------------------------------------------------
    Pour se protéger, un bon préservatif pour votre PC : AntiVir et SpyBot - Search & Destroy

  9. #9
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est vrai que cela peut servir, et puis ça ne coute rien de poster si ça peut aider un jour.
    OK pas de problème.
    Voici donc comment j'ai créé mes tables.
    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
            '
            'Début de création des tables
            '
     
            'Déclarer la connexion
            Dim ObjetConnection As OleDbConnection
     
            ' Déclaration l'Objet Commande
            Dim ObjetCommand As OleDbCommand
     
            Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & DialogueNouveauFichier.FileName & ";"
            ObjetConnection = New OleDbConnection
     
            'Donner à la propriété ConnectionString les paramètres de connexion
            ObjetConnection.ConnectionString = strConn
     
            'Ouvrir la connexion
            ObjetConnection.Open()
     
            'Instancier un objet Commande
            ObjetCommand = New OleDbCommand
     
            'Lier Commande et Connexion
            ObjetCommand.Connection = ObjetConnection
     
            'Indiquer le type de commande
            ObjetCommand.CommandType = CommandType.Text
     
            'Donner le texte de la commande SQL
            ObjetCommand.CommandText = "CREATE TABLE T_Devise (ID_Devise COUNTER PRIMARY KEY, Devise VARCHAR NOT NULL UNIQUE)"
     
            'Ici on crée une table T_Devise avec 2 champs ; ID_devise est un entier long auto-incrémenté qui sert de clé primaire, Devise est une chaîne de 32 caractères.
            'on exécute la commande
            ObjetCommand.ExecuteNonQuery()
     
            'Donner le texte de la commande SQL
            ObjetCommand.CommandText = "CREATE TABLE T_Valeur_Moy (ID_Valeur_Moy COUNTER PRIMARY KEY, ID_Article INTEGER UNIQUE, Date_Valeur_Moy DATE, Valeur_Moy INTEGER)"
     
            'Ici on crée une table T_Valeur avec 4 champs.
            'on exécute la commande
            ObjetCommand.ExecuteNonQuery()
     
            'Donner le texte de la commande SQL
            ObjetCommand.CommandText = "CREATE TABLE T_Article (ID_Article COUNTER PRIMARY KEY, Article VARCHAR NOT NULL UNIQUE)"
     
            'Ici on crée une table T_Article avec 2 champs.
            'on exécute la commande
            ObjetCommand.ExecuteNonQuery()
     
            'Donner le texte de la commande SQL
            ObjetCommand.CommandText = "CREATE TABLE T_Historique (ID_Historique COUNTER PRIMARY KEY, ID_Article INTEGER, Date_Historique DATE, Action_Histo TEXT(5) NOT NULL, Nombre INTEGER, Prix_total INTEGER)"
     
            'Ici on crée une table T_Historique avec 6 champs.
            'on exécute la commande
            ObjetCommand.ExecuteNonQuery()
     
            'Donner le texte de la commande SQL
            ObjetCommand.CommandText = "CREATE TABLE T_Cours (ID_Cours COUNTER PRIMARY KEY, ID_Article INTEGER, Date_Cours DATE, Cours_Du_moment INTEGER)"
     
            'Ici on crée une table T_Cours avec 4champs.
            'on exécute la commande
            ObjetCommand.ExecuteNonQuery()
     
            'Fermer la connexion
            ObjetConnection.Close()
     
            MsgBox("Tables créées avec succès et connexion fermée")
            '
            'Fin de création des tables
            '
    Je précise aussi que j'ai fais des IMPORTS qui sont tout en haut de mon code de mon formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Imports System.IO
    Imports DAO
    Imports DAO.LanguageConstants
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports Microsoft.VisualBasic
    Mais je ne sais plus si c'est les DAO ou les System.Data qui sont utiles dans le cas présent.
    Le System.IO sert lui pour agir sur les fichiers, il me sert pour créer le fichier de base de donnée.


    Je viens de voir le bouton "résolu" alors je vais cliquer dessus juste apres ce message.


    Encore une fois merci.

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

Discussions similaires

  1. zerofill pour champ auto-increment
    Par seb92 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/07/2004, 15h52
  2. champ auto increment
    Par seb92 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2004, 16h12
  3. Champ auto increment
    Par webbulls dans le forum Bases de données
    Réponses: 9
    Dernier message: 21/04/2004, 16h07
  4. Remise à zero champ auto-incrementé (SQL Server)
    Par James85 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/01/2004, 09h23
  5. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 18h30

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