2013-02-25 43 views
6

का उपयोग कर विभाजक के साथ एक पाठ आयात करना मैं नई txt फ़ाइलों को जोड़ने को स्वचालित करने की कोशिश कर रहा हूं, जिसमें सभी के पास समान (ज्ञात) लेआउट है।वीबीए

कॉलम टैब (टैब बटन) का उपयोग करके कॉलम अलग हो गए हैं। क्या पाठ फ़ाइलों को आयात करने के लिए एक्सेस विज़ार्ड में वीबीए में ऐसा करना संभव है?

मैं VBA

+0

सबसे आसान तरीका प्रक्रिया की इस तरह के साथ शुरू करने के लिए आप में से कोई मैक्रो रिकॉर्ड करने के लिए: एक बार क्वेरी परीक्षण किया है और काम कर रहा है, एक VBA सबरूटीन में सहेजें ताकि पहुँच यह बिल्कुल उसी रूप में चलाया जाएगा, ताकि जैसे इसे एक्सेल/एक्सेस या जो कुछ भी मैन्युअल रूप से कर रहा है, उसके बाद जेनरेटेड वीबीए लें और इसे इनपुट पैरा आदि के लिए सामान्यीकृत करें। –

+0

@ जोनगर्टन मुझे विश्वास नहीं है कि आप एक्सेस में मैक्रोज़ रिकॉर्ड कर सकते हैं। – Brad

+0

नहीं, लेकिन आप Excel में ऐसा करने में सक्षम होना चाहिए, और उसके बाद जेनरेट किए गए वीबी को अपने कोड में दोबारा उपयोग करें - ऑब्जेक्ट मॉडल उपलब्ध होगा (जब तक आप सही संदर्भ में खींचें)। –

उत्तर

11

में DoCmd.TransferText विधि का उपयोग कर रहा है आप एक बार अपने विनिर्देशन फ़ाइल बनाने के लिए विज़ार्ड के माध्यम से जाने की आवश्यकता होगी। ऐसा करने के लिए अपनी टेक्स्ट फ़ाइल को सामान्य की तरह आयात करें लेकिन विज़ार्ड में बहुत गहराई से पहले, नीचे बाईं ओर क्लिक करें, "उन्नत ..." बटन। यह वह जगह है जहां आप अपनी स्पेक फ़ाइल बनाते हैं।

enter image description here

करेंगे ये स्तंभ अपने इनपुट फ़ाइल, डेटा प्रकार और सभी मेल खाते हों। यदि आप एक का उपयोग कर रहे हैं तो {tab} फ़ील्ड डेलीमीटर और उपयुक्त टेक्स्ट क्वालीफायर का चयन करना सुनिश्चित करें।

enter image description here

अपने कल्पना सहेजें (जो बाद में यह एक ही स्क्रीन पर वापस आ रहा है और Specs... क्लिक करके संपादित किया जा सकता है तो अधिक बचत अपने पुराने एक)

अब आप इस

तरह VBA में उपयोग कर सकते हैं
DoCmd.TransferText acImportDelim, "your spec name", "destination table name", sourceFilePath 

पैरामीटर HasFieldNames है कि आपको यह तय करना होगा कि यह true या false आपकी फ़ाइल के आधार पर है।

+1

तकनीकी रूप से आप नए आयात/निर्यात प्रोफ़ाइल API का उपयोग कर XML से अपने स्वयं के I/O चश्मे को भी इकट्ठा कर सकते हैं। यह मुश्किल है लेकिन संभव है - मैंने इसे पहले किया है।[ImportExportSpecification] देखें (http://msdn.microsoft.com/en-us/library/ff820988.aspx), [नया आयात/निर्यात विशिष्टता ओएम] (http://blogs.msdn.com/b/thirdoffive/ संग्रह/2006/10/12/नया-आयात-निर्यात-विनिर्देश-om.aspx), [नया आयात/निर्यात विनिर्देश UI] (http://blogs.msdn.com/b/thirdoffive/archive/2006 /10/17/the-new-import-export-specifications-ui.aspx) –

+0

@ जोशुआहोनीग इसे स्वयं बनाने का क्या फायदा है? मैपिंग इस विधि से किसी भी "बेहतर" है? यह एक बहुत तेज़ प्रक्रिया है, नहीं? – Brad

+0

आप रनटाइम पर फ्लाई पर चश्मे बना सकते हैं। कभी-कभी यह आवश्यक है, खासकर अगर किसी अन्य एप्लिकेशन को एप्लिकेशन वितरित किया जाता है। –

2

आयात विज़ार्ड के साथ नकारात्मकता यह है कि फ़ाइल स्वरूप में थोड़ी सी भी बदलाव के लिए, आपको आयात करने के लिए उन सभी चरणों फिर से पर क्लिक करना होगा।

सीधे एसक्यूएल में ऐसा करने के लिए ms Access import table from file in a query में @ रेमो का उत्तर देखें। मैं वास्तव में एक परियोजना में एक ही विधि का उपयोग कर रहा हूँ। मैं इस तरह कुछ उपयोग करता हूं (विवरण के लिए मेरा लिंक देखें):

insert into MyTable (column-list...) 
select (column-list...) 
from [data-source-specifications].[file-name] 
any-other-clauses...; 

बस एक चेतावनी। यदि आप इस SQL ​​सिंटैक्स को सामान्य एक्सेस क्वेरी ऑब्जेक्ट में डालते हैं, तो एक अच्छा मौका है कि एक्सेस उस बिंदु पर उलझाएगा जहां यह क्वेरी ऑब्जेक्ट को खोलने में भी सक्षम नहीं होगा। इसलिए जब आप एक्सेस में आज़माते हैं तो क्वेरी को टेक्स्ट फ़ाइल में लिखें और सहेजें। है

sub MyTableImport() 
    sqlStr = "   insert into MyTable (column-list) " ' leave a space at the 
    sqlStr = sqlStr & "select (column-list...) " ' end of each line of the string 
    sqlStr = sqlStr & "from [data-source-specifications].[file-name] " 
    sqlStr = sqlStr & "any-other-clauses... ;" 

    DoCmd.RunSQL sqlStr 
end sub