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 :

Déplacer un enregistrement vers une autre ligne de la même table


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Déplacer un enregistrement vers une autre ligne de la même table
    Bonjour à tous,
    je souhaite déplacer un enregistrement d'une même AdoTable qui se compose de plusieurs champs vers une autre ligne de la même table par programmation.
    je suis tenté de faire un select vers la ligne n° 3, copier les champs (Fields.count), ensuite faire un autre select pour se positionner sur la ligne 15 et faire un Edit pour insérer l'enregistrement.
    Existe t'il une autre astuce?
    Merci.
    Pièce jointe 151075


    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
     
    procedure CopieRowToRow(Dataset:TAdoQuery);
    var
      aField : Variant;
      i: Integer;
      Num1, Num2:Integer;
    begin
     
    Num1:=3;     //destinée au Select SQL
    Num2:=15;
     
    // code que j'ai trouvé. ne fonctionne pas chez moi
      // Create a variant Array
      aField := VarArrayCreate([2,DataSet.Fieldcount-1], VarVariant);
      // read values into the array
      for i := 2 to (DataSet.Fieldcount-1) do
      begin
         aField[i] := DataSet.fields[i].Value ;
      end;
     
     
      // Put array values into new the record
       for i := 2 to (DataSet.Fieldcount-1) do
       begin
       DataSet.Edit;
       if (DataSet.fields[i].CanModify) then
       DataSet.fields[i].Value := aField[i] ;
       DataSet.Post;
       end;
    End;
    end;

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par 94340DB Voir le message
    je souhaite déplacer un enregistrement d'une même AdoTable qui se compose de plusieurs champs vers une autre ligne de la même table par programmation.
    je suis tenté de faire un select vers la ligne n° 3, copier les champs (Fields.count), ensuite faire un autre select pour se positionner sur la ligne 15 et faire un Edit pour insérer l'enregistrement.
    Existe t'il une autre astuce?
    Très clairement, ce n'est absolument pas la méthode à appliquer !
    L'ordre des lignes dans un ensemble de données (ADOTable, ADOQuery, ADODataSet dans votre cas) est un concept très fluctuant, et ce quelque soit le moteur de bases de données.
    L'ordre ne peut résulter que d'une indexation ou d'une clause bien spécifiée (ORDER BY dans un SELECT).

    Si vous voulez insérer un enregistrement, l'idéal est de passer par une requête SQL via un objet TADOQuery :
    INSERT INTO MaTable(Colonne1,..., ColonneN) VALUES(Valeur1,..., ValeurN);
    Si vous voulez mettre à jour une ligne, ce sera la même approche :
    UPDATE MaTable SET Colonne1 = Valeur1,..., ColonneM = ValeurM WHERE ColonneI = ValeurI;
    Si vos données sont affichées dans une grille, il suffit de réaliser le rafraichissement de l'ensemble de données lié...

    Et quelques remarques sur le code :
    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
     
    procedure CopieRowToRow(Dataset:TAdoQuery);
    var
      aField : Variant;
      i: Integer;
      Num1, Num2:Integer;
    begin
     
    Num1:=3;     //destinée au Select SQL
    Num2:=15;
     
      // Il manque la commande de positionnement sur la ligne "source"
     
    // code que j'ai trouvé. ne fonctionne pas chez moi
      // Create a variant Array
      aField := VarArrayCreate([2,DataSet.Fieldcount-1], VarVariant);
      // read values into the array
      for i := 2 to (DataSet.Fieldcount-1) do
      begin
         aField[i] := DataSet.fields[i].Value ;
      end;
     
     
      // Il manque la commande de positionnement sur la ligne "destination"
     
     
      // L'édition se fait pour tous les colonnes de la ligne, pas à chacune de colonnes
      // car ce n'est pas performant...
      DataSet.Edit;
      // Put array values into new the record
       for i := 2 to (DataSet.Fieldcount-1) do
       begin
         //DataSet.Edit;
         if (DataSet.fields[i].CanModify) then
         DataSet.fields[i].Value := aField[i] ;
         //DataSet.Post;
       end;
      DataSet.Post;
    End;
    end;
    Philippe.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Déplacer un enregistrement
    Merci Philippe, je vais faire un test en SQL.

Discussions similaires

  1. [AC-2000] Copier les donées d'une table vers une autre ligne de cette même table
    Par tibogaet dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/06/2010, 09h39
  2. [AC-2007] déplacer un enregistrement dans une autre table
    Par botk62 dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/07/2009, 20h40
  3. Déplacer un message vers une autre rubrique
    Par CJAZZY dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 03/01/2009, 19h37
  4. Additionner enregistrement avec une autre ligne
    Par aurelie83 dans le forum SQL
    Réponses: 2
    Dernier message: 03/09/2007, 10h06
  5. [Conception] Déplacer un enregistrement vers une table identique
    Par Romalafrite dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/09/2006, 10h55

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