Index base de donnée avec DELPHI 2

cs_christian51 Messages postés 5 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 8 mai 2003 - 25 avril 2003 à 23:32
cs_christian51 Messages postés 5 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 8 mai 2003 - 8 mai 2003 à 15:09
Salut à tous
voilà, j' ai beaucoup galérer mais je ne vois pas comment creer des champs indexés : je m'explique ...

les éléments :
UNE TABLE-SOURCE - contient des champs indéxés -
UN BATCHMOVE
UNE TABLE-DESTINATION

Quand je sauvegarde ma base de donnée de source vers destination, les indexs ne sont pas sauvegardés.
Et a la réouverture d'une archive, j'ai des erreurs d'index.

1 - Comment sauvegarder aussi les index ????

2 - Comment recréer les indexs par prog si je connecte la base sans les indexs.
PS : bien sure, j'ai essayé ADDINDEX , INDEXDEF et plein d'autres mais je ne doit pas faire les choses correctement car j'ai des erreurs d'index à l'ouverture des la table source

merci de m'aider , je galère grave.

christian51

7 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 avril 2003 à 23:40
Recopier les noms des index et leurs caractéristiques de la table source vers la table destination :
TableDestination.IndexDefs.Assign(TableSource.IndexDefs);

May Delphi be with you
0
cs_christian51 Messages postés 5 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 8 mai 2003
1 mai 2003 à 18:13
Salut
J'ai essayé mais pas réussi.
Comment faut il utiliser et à quel endroit utiliser le fonction ASSIGN
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 mai 2003 à 18:32
Pour utiliser ce code, il faut que les champs de la table de destination soient créés.
Si tu utilises un composant TBatchMove, dès que les opérations de copie sont terminées, tu peux utiliser ce bout de code sauf, bien évidemment, si la table de destination est une table ASCII.

May Delphi be with you
0
cs_christian51 Messages postés 5 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 8 mai 2003
5 mai 2003 à 22:59
Salut,

Milles merci.......

Je viens d'essayer et CA MARCHE.
Ce petit bout de code bien sympathique n'est pas dans la doc DELPHI 2 - DOMMAGE.

Christian51 :big)
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
5 mai 2003 à 23:06
La méthode Assign est utilisée dans de nombreuses circonstances, dès qu'il s'agit de copier le contenu d'un objet persistant.
Malgré tout la propriété IndexDefs est documentée depuis Delphi 1. Il suffisait donc de copier cette propriété dans celle, identique, de l'autre objet.
May Delphi be with you
0
cs_christian51 Messages postés 5 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 8 mai 2003
5 mai 2003 à 23:26
Salut

J'ai honte, j'ai parlé trops vite . je m'explique,
Quand je sauvegarde ma table , je n'ai pas de défaut.
Quand je réouvre l'archive et que j'essaye de trier mes champs, j'ai des erreurs / il n'y a pas d'index pour le champs XXXXX

ci dessous, mon bout de code de sauvegarde et celui de réouverture de la table. Où est le pb.

merci d'avance.

procedure TA_Frm_devis.Enregistrerundevis1Click(Sender: TObject); // PROCEDURE D'ENREGISTREMENT D'UN DEVIS
begin
SaveDialog1.InitialDir:=CheminTables+'Archives Devis'; // CHEMIN PAR DEFAUT = CHEMINTABLES
If SaveDialog1.Execute=True Then
If SaveDialog1.FileName='' Then // SI PAS DE "NOM" ALORS SORTIR
Exit // SINON
Else
Begin
DataModule_Devis.T_Sauvegarde.TableName:=SaveDialog1.FileName;
//DataModule_Devis.T_Tout.Filtered:=True //On ne sauvegarde que les Qte > 0
If DataModule_Devis.T_Tout.TableName = DataModule_Devis.T_Sauvegarde.TableName Then
Begin // SI LA TABLE SOURCE = DESTINATION ALORS
If MessageDlg ('Voulez vous vraiment modifier cette archive ?', // LA DESTINATION POINTE SUR UNE ARCHIVE
MtConfirmation,[MbYes, MbNo],0)= MrYes Then // QUESTION > MODIFIER OU PAS
Begin
DataModule_Devis.T_Tout.Edit; // SI OUI
DataModule_Devis.T_Tout.Post; // MISE A JOUR DES FICHIERS ARCHIVES
ShowMessage ('Archive sauvegardée');
End;
End
Else
Begin
DataModule_Devis.BatchMove1.Execute; // SAUVEGARDE NOUVELLE ARCHIVE
DataModule_Devis.T_Sauvegarde.IndexDefs.Assign(DataModule_Devis.T_Tout.IndexDefs);// SAUVEGARDE DES INDEXS DE CHAMPS
End;
// DataModule_Devis.T_Tout.Filtered:=False;
end;
end;

procedure OuvertureArchive;
Begin
A_Frm_DEvis.OpenDialog1.InitialDir:='CheminTables';
If A_Frm_DEvis.OpenDialog1.Execute Then
If A_Frm_DEvis.OpenDialog1.FileName<>'' Then
Begin
DataModule_Devis.T_Tout.Active:=False; DataModule_Devis.T_Tout.TableName:=A_Frm_DEvis.OpenDialog1.FileName;
DataModule_Devis.T_SauveGarde.TableName:=DataModule_Devis.T_Tout.TableName;
DataModule_Devis.T_Tout.IndexFieldNAmes:='';
DataModule_Devis.T_Tout.Active:=True;
NomRapport:=A_Frm_DEvis.OpenDialog1.FileName;
End;
End;
0
cs_christian51 Messages postés 5 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 8 mai 2003
8 mai 2003 à 15:09
Salut,
J'ai honte +++++
Merci encore pour ton aide.
évidement , ca marche. Je n'avais pas penser que je devais " recréer ma table" avec CREATETABLE aprés avoir utilisé ASSIGN.
Et surtout que je devais faire BATCHEMOVE.MODE:=BATUPDATE ou BATAPPEND car BATCOPY me recréait toute ma table, et donc aussi mes valeurs de champs.

Encore MERCI pour la pat :big) ience de ceux qui aide les débutants.

Christian51
0
Rejoignez-nous