2010-11-03 37 views
0

permet donc dire que j'ai un code comme ci-dessous pour extraire des données d'un autre fichier d'accès:MS Access - ADO d'enregistrements, en utilisant avec instruction SQL pour récupérer des données et de construire la table

Sub ADO_Recordset_OpenTable() 
Dim rs As ADODB.Recordset 
Dim cn As ADODB.Connection 
Dim MyPath As String 
MyPath = CurrentProject.Path 

Set cn = New ADODB.Connection  
cn.Provider = "Microsoft Jet 4.0 OLE DB Provider" 

cn.ConnectionString = "Data Source=C:\Users\Justin\Desktop\ExampleFile.mdb" 
cn.Open 

Set rs = New ADODB.Recordset 
rs.Open "Schedule", cn, adOpenDynamic, adLockReadOnly, adCmdTable 

' I would like to at this point build a table within the currentdb file 
' with the data in the recordset. Either some kind of create table or 
' SQL INSERT?? Just trying to learn how to work with the data set 

Ainsi, au sein de l'exemple sont mes commentaires . Fondamentalement aimerait savoir comment créer une table sur les données contenues avec le jeu d'enregistrements. Je suppose que créer un tabledef? Mais c'est DAO, n'est-ce pas? et je ne pouvais pas vraiment utiliser à la fois DAO et ADO ensemble dans une routine droite?

Merci Justin

Répondre

3

Vous pouvez utiliser ADO et DAO pour différents objets dans la même procédure.

Vous pouvez créer un DAO.TableDef et d'examiner la collection Les champs de recordset, la création de nouveaux champs TableDef correspondant à chaque rs.Fields (i) .Type

.Nom et rs.Fields (i) Une fois que vous avez créé le structure de table (TableDef), vous pouvez parcourir les lignes de jeu d'enregistrements pour créer et exécuter des instructions INSERT pour stocker les valeurs de ligne dans votre nouvelle table.

Mais cela me semble trop dur. J'aime la suggestion de SELECT INTO de Raj mieux. Cependant, puisque vous connaissez déjà le nom de la table et le chemin de votre MDB, j'atteindrais d'abord DoCmd.TransferDatabase, et laisserais ADO seulement pour les tâches que DAO ne peut pas faire du tout ou ne peut pas faire aussi commodément que ADO. Enfin, si votre intérêt principal sur celui-ci est l'exploration des possibilités, jetez un oeil à la méthode Save du jeu d'enregistrements. Vous pouvez enregistrer avec adPersistXML, puis importer le fichier XML enregistré en tant que nouvelle table dans votre base de données actuelle. Voir Save Method (ADO)

+0

Oh wow .... alors oui merci Hans! En fait, je demandais juste parce que je suis en train de jouer avec les trucs ADO, juste pour commencer, comme j'ai déjà utilisé DAO auparavant. Je n'ai pas vraiment besoin de transférer la table d'une base de données d'accès à une autre au travail, en essayant simplement différentes choses pour apprendre un peu plus. J'aime l'idée de boucle, même si, comme vous l'avez souligné, il peut y avoir de meilleurs moyens. Donc, je devrais connaître les propriétés exactes de la table, tous les champs et types de données pour que cela soit bien fait? comme je construirais la table en premier? l'INSERT copie juste ce qui est là mais – Justin

+0

Je suppose que le tirer avec un jeu d'enregistrements est différent que d'avoir les deux objets dans la même base de données parce que currentdb connaîtrait toutes ces propriétés, rendant la méthode INSERT INTO faisable à cause de cela? Cela a-t-il du sens? – Justin

+0

Où puis-je consulter la méthode Save pour le transfert XML? Connaissez-vous une ressource avec un exemple? merci comme toujours .... Je n'ai pas oublié le tableau de bord non plus. Dès que j'ai le temps de faire une copie vierge, je vais trouver comment vous l'obtenir, car je pourrais utiliser votre conseil! – Justin

1

Vous pouvez essayer ADOX.

+0

Merci pour la ressource! – Justin

2

Je l'ai fait la manière laide - analyser le jeu d'enregistrements ADO entrant, compiler l'instruction CREATE TABLE et l'exécuter, puis RBAR à travers le jeu de données ADO à insérer dans la table locale.

Vous pouvez également créer une requête passthrough que vous pouvez ensuite utiliser pour SELECT * INTO MyNewTable FROM MyPassThroughQuery

+0

merci .... Je vais regarder dans la façon de créer un PassThroughQuery! – Justin