Permutation entre les enregistrement dans une table [Résolu]

- 5 juin 2013 à 19:25 - Dernière réponse :
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
- 13 juin 2013 à 10:59
salut,
j ai des enregistrement d'une base de donnée dont les champs est: num,nom,lieu,...
dans le champ nom je voudrais faire une permutation entre deux enregistrent exp: 1er enregistremnt du champ nom est 'Paris',2eme enregistremnt du champ nom est 'Lyon' donc mon souci c est comment rendre le 1er enregistrement 'Lyon' et le 2eme 'Paris' en utilisant le champ indexé Num.
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11 juin 2013 à 12:06
3
Merci
Tu peux aussi améliorer la lisibilité de ton code en utilisant un "with".
Petit conseil : renomme les composants que tu utilises. Un "ed_recherche.text", par exemple, sera plus compréhensible qu'un "edit1.text" (surtout si tu reprends ton code d'ici deux ou trois ans pour le modifier... ou si tu travailles en équipe, tu feras gagner du temps à tes collègues)

With DataModule1.Tposte do begin
     If FindKey([StrToInt(Edit1.Text)]) Then begin
        Edit;
        FieldByName('Lieu').Value      := DBEdit13.Text;
        FieldByName('Nom_poste').Value := DBEdit12.Text;
        Post;
     end;
end;



Simon

Merci sp40 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de sp40
Meilleure réponse
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11 juin 2013 à 16:18
3
Merci
FindKey est une méthode TTABLE et fonctionne sur un champ indexé.

si on souhaite généraliser la méthode quelque soit le dataset, on peut
appliquer un transtypage :

With TTable(DataModule1.Dataset) do 
begin
     If FindKey([StrToInt(Edit1.Text)]) Then 
     begin
        Edit;
        FieldByName('Lieu').Value      := DBEdit13.Text;
        FieldByName('Nom_poste').Value := DBEdit12.Text;
        Post;
     end;
end;


on peut aussi la méthode LOCATE..

cantador

Merci cs_cantador 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
6 juin 2013 à 09:13
0
Merci
Bonjour,
Avec deux petites requêtes d'update ?
Update [nom de la table]
Set LIEU = 'Paris'
Where Num = 1;

Update [nom de la table]
Set LIEU = 'Lyon'
Where Num = 2;

Simon
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
6 juin 2013 à 10:51
0
Merci
Bonjour,

Merci d'utiliser les balises de code
et n'oubliez pas de cocher la case si la réponse
vous satisfait.

cantador
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
6 juin 2013 à 12:55
0
Merci
Ah bé justement !!!!
Y a pas de balise sql !!! Une amélioration du site à prévoir...

Simon
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
6 juin 2013 à 15:03
0
Merci
si..

autre

cantador
Commenter la réponse de cs_cantador
6 juin 2013 à 18:56
0
Merci
Salut,

merci candateur simon, mais ce que je voudrais faire c est:
faire une recherche du 1er et 2eme enregistrement sur une forme, puis la permutation entre deux les deux champs dans la même forme.
Commenter la réponse de coeurblanc1351
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
6 juin 2013 à 21:21
0
Merci
Oui, d'accord... Je t'ai donné un bout de code sql, après il faut que tu l'adaptes à ton programme... Si tu veux plus d'aide, donne plus de détails (nom de tes composants, etc...)

Simon
Commenter la réponse de sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
6 juin 2013 à 21:22
0
Merci
Et c'est "cantador" qu'il s'appelle, c'est un très vieux monsieur, un peu de respect quoi !

Simon
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
7 juin 2013 à 12:36
0
Merci
héééé ouiiiiii, je suis vieux, très vieux..
même que je commence à voir une lumière très blanche
au bout d'un tunnel..

ça sent pas bon, vite faut que je réponde..

faire une recherche du 1er et 2eme enregistrement sur une forme, puis la permutation entre deux les deux champs dans la même forme.

simonpelloquin a bien répondu à la question et son code fonctionne
dans une même forme.

Mais comme apparemment, tu ne comprends pas bien le SQL, tu penses qu'il faut faire une recherche d'enregistrement au préalable alors qu'avec ce langage, ce n'est pas nécessaire.
c'est la clause WHERE qui fait le boulot !

A noter que le code SQL fourni marche aussi bien en
mode commande qu'en mode programmation :

procedure TForm1.Button1Click(Sender: TObject);
begin
    Query1.close;
    with Query1.SQL do
    begin
      Clear;
      Add('Update [nom de la table] ');
      Add('Set LIEU = 'Paris' ');
      Add('Where Num = 1; ');
      Query1.ExecSQL;

      Clear;
      Add('Update [nom de la table] ');
      Add('Set LIEU = 'Lyon' ');
      Add('Where Num = 2; ');
      Query1.ExecSQL;
    end;
end;


tiens, ben je me sens mieux tout à coup..

cantador
Commenter la réponse de cs_cantador
7 juin 2013 à 22:48
0
Merci
salut

je vais détaillé le max ce que je veux faire
j ai une table (poste) dans un data module qui comporte les champs suivant : (num_poste,nom_poste,lieu_poste,marque,date_mes)
- j ai une forme contient les objets suivant
- 1er edit(pour chercher le 1er enregistrement en tapant le champ indexé num_poste)
- 5 Dbedit(pour afficher résultat de recherche du 1er enregistrement si existe) avec bouton pr lancé recherche.

- 2eme edit(pour chercher le 2eme enregistrement en tapant le champ indexénum_poste)
- 5 Dbedit(pour afficher résultat du recherche du 2eme enregistrement si existe)avec bouton pr lancé recherche.
- 3eme bouton pr permuter le champ lieu des deux enregistrement exp:si la recherche donne lieu du 1er recherche 'Paris' et la recherche du 2eme recherche donne 'lyon'.Donc ce je cherche c que lieu du 1er enreg devient 'Lyon' et lieu de 2eme enreg devient 'Paris'.
Commenter la réponse de coeurblanc1351
7 juin 2013 à 23:31
0
Merci
j ai réussi de programmé bouton1 et bouton2
dbedit1..5 affichent 1er enregistrement sachant que num_poste et sur edit1 et lieu poste sur dbedit3 (1en enreg)
dbedit6..10 affichent 2eme enregistrement sachant que num_poste et sur edit2 et lieu poste sur dbedit8 (2eme enreg)

mon souci c comment programmé bouton3 pr faire permutation entre le contenu de dbedit3 et dbedit8 et enregistrer la modification dans la table poste
Commenter la réponse de coeurblanc1351
8 juin 2013 à 09:33
0
Merci
salut,
je crois que mon probleme est resolu avec la commande suivante:
If DataModule1.Tposte.FindKey( [ Strtoint ( Edit1.text)]) Then
begin
DataModule1.Tposte.Edit;
DataModule1.Tposte.Fieldbyname('Lieu').Value := DBEdit13.Text ;
DataModule1.Tposte.Fieldbyname('Nom_poste').Value := DBEdit12.Text ;
DataModule1.Tposte.Edit;
end;

If DataModule1.Tposte.FindKey( [ Strtoint ( Edit2.text)]) Then
begin
DataModule1.Tposte.Edit;
DataModule1.Tposte.Fieldbyname('Lieu').Value := DBEdit4.Text ;
DataModule1.Tposte.Fieldbyname('Nom_poste').Value := DBEdit3.Text ;
DataModule1.Tposte.Edit;
Commenter la réponse de coeurblanc1351
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11 juin 2013 à 11:52
0
Merci
DataModule1.Tposte.Edit;
.....
DataModule1.Tposte.Post; 


cantador
Commenter la réponse de cs_cantador
12 juin 2013 à 21:26
0
Merci
salut

merci beaucoup cantador pour l'amélioration.
Commenter la réponse de coeurblanc1351
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13 juin 2013 à 10:57
0
Merci
essaie d'écrire en bon français
on ne comprend pas à quoi servent tes recherches..
puisque tout peut se faire directement

cantador
Commenter la réponse de cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13 juin 2013 à 10:59
0
Merci
désolé, il y eu un méli mélo dans les posts

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.