Transfert des données (table à table)

Résolu
cs_yeho Messages postés 25 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 27 février 2007 - 18 oct. 2006 à 11:06
cs_Keneda Messages postés 32 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 3 octobre 2012 - 19 déc. 2007 à 12:02
Chers amis developpeurs!


Ca fait toujours un réel plaisir de poster une question ici et d'être repondu.
Mais quand on ne peut pas aussi repondre. Les gens doivent arriver à comprendre que
c'est peut être par manque de temps ou la question n'a pas été bien posée.
Ben, j'ai une question qui me préoccupe un tout petit peu:

Ayant deux tables en Access ou autres SGBD (la table Bonjour et  la table Bonsoir), j'aimerai qu'à chaque fois qui y est saisi d'enregistrements. Qu'il y est une sorte de transfert automatique d'enregistrements dans la table Bonsoir. (Et que la table Bonjour soit toujours vide. Elle ne permettra que la saisi et lors d'un clique l'enregistrement le transfert s'effectuera dans la table Bonsoir).

Merci pour tout,
Yeho.

9 réponses

rkiki Messages postés 2 Date d'inscription mercredi 1 décembre 2004 Statut Membre Dernière intervention 29 octobre 2006
22 oct. 2006 à 12:59
Ceci peut te servir
Mets sur ta form tes deux tables (Bonjour et bonsoir) plus deux dataset et un bouton.

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Active :=true;
Table2.Active :=true;




Table1.Edit ;
table2.Edit ;
Table1.last ;




 while (not Table1.Bof) do
    begin
     Table2.Insert;
   Table2.fieldbyname('code1').asstring:=Table1.fieldbyname('code').asstring ;
     Table2.fieldbyname('nom1').asstring:=Table1.fieldbyname('nom').asstring ;
     Table2.fieldbyname('prenom1').AsString:=Table1.fieldbyname('prenom').asstring;
     
     Table2.Post; Table1.Prior  ;
    end;




   Table2.Refresh ;
  showmessage ('TRANSFER TERMINE !' );
end;



lounes
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
18 oct. 2006 à 13:26
heu moi ya ne pas tout compris la !
est ce que tu peux nous la refaire plus clairement?

"et lors d'un clique l'enregistrement le transfert s'effectuera dans la table Bonsoir", entre autres, ca veut dire quoi?
0
cs_yeho Messages postés 25 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 27 février 2007
18 oct. 2006 à 14:08
Peut être je n'ai pas été clair dans mes dires:
-dans la table BONJOUR j'ai deux champs: Nom et Prenom
-dans la table BONSOIR j'ai aussi deux champs: Nom et Prenom
-sur ma Form j'ai deux DBEdit (un pour Nom et l'autre pour Prenom)
-et enfin j'ai juste un Tbutton sur ma form (Nomé: Sauvegarde)

Supposons que je saisi dans les champs de la Table BONJOUR: Alain(Nom) et France(Prenom).
Qu'est ce que j'aimerai faire au fait???
Juste après chaque saisi des données, lors d'un click sur mon Tbutton(sauvegarde). J'aimerai que les enregistrement faits dans la Table BONJOUR soient transporter (ou transferer) dans la Table BONSOIR. Et ce transfert devra se passer successivement quand la Table BONJOUR sera saisi des données. Pour Finir, la dite table BONJOUR devra toujours se vider quand je clique sur mon Tbutton pour faire exécuter le transfert.

Je crois avoir cette fois-ci rendu mes mots beaucoup plus clair.

Merci anticipé de votre aide.

Yeho.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
18 oct. 2006 à 14:36
completement, c'est tres clair maintenant. ton probleme vient du fait que ta DBGrid est liée directement avec ta table.
alors pour cela la solution que tu veu employer me semble un peu bidouiller pour utiliser la dbgid, mais doit marcher.
tu as juste a creer une ADOQuery par exemple, et de faire une requete (au moment du click sur "sauvegarder")
"INSERT INTO bonsoir(nom, prenom) SELECT nom, prenom FROM Bonjour";
puis
"DELETE FROM Bonjour";
ce qui recopie les champs de bonjour dans bonsoir.

Ceci dit, je te conseillerais plus de ne pas utiliser de dbgrid pour ta saisie, mais plutot une TStringGrid par exemple, puis d'ajouter manuellement les champs de ta stringGrid dans bonsoir.
0

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

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 oct. 2006 à 22:56
Oulà Guillemouze, où as tu lu que yeho utilisait un TDbGrid  ?
"sur ma Form j'ai deux DBEdit (un pour Nom et l'autre pour Prenom)"

Et puis, un TStringGrid pour saisir deux chaînes, n'est-ce pas un peu trop ?

Ok pour tes deux requêtes mais il faudrait tout de même penser à insérer dans la table bonjour avant tout !

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
21 oct. 2006 à 23:18
oups pardon, je connais vraiment pas les composants DBxxx de delphi

ok donc j'ai pas vraiment compris le probleme. donc je ne sais pas que dire de plus que les requetes que je t'ai donné font le transfert de bonjour vers bonsoir, mais je ne peu rien te dire quant à l'integration de ton code parce que je ne comprend pas trop le probleme. A moins que ton probleme soit uniquement le transfert des données, independament de tes dbedit, ...
0
cs_Keneda Messages postés 32 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 3 octobre 2012
18 déc. 2007 à 13:49
Salut les gars, vous pensez pas que la table Bonjour ne sert à rien ?

en fait ton problème ne vient pas du code, mais tout simplement de ta structure de données ?
a quoi peut bien te servir ta table bonjour si tu supprime les enregistrements directemement après avoir saisie dans bonsoir ?
petite explication par un exemple :

   j'ai un sac remplis de billet de banques, que je doit déposer à la banque B, je vais à la banque A, je le dépose, je le reprend et je le met à la   
   banque B

heu ???? pourquoi tu le met pas directement à la banque B ????? 
ha oui c'est vrai, je pourrais faire ça

du coup, plus de table bonjour et tu relis directement des DBEdit à ta table Bonsoir c'est pas plus simple ????
si tu supprime à chaque fois ta table bonjour, sincèrement, a quoi elle te sert ? (sécurité de transfert de données ?)
tu prend plus de risque à faire un transfert intermédiaire si ton prog plante qu'a le transférer directement sur la bonne table,
surtout que les SGBD et SGBDR sont équipés de système de sécurité, on est au 21 ème siècle Mr SPOCK !!!!)

ou alors, imaginons que le sac de billet soit tellement lourd qu'il faille faire une pose par la banque A avant de le déposer à la banque B
en gros pour ceux qui ont pas compris, j'ai quand même besoin de la table Bonjour (bien que je comprend toujours pas pourquoi mais tout
est possible)

faut savoir les gars que vous etes pas obligé de poser un DBEdit sur un TForm pour saisir des données dans une table
bien sur derrière, il faut gérer tous les évênements à la place des DBEdit comme par exemple un DBNavigator
mais faut savoir que c'est la meilleur solution car si vous gérez tout, (même si c'est plus long) vous maitrisez l'ensemble
des traitements liés à votre base de données.

tu peux poser des TEdit tout simple c'est encore ce qu'il y a de mieux à faire
remplace tes DBEdit par des TEdit, tu as
 
    edPrenom : TEdit;    // TDBEdit;
    edNom : TEdit;       //  TDBEdit;
     // perso preférez des TQuery (ou TADOQuery comme le dit guillemouze) a la place des TTables
    TBBonsoir : TTable;  // pour la simple et la bonne raison que si vous passez sur un SGBDR comme SQL server, vous ne pouvez plus
                                     // utiliser de TTable (si vous voulez savoir pourquoi jvous expliquerai (pour ceux qui savent pas)
dans ta procedure TButtonClick tu auras

procedure TForm1.Button1Click(Sender : TObject);
begin // on suppose que TBBonjour et TBBonsoir sont ouvert au moment du clic
        // on suppose que tu es en insert, vu que tu supprimes tes données à chaque fois sur Bonjour (j'en reviens toujours pas)
    try
      tbBonsoir.Append;
         tbBonsoir.FieldByName('Nom').AsString:= edNom.Text; // on voit l'intérer de passer par un TEdit pas besoin de passer par Bonjour
         tbBonsoir.FieldByName('Prenom').AsString:= edPrenom.Text; // on est pas directement relié au TTable, on peut faire ce qu'on veut
      tbBonsoir.Post; 
    except
       on E: Exception do
          MessageDLG('Houla j''ai perdu des billets de banques :o) !!! : ' + .EMessage, mtError, [mbOK], 0);
    end;
end;

// j'ai volontairement supprimé Bonjour, maintenant si tu en as une réelle utilité, fait moi signe avec un partie de ton code
// qu'on puisse comprendre un peut mieux avec le contexte ce que tu désires

// rassuez-vous les gars, je me la pête pas c'est mon humour, je suis loin d'être un expert
// même si j'ai 11 ans de Delphi et que je suis certifié Microsoft (quel craneur), ok ok j'arrete
// bon allez, j'arrete, on apprend toujours, on peut toujours se planter alors ne vous la pétez jamais
// car les autres en savent toujours plus que vous, et vive Delphifr car justement les autres s'y trouvent
// et les autres c'est vous ;-)

// bonne fête à tous

  
 

Keneda, la fusée rouge
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
18 déc. 2007 à 14:07
et ben ca alors, t'es allé le chercher ou ce post keneda?
il date de plus d'1 an !!!!
0
cs_Keneda Messages postés 32 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 3 octobre 2012
19 déc. 2007 à 12:02
MDR :o)

trop délire en fait Guillemouze, je cherchai du code pour surveiller des accès à distance de fichier sur un poste, rien à voir, et je suis tombé sur transfert,
n'ayant pas d'information sur les dates des messages et en lisant ça, j'ai pas pu
m'empécher d'y répondre ;-)

bonne fête à toi et @ tentôt comme on dit chez nous

Keneda, la fusée rouge
0
Rejoignez-nous