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

C++Builder Discussion :

Insertion,update dans une BD à table avec beaucoup de champs


Sujet :

C++Builder

  1. #21
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Essaye:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ADOQuery1->SQL->Add("insert into");
    ADOQuery1->SQL->Add("toto   (champ1,...,champ10,");
    ADOQuery1->SQL->Add("          champ11,...,champ20,");
    ...
    ADOQuery1->SQL->Add("          champ91,...,champ100");
    ADOQuery1->SQL->Add("         )";
    ADOQuery1->SQL->Add("values(valeur1,...,valeur10,");
    ADOQuery1->SQL->Add("          valeur11,...,valeur20,");
    ...
    ADOQuery1->SQL->Add("          valeur91,...,valeur100");
    ADOQuery1->SQL->Add("         );";
    ADOQuery1->ExecSQL();
    Attention, une virgule entre chaque champ et entre chaque valeur sauf après le dernier puisqu'on referme la parenthèse.

  2. #22
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Citation Envoyé par rakoto15
    Un autre prob existe aussi lorsque j'utilise des chemins (chaînes longues), le champ est trop petit pour accepter la quantité de données ...
    Je suppose que tu stockes ce chemin dans un champs de type Texte. Je te conseille de regarder alors la taille du champs dans Access (de 1 à 255) pour voir si tu as la place de tout rentrer.
    + + +

  3. #23
    Membre averti Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Points : 315
    Points
    315
    Par défaut
    L'erreur intervient au moment ou tu execute la requete ou lorsque tu fais les "add" sur ta requete, car si lorsque tu executes ta requete c'est dans access que ton probleme se pose, si ta requete est correct.
    De plus ADO accepte autant de champ que tu le désire, il depend du provider utilisé.
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

  4. #24
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Citation Envoyé par Patrick Seuret
    Je vois dans tes requêtes SQL que tu ne mets pas le ";" final.
    +1... c en effet un script complet, donc il faut séparer les différentes instructions.

    Citation Envoyé par bakaneko
    Je suppose que tu stockes ce chemin dans un champs de type Texte. Je te conseille de regarder alors la taille du champs dans Access (de 1 à 255) pour voir si tu as la place de tout rentrer.
    idem.

    ça avance?
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  5. #25
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 531
    Points : 537
    Points
    537
    Par défaut
    Bonjour Rakoto15.

    Peut être pourrais tu mettre en ligne ta base de données (enfin la partie concernée) afin que ceux qui souhaitent aider puisse le faire plus simplement.

  6. #26
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Ok Patrick, ton aide m'est vraiment utile, et ça marche. Les aides des autres forumeurs m'ont aussi beaucoup aidé.(fbartolo, bakaneko,boubou81,say,...)

    J'ai utilisé aussi une autre technique mais c'est le truc de Patrick qui est le meilleur car plus optimisé mais je vais qd même le poster
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ADOQuery1->SQL->Add("insert into toto(champ1,...,champ20) values(value1,...,value20)");
    ADOQuery1->ExecSQL();
    ADOQuery1->SQL->Add("update toto set champ21=...,champ22=...,...,champ30=... where champ1=value1");
    ADOQuery1->ExecSQL();
    ADOQuery1->SQL->Add("update toto set champ31=...,champ32=...,...,champ40=... where champ1=value1");
    ADOQuery1->ExecSQL();
    .............................
    En effet, la taille du texte pour les chemins que j'ai utilisée est de 50 seult, je vais l'augmenter et voir ce que ça donne.

    Ca avance les amis!!!

    Après ce prob, j'aimerais bien écrire un tutoriel sur l'insertion,update bd,etc. ou même poster mon code sur developpez. Mais je sais pas comment faire cela, les tuto et sources se situent souvent sur des sites perso comme ricky81.developpez.com (je le questionne ici pour ne pas en créer une nouvelle discussion)
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  7. #27
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Salut les amis!

    Ca avance mais j'ai utilisé 2 tables de 100 champs différents.
    Ca marche sur la 1ère table mais pas sur la 2ème qui fait tjrs "erreur iNSERT INTO" et "erreur UPDATe". Et là je ne comprends car mon instruction sql semble parfaitment correct comme celle de la table 1.

    Quelle est la longueur max d'un nom de table?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  8. #28
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Peux-tu poster les commandes que tu utilises pour ta seconde table?

  9. #29
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 218
    Points : 1 437
    Points
    1 437
    Par défaut
    Slt Patrick! Merci de vouloir me répondre même si j'ai mis en délestage cette discussion:

    Je vais insérer que 20 champs pour raccourcir mais je t'assure que j'insère bien les textes et les numériques à la bonne place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ADOQuery2->SQL->Clear();
    ADOQuery2->SQL->Add("insert into ventefieldrecords(reference,adressebien,mandant,adresseexacte,tel,mail,intermediaire,prime,contact,cond_prop,prix,avance,divers,total,commission,totalag,numtitre,plle,section,superficie)");
    ADOQuery2->SQL->Add(" values('VT456W','Cologne','0','0','0','0','0',0,'0','0',0,0,0,0,0,0,'0','0','0',0)");
    ADOQuery2->ExecSQL();
    J'ai posé la question sur la longueur du nom de champ car j'en avais marre!!
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  10. #30
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Ca m'a l'air juste à l'exception du ";" qui manque à la fin, mais normalement ce n'est pas critique.

    Sinon, le plus simple pour tester une requête SQL dans Access, c'est d'ouvrir ta table dans Access, faire une nouvelle requête vide, dans le menu "Affichage", choisir le mode "Vue SQL" (les noms peuvent changer, je travaille avec une version anglaise) et coller ta requête SQL dans l'éditeur. Pour la tester, tu retourne dans le menu "Affichage" et sélectionne "Feuille de données" ("Datasheet view" en anglais).

    S'il y a une erreur, Access donne un message bien plus précis (nom de la table, nom de champ, etc.). Dis-moi ce qu'Access te retourne.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/03/2009, 10h22
  2. Réponses: 2
    Dernier message: 10/03/2009, 12h45
  3. Réponses: 17
    Dernier message: 21/04/2008, 01h21
  4. insertion dans une table puis update dans une autre table
    Par uptoditime dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/10/2007, 18h08
  5. Réponses: 4
    Dernier message: 01/06/2007, 13h54

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