2017-05-20 1 views
0

Je suis nouveau à StackOverflow, et non codeur expert. J'ai créé un sous-VBA pour charger un fichier séparé par des tabulations (160k enregistrements, environ 20 colonnes) en tant que jeu d'enregistrements (méthode Recordset.Open) en moins d'une seconde.Plus rapide pour déplacer un jeu d'enregistrements (DAO ou ADO) dans une table

Je dois ensuite le déplacer dans une table MS Access 2013 pour un traitement ultérieur avec plusieurs requêtes. Si j'exécute une méthode DoCmd.Import dans une table, il faut environ 1000 secondes (x2000 de plus)

Existe-t-il un moyen de déplacer tous les enregistrements du jeu d'enregistrements dans une table (existante ou non) autre, puis passer par l'ensemble du jeu d'enregistrements et ajouter un enregistrement à la fois?

Merci

+0

Certes, la méthode 'DoCmd.Import' fait plus de travail que le simple chargement d'un csv dans un jeu d'enregistrements. La méthode Access doit ensuite être ajoutée dans un schéma de table défini. – Parfait

Répondre

4

Pensez directement l'interrogation text file à partir d'une requête d'accès où vous interrogez le dossier contenant le fichier texte avec un qualificatif de période sur le fichier. C'est une caractéristique unique du Jet/ACE SQL Engine (non conforme dans d'autres bases de données). Vous devrez peut-être créer un fichier schema.ini dans le même répertoire que le fichier délimité par des tabulations pour définir correctement Délimité:

Schema.ini(sauf dans le même dossier que le fichier onglet, sans cela toutes les données est dans une colonne)

[myTabFile.txt] 
ColNameHeader=True 
CharacterSet=65001 
Format=TabDelimited   

requête Ajout

INSERT INTO myCurrentTable (Col1, Col2, Col3, Col4, Col5) 
SELECT t.Col1, t.Col2, t.Col3, t.Col4, t.Col5 
FROM [text;HDR=Yes;FMT=Delimited;Database=C:\Path\To\Text\File].myTabFile.txt t; 

requête Création de table

SELECT t.Col1, t.Col2, t.Col3, t.Col4, t.Col5 
INTO myNewTable 
FROM [text;HDR=Yes;FMT=Delimited;Database=C:\Path\To\Text\File].myTabFile.txt t; 
+0

WOW !!! c'est exactement ça. Vitesse de l'éclair!! Merci beaucoup!! – Davide

+0

Haha ... content de pouvoir aider! – Parfait

+0

@Parfait Dans un DB que je suis en train de tester, "insert dans table (cols) select * from anotherTable" insère seulement une ligne, tandis que créer une nouvelle table avec "select * into table from anotherTable" insère toutes les lignes. Pourquoi donc? – MVAmorim