2008-09-22 6 views
1

J'ai défini un objet TTable Delphi avec des champs calculés, et il est utilisé dans une grille sur un formulaire. Je voudrais faire une copie de l'objet TTable, y compris les champs calculés, ouvrir cette copie, faire quelques modifications aux données avec la copie, fermer la copie, puis actualiser la copie originale et donc la vue de la grille. Y at-il un moyen facile d'obtenir une copie d'un objet TTable à utiliser de cette manière?Comment puis-je copier un TTable Delphi incluant ses champs calculés?

La réponse idéale serait celle qui résout le problème de façon aussi générique que possible, par exemple, un moyen d'obtenir quelque chose comme ceci:

newTable:=getACopyOf(existingTable); 

Répondre

0

Vous devriez être en mesure de choisir la table sur le formulaire, le copier en utilisant Ctrl-C, puis collez-le dans n'importe quel éditeur de texte. Vous obtiendrez la version texte des propriétés de l'objet que vous pourrez ensuite modifier si nécessaire. Lorsque vous avez terminé, sélectionnez à nouveau tout le texte et vous pouvez le copier dans le presse-papiers et le coller dans un formulaire.

1

Permettez-moi propose plusieurs choses:

Supposons que vous souhaitez apporter des modifications par programme. Vous pouvez ensuite utiliser les méthodes DisableControls et EnableControls du TTable pour interdire les mises à jour d'écran pendant ce temps. Si vous voulez avoir deux écrans avec les mêmes données (par exemple pour comparer des données lors de changements en ligne), vous pouvez créer deux fois le même écran, l'objet TTable étant sur l'écran lui-même. Il aura exactement la même configuration (mais ne reportera pas les modifications effectuées précédemment sur le premier écran mais lira les données de la base de données). Les modifications effectuées sur un écran ne seront pas automatiquement actualisées de l'autre.

Autre façon: Essayez d'utiliser TDataSetProvider avec TTable comme jeu de données (source) en alimentant un TClientDataSet. ApplyUpdates renvoie les modifications au TTable. Puisque les champs calculés sont en lecture seule, ils ne sont pas affectés. (non testé, mais devrait fonctionner)

0

Je crois que la deuxième approche (TClientDataset) est probablement la meilleure méthode à utiliser dans ce scénario. Une alternative serait d'utiliser une table de mémoire (kbmMemTable par exemple). Dans un cas comme dans l'autre, vous clonez votre table d'origine, puis, après avoir effectué vos modifications, faites défiler la version mémoire de votre ensemble de données et mettez à jour votre table d'origine.

2

Vous pouvez utiliser le composant TBatchMove pour copier une table et sa structure.

Définissez la propriété Mode pour spécifier l'opération souhaitée. Les propriétés Source et Destination indiquent les ensembles de données dont les enregistrements sont ajoutés, supprimés ou copiés. L'aide en ligne comporte des détails supplémentaires.

(Bien que je pense que vous devriez étudier une approche TClientDataSet - il est certainement plus évolutif et plus rapide).

Questions connexes