2017-02-02 3 views
0

J'ai simplement supposé que cela pouvait être fait, mais je commence à me demander. La première chose est je remarque qu'il ne prendra pas la syntaxe j'utiliser normalement, même avec une seule table (juste essayer de se mettre à la plus simple syntaxe possible)Utilisation d'ADO pour joindre et interroger des fichiers texte

Select [file_name.txt].[fieldname] From [file_name.txt] 

"est pas un nom valide - c'est l'erreur que je reçois.Je pourrais simplement supprimer le qualificatif de nom de fichier du champ et ce serait bien, cependant, quand je vais rejoindre, j'aurais normalement besoin d'utiliser ce genre de syntaxe dans la partie join:

Inner Join [file_name2.txt] On [file_name.txt].[fieldname]=[file_name2.txt].[fieldname] 

auquel cas il racontera err pour "bracketing invalide de [file_name.txt]. [fieldname]"

Je ne sais pas pourquoi c'est un problème. Si j'essaie de supprimer les qualificatifs de nom de fichier, une erreur "joindre une expression n'est pas prise en charge" s'affiche.

Mon schema.ini ressemble à ceci:

[file_name.txt] 
Format=Delimited(|) 
ColNameHeader=True 

[file_name2.txt] 
Format=Delimited(|) 
ColNameHeader=True 

Ma chaîne de connexion est:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\Path" 
;Extended Properties=""text;HDR=Yes""" 

Je me demande si cela est encore possible.

Répondre

1

Oui. C'est possible et ça marche. J'ai été intrigué par votre question alors je l'ai essayé moi-même. Le pilote de texte ne comprend pas le bracketing sur les noms de champs, seulement sur le nom de la table.

Il faut donc utiliser des alias pour les noms des champs comme celui-ci:

Select tb1.[fieldname], tb2.[fieldname] From [file_name.txt] as tb1 
Inner Join [file_name2.txt] as tb2 
On tb1.[fieldname]=tb2.[fieldname] 

Ce qui a fonctionné pour moi:

SELECT tb1.[Month], tb2.[Year] FROM [Text;DATABASE=E:\].[MoneyAndCreditStats 0409 to 0417.csv] as tb1 
INNER JOIN [Text;DATABASE=E:\].[StackaOverFlowTest.csv] as tb2 ON 
tb2.[Month] = tb1.[Month] AND 
tb1.[Year] = tb2.[Year] 

pilote de texte est un outil bien pratique surtout quand brassage des formats de données/fichiers autour de Business Intelligence .

+0

Oui, vous avez raison, par exemple votre exemple est. J'ai trouvé la même réponse ailleurs. Notez cependant que l'explication n'est pas ce que vous vouliez dire je crois. Le pilote de texte dans ce cas comprend les crochets uniquement autour des noms de champs, vous devez donc utiliser un alias pour les jointures. – tbaker818

+0

Oui. Typo de ma part. Excuses. Aurait dû être "fieldnames". Avoir modifié la réponse – Yemoku