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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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) ?

+ 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