2011-02-02 8 views
1

J'utilise Delphi2010 et j'essaie de faire un insert dans plusieurs tables. Je ne connais pas le meilleur moyen de le faire. Ce que je me demande, c'est s'il y a un moyen possible de faire un insert en utilisant un des outils de Delphi comme le TQuery ou TClientDataSet ou serait-il préférable d'utiliser du code (nous utilisons le langage Pascal). Un tableau peut-être? Je n'ai pas utilisé Delphi depuis longtemps, mais j'ai inséré et mis à jour des informations dans une table avant, pas multiple. En outre, ces tables utilisent à peu près les mêmes noms de champs.Insertion dans plusieurs tables

Toute aide serait grandement appréciée.

Merci d'avance !!

+0

Quelle base de données utilisez-vous? – RRUZ

+2

Vous ne fournissez pas suffisamment d'informations pour donner une réponse significative. –

Répondre

1

Appelez une procédure stockée pour mettre à jour vos tables simultanément, avec un wrapper de transaction. Ou re-concevoir votre base de données pour éliminer les données dupliquées/redondantes, de sorte que vous n'auriez jamais besoin de mettre à jour plusieurs tables à la fois. Notez que cette réponse est parfaitement valide, compte tenu des informations fournies dans la question ... (Note: il est tard, ne peut pas dormir, s'ennuie, c'est ce que vous obtenez, compte tenu de la qualité de l'information dans la question!)

1

Une autre solution possible pourrait être de créer une vue pouvant être mise à jour sur la base de données et de mettre à jour la vue depuis Delphi.
La création d'une vue pouvant être mise à jour déplace simplement le travail de mise à jour de 2 tables vers SQL au lieu de Delphi.
Cela déplace la logique métier vers le SQL au lieu de dans le Delphi. Il génère également moins de trafic réseau. Comme Chris écrit: utiliser des transactions, lorsque 2 mises à jour/insertions ou plus dépendent l'une de l'autre.

1

Quels composants d'accès aux données utilisez-vous? Quelles restrictions avez-vous? voulez-vous insérer les mêmes valeurs dans les deux tables? pourquoi pas facile comme:

for i = low(tables) to high(tables) do 
    begin 
    query.sql.text := 'insert into '+tables[i]+' (fields) values('+ ...)'; 
    query.execsql; 
    end; 
Questions connexes