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

Bases de données Delphi Discussion :

Problème d'insertion dans une table


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Par défaut Problème d'insertion dans une table
    Bonjour,
    je ni comprend rien j ai fait un test avec une table pour inserer un numero unique a chaque enregistrement.

    Donc la table ce met sur le dernier enregistrement, recupere la faleur du champ ID et incremente 1.

    je fais la meme chose su une autre table, sauf que quand je fais un insert , la ligne cree se met au dessus du dernier enregistrement, et donc plantage car la valeur existe deja.

    je sais pas pourquoi?????

    code qui marche

    Le bur etais de recuper la valeur des checkbox cocher
    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
     
     
     
    rocedure TForm1.Button3Click(Sender: TObject);
    var
    i:integer;
    begin
    table2.last;
    i:=table2.Fields[0].AsInteger;
    table1.First;
     
    while not  table1.Eof do
      begin
     
    if TCheckBox(FindComponent(table1.Fields[0].asstring)).checked  then
     
     begin
      i:=i+1  ;
     table2.Insert;
     table2.Fields[0].AsInteger:=i  ;
     table2.Fields[1].AsString:=table1.Fields[0].asstring;
     table2.Post;
     
       end;
        table1.Next;
     
     end;
    code qui marche pas

    Juste inser des donnees d un dbeidt dans la table en inserant un numeros auto valeur +1

    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    pagecontrol1.TabIndex:=0;
    televes.Last;
    end;
     
    Pour l insert je me sert du dbnavigator.
     
     
    procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
     
    televes.Fields[0].AsInteger:=televes.Fields[0].AsInteger +1 ;
    televes.Fields[6].AsString:=metelephonef.Text   ;
    dbnavigator1.BtnClick(nbpost);

    merci

  2. #2
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut,

    Peut-être que ma remarque ne te servira rien, mais la plupart (pour ne pas dire tous) des SGBD intègre des champs auto-incrémentés.

    Sinon par rapport à ton code, si ton DBNavigator ne te sert qu'à ajouter des valeurs, pourquoi ne pas plutôt utiliser insert et post comme dans ton exemple qui fonctionne ?

    A+.

  3. #3
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 47
    Par défaut
    Pour eviter tous soucis au lieu de rechercher le dernier enregistrement, tu recherches la plus grande valeur de ton champ ID dans ta table et tu l'incrementes en parcourant tout la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function NextID():integer;
    var 
        i: integer;
    begin
       i:=0;
       MaTable.First;
       while not MaTable.Eof do begin
         if i<MaTable.Fields[0].AsInteger then i:= MaTable.Fields[0].AsInteger ;
         MaTable.Next;
       end; 
       NextID:= i+1;
    end;

  4. #4
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Par défaut
    Merci je vais teste ,
    le dbnavigator , c'est juste que c 'est plus simple a gere pour mes testes.

    mais j'ai fais un essaie avec un bouton
    televes.insert , c 'est pareil la ligne est inserer au dessus.

    pour le champ auto increment j 'ai essaye mais pas reussi
    j utilise mysql serveur 5.0 avec mysql administrator, mais lorsque je precise le champ autoincrement lors de mon insert j'ai un plantage

    le champ est vide donc ca veut dire qu il a pas eu autoincrementation.

    je pense que ca vient de moi , car je ne sais pas comment me servir correctement de ce type de champs.

    merci
    a+

  5. #5
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Par défaut
    Bon j'ai trouve , ca vient de la position du last, en fait il faut le mettre avant l insertion,recuper la valeur et faire l insert.

    merci

  6. #6
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Je persiste quand même à penser qu'un champs auto incrémenté se serait plus adapté à ta situation, puisqu'il sont avant tous fait pour le problème que tu rencontre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j utilise mysql serveur 5.0 avec mysql administrator, mais lorsque je precise le champ autoincrement lors de mon insert j'ai un plantage
    Peut-tu nous donner le code qui plante ?

    A voir, aussi pour aider:
    http://mysql.developpez.com/faq/?pag...AUTO_INCREMENT

    A+.

  7. #7
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Par défaut
    En fait j'ai pas de code, quand je veux enregistre une donne je fait un insert, je pensais que lorsque que le champ etait autoincremente, ca se faisiat tout seul pas par code.

    ex
    id-auto
    nom varchar

    table1.insert;
    table1.fields[1].asstring='tot';

    resultat
    id = 1
    nom = toto

    voila
    merci

  8. #8
    Membre éprouvé
    Avatar de neuneu1
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2007
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 874
    Par défaut
    Bonjour,
    Si vous avez un petit bout de code pour une tble auto increment je veux bien le regarder pour comprendre

    merci

  9. #9
    Membre averti
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    Les champs auto-incrémentés s'incrémentent seuls ! on n'a jamais besoin et il ne faut pas les renseigner.

    Par contre, dans le cas d'une application client/serveur, mes notions rudimentaires me laissent penser que : Du côté client, avant de référencer le champs (le lire), il faut s'assurer que la valeur de ce champs auto-incrémenté (qui est fournie par le serveur) a bien été récupérée par le client.

    Quelqu'un pourrait confirmer ?

  10. #10
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    a mon avis une requête me semble plus approprié qu'une boucle pour récupérer l'élément le plus grand.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MyQuery.Close;
    MyQuery.Sql.Clear;
    MyQuery.Sql.Add('SELECT TOP 1  Num FROM MaTable ORDER BY Num DESC');
    MyQuery.Open;
     
    if  MyQuery.RecordCout = 0 Then
      MaTable.FieldByName('Num').Value := 1
    else
    MaTable.FieldByName('Num').Value := MyQuery.FieldByName('Num').Value+1;

Discussions similaires

  1. [Conception] Problème avec INSERT dans une TABLE
    Par dunbar dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 20/07/2006, 12h56
  2. Problème d'insertion dans une table Access
    Par tribaleur dans le forum ASP
    Réponses: 21
    Dernier message: 27/06/2006, 08h20
  3. Problème d'insertion dans une table filtrée.
    Par charlie289 dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 16h45
  4. [MySQL] Problème d'insertion dans une table
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/03/2006, 17h43
  5. Problème d'insertion dans une table MYSQL
    Par greg69 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/10/2005, 11h34

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