2017-05-16 3 views
-1

Je serais reconnaissant si quelqu'un me donne des conseils sur la façon de mettre le résultat de la requête d'une base de données à une autre base de données.Insérer le résultat de la requête d'une base de données MS-Access à l'autre en utilisant ADO

Je peux effectuer une requête de sélection sur une base de données mais comment puis-je déplacer/enregistrer ce résultat (données) dans une autre base de données? J'utilise des composants ADO dans Rad Studio - Delphi sur les bases de données locales * .mdb et * .accdb. Des conseils? Merci à tous pour vos réponses.

+3

Pouvez-vous poste qu'avez-vous essayé? et aussi l'exemple de la structure de la table de données – Sami

+1

La base de données de destination contient-elle aussi un accès à ms (je suppose que c'est le cas)? la base de données/table de destination existe-t-elle ou non? leurs structures sont-elles identiques? la source doit-elle provenir d'un jeu de données/requête ADO en premier? S'il vous plaît fournir plus de détails. – kobik

Répondre

2

Vous pouvez le faire en utilisant une syntaxe spéciale pour le SQL que vous utilisez pour sélectionner les lignes de données que vous souhaitez copier, comme suit:

J'ai une première base de données d:\aaad7\ado\test.mdb contenant une table d'accès ATable contenant une colonne de caractères, ANAME. J'ai aussi une deuxième base de données vide d:\aaad7\ado\dest.mdb.

Le code suivant copie la table ATable dans la deuxième base de données.

AdoQueryCopy.SQL.Text := 'SELECT * INTO ATable IN "D:\aaad7\ado\dest.mdb" FROM ATable'; 
    AdoQueryCopy.ExecSql; 

AdoQueryCopy est un TADOQuery qui a une chaîne de connexion qui pointe vers d:\aaad7\ado\test.mdb.

Important Si vous souhaitez ouvrir la copie de ATable à d:\aaad7\ado\dest.mdb, vous devez fermer la connexion qui AdoQueryCopy est d'utiliser à l'avance, sinon vous risquez d'obtenir une erreur se plaignant que un objet ADO ne peut pas renvoyer plusieurs ensembles de résultats. Je ne suis pas sûr, mais je pense que cela peut être parce que AdoQueryCopy.ExecSQL provoquer un ensemble de données ADO temporaire à créer avec les lignes insérées.

Les lignes copiées à ATable dans la deuxième base de données peuvent être sélectionnées en ajoutant une clause WHERE.

+0

Votre conseil m'a aidé à résoudre mon problème, merci beaucoup! – Peter

+0

Dans ce cas, veuillez "l'accepter" en cliquant sur l'icône "cocher" en haut à gauche de ma réponse. – MartynA

-3

si vous êtes nouveau sur delphi Mettez un TStringGrid Tado et obtenez toutes les données de mdb à Gridcells connexion plus tard, fermez toutes les ado de mdb.and Connectez-vous à la deuxième Db .accdb. idk pourquoi c'est accdb? et démarrer adotable insérer des données de la grille à accdb. si votre ado ne pouvait pas se connecter à accdb alors créez une copie de 1st mdb et essayez d'enregistrer en tant que " .mdb". // si vous êtes pro il y a un //ADOTable1.SaveToFile();

+2

Si vous voulez copier les enregistrements champ par champ, pourquoi s'embêter à utiliser un composant visuel pour le faire? Vous pouvez simplement copier 'Value' de chaque champ d'un jeu de données à l'autre. Mais cela vous laisse toujours le problème de créer une table de destination avec la même structure que la source, ce que votre réponse n'aborde pas. – MartynA

+1

@MartynA, * "Mais cela vous laisse toujours le problème de créer une table de destination avec la même structure que la source" * - OP n'a pas mentionné ce fait:/pour autant que je sache, la table de destination existe déjà. et puisque le PO n'a pas fourni de détails, je n'avais aucune motivation à répondre. – kobik