Permutation entre les enregistrement dans une table

Résolu
coeurblanc1351 - 5 juin 2013 à 19:25
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 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.

17 réponses

sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
11 juin 2013 à 12:06
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
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 juin 2013 à 16:18
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
3
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 juin 2013 à 09:13
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
6 juin 2013 à 10:51
Bonjour,

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

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 juin 2013 à 12:55
Ah bé justement !!!!
Y a pas de balise sql !!! Une amélioration du site à prévoir...

Simon
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
6 juin 2013 à 15:03
si..

autre

cantador
0
coeurblanc1351
6 juin 2013 à 18:56
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.
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 juin 2013 à 21:21
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
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 juin 2013 à 21:22
Et c'est "cantador" qu'il s'appelle, c'est un très vieux monsieur, un peu de respect quoi !

Simon
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
7 juin 2013 à 12:36
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
0
coeurblanc1351
7 juin 2013 à 22:48
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'.
0
coeurblanc1351
7 juin 2013 à 23:31
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
0
coeurblanc1351
8 juin 2013 à 09:33
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;
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 juin 2013 à 11:52
DataModule1.Tposte.Edit;
.....
DataModule1.Tposte.Post; 


cantador
0
coeurblanc1351
12 juin 2013 à 21:26
salut

merci beaucoup cantador pour l'amélioration.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 juin 2013 à 10:57
essaie d'écrire en bon français
on ne comprend pas à quoi servent tes recherches..
puisque tout peut se faire directement

cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 juin 2013 à 10:59
désolé, il y eu un méli mélo dans les posts

cantador
0
Rejoignez-nous