2008-09-15 10 views
12

मैं एमएस एक्सेस 2003 का उपयोग कर रहा हूं। मैं एमएस एक्सेस में 'क्वेरी' कहलाता है, जिसमें एसक्यूएल स्टेटमेंट्स डालने के लिए बहुत कुछ करना चाहता हूं। क्या ऐसा करने के लिए कोई आसान (या वास्तव में कोई रास्ता) है?क्या एमएस-एक्सेस क्वेरी में एकाधिक सम्मिलन विवरण बनाने का कोई तरीका है?

उत्तर

30

हां और ना:

मेरे सिर के ऊपर बंद, कोड यह कुछ ऐसा दिखाई देगा करने के लिए।

आप ऐसा नहीं कर सकते:

insert into foo (c1, c2, c3) 
values ("v1a", "v2a", "v3a"), 
     ("v1b", "v2b", "v3b"), 
     ("v1c", "v2c", "v3c") 

लेकिन आप

insert into foo (c1, c2, c3) 
    select (v1, v2, v3) from bar 

कर सकते हैं आप पहले से ही एक तालिका में डेटा नहीं है, तो क्या है कि आप प्राप्त करता है? खैर, आप हार्ड कोड किए गए परिणामों के साथ चयन के कई यूनियनों से बना एक चयन कथन तैयार कर सकते हैं।

INSERT INTO foo (f1, f2, f3) 
    SELECT * 
    FROM (select top 1 "b1a" AS f1, "b2a" AS f2, "b3a" AS f3 from onerow 
    union all 
    select top 1 "b1b" AS f1, "b2b" AS f2, "b3b" AS f3 from onerow 
    union all 
    select top 1 "b1c" AS f1, "b2c" AS f2, "b3c" AS f3 from onerow) 

नोट: मैं भी एक डमी तालिका के किसी न किसी रूप में शामिल करने के लिए है (जैसे, onerow) संघ (इसमें कम से कम एक पंक्ति होना आवश्यक है) की अनुमति के में पहुँच को बेवकूफ बनाने की है, और आप की जरूरत है " शीर्ष 1 "यह सुनिश्चित करने के लिए कि आपको एक से अधिक पंक्ति

पर फिर से तालिका के लिए दोहराना नहीं मिलता है, लेकिन फिर, यह संभवतः तीन अलग-अलग सम्मिलन विवरण, करना आसान होगा, खासकर यदि आप पहले से ही चीजों का निर्माण कर रहे हैं एक लूप (जब तक कि आवेषण करने की लागत निश्चित रूप से कोड करने के लिए आपके समय की लागत से अधिक न हो)।

+3

के प्रबंधन को स्वचालित करने के लिए कर सकते हैं बहुत ही रोचक और वर्णनात्मक उत्तर। यह निश्चित रूप से मेरी मदद करेगा जो मैं कर रहा था –

+2

यही तरीका है! केवल एक युक्ति: यदि आपके पास 50 से अधिक नेस्टेड 'SELECT' कथन है, तो आपको उन्हें 50 या उससे कम समूहों में निष्पादित करना होगा। मेरे पास 1080 पंक्तियां डालने के लिए थीं और मैंने उन्हें 48 के समूहों में विभाजित किया था। अन्यथा एक्सेस (मैंने v। 2010 का उपयोग किया) आपको "बहुत जटिल क्वेरी" त्रुटि के साथ चेतावनी देगा। –

+0

क्या किसी ने इसे ओल्डबी का उपयोग कर डीबीएफ फाइलों में डालने के साथ काम करने के लिए प्राप्त किया है? – reggaeguitar

1

नहीं - एक्सेस में एक क्वेरी एक एकल SQL कथन है। एक क्वेरी ऑब्जेक्ट के भीतर कई कथनों का बैच बनाने का कोई तरीका नहीं है। आप एकाधिक क्वेरी ऑब्जेक्ट्स बना सकते हैं और उन्हें मैक्रो/मॉड्यूल से चला सकते हैं।

3

व्यक्तिगत रूप से, मैं इसे करने के लिए एक वीबीए सबराउटिन बनाउंगा, और कुछ प्रकार के एसक्यूएल कनेक्शन का उपयोग कर डेटाबेस से कनेक्ट करूंगा।

Sub InsertLots() 
    Dim SqlConn as Connection 
    SqlConn.Connect("your connection string") 
    SqlConn.Execute("INSERT <tablename> (column1, column2) VALUES (1, 2)") 
    SqlConn.Execute("INSERT <tablename> (column1, column2) VALUES (2, 3)") 
    SqlConn.Close() 
End Sub 
+1

अच्छा समाधान। मैं हमेशा भूल जाता हूं कि एक्सेस में निर्मित एक संपूर्ण प्रोग्रामिंग भाषा है जिसका उपयोग आप डेटाबेस –

2

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

यदि डेटा स्टोर जेट डेटाबेस है, तो एडीओ के किसी भी रूप का उपयोग करने के लिए यह बहुत कम समझ में आता है जब तक कि आप एक स्क्रिप्टिंग प्लेटफ़ॉर्म से अपना कोड नहीं चला रहे हैं, जहां यह पसंदीदा विकल्प है। यदि आप एक्सेस में हैं, तो यह निश्चित रूप से मामला नहीं है, और डीएओ पसंदीदा इंटरफ़ेस है।

1

@Rik गार्नर: सुनिश्चित नहीं हैं कि, 'बैच' लेकिन

INSERT INTO foo (f1, f2, f3) 
    SELECT * 
    FROM (select top 1 "b1a" AS f1, "b2a" AS f2, "b3a" AS f3 from onerow 
    union all 
    select top 1 "b1b" AS f1, "b2b" AS f2, "b3b" AS f3 from onerow 
    union all 
    select top 1 "b1c" AS f1, "b2c" AS f2, "b3c" AS f3 from onerow) 

निर्माण से क्या मतलब है हालांकि एक ही एसक्यूएल बयान जा रहा है, वास्तव में एक समय में प्रत्येक पंक्ति एक डिस्क डालें (बजाय सब होगा एक बार में) लेकिन एक ही लेनदेन में: आप एक प्रासंगिक बाधा जोड़कर इसका परीक्षण कर सकते हैं

ALTER TABLE foo ADD 
    CONSTRAINT max_two_foo_rows 
     CHECK (2 >= (SELECT COUNT(*) FROM foo AS T2)); 

मान लिया जाये कि तालिका खाली है, ऊपर INSERT INTO..SELECT.. काम करना चाहिए: तथ्य यह है नहीं है, क्योंकि बाधा के बाद पहली पंक्ति के बाद तीनों डाला गया (एक एएनएसआई के उल्लंघन के बजाय डाला गया था जांच की गई एसक्यूएल-9 2 लेकिन यह आपके लिए एमएस एक्सेस है); तथ्य यह है कि तालिका खाली बनी हुई है कि आंतरिक लेनदेन वापस लुढ़का गया था।

@ डेविड डब्ल्यू।फेंटन: आपके पास डीएओ के लिए एक मजबूत व्यक्तिगत वरीयता हो सकती है लेकिन कृपया किसी वैकल्पिक डेटा एक्सेस तकनीक (इस मामले में एडीओ) चुनने के लिए किसी पर भी कठोर न हों, खासकर वेनिला INSERT और जब वे अपनी टिप्पणियों के साथ अर्हता प्राप्त करते हैं, तो " मेरे सिर के ऊपर, कोड करने के लिए यह कुछ की तरह दिखना चाहिए ... "सब के बाद, आप एक CHECK बाधा :)

+0

एमएस ने डीएओ से कुछ विशेषताओं को पीछे छोड़ दिया जब एमएस डीएओ पर एडीओ को बढ़ावा दे रहा था। मेरी आशा है कि अब जेट के अपने निजी संस्करण के उपयोग के साथ, डीएओ को जेट का समर्थन करने वाली हर चीज का समर्थन करने के लिए अपडेट किया जाएगा। –

+0

मुझे भी आशा है कि आप सही हैं। लेकिन जब तक वे ऐसा नहीं करते हैं, तब भी एडीओ को डीएओ में छेद प्लग करने की आवश्यकता होती है: कंप्रेसर, पंक्ति स्तर लॉकिंग इत्यादि के साथ बाधाओं की जांच करें। यदि पोस्टर ने "संदर्भ को स्पष्ट नहीं किया है" तो निश्चित रूप से उत्तर एडीओ या डीएओ में हो सकते हैं, केवल जीवनशैली पसंद, नहीं?:) – onedaywhen

+0

जब आप SQL सर्वर में अपग्रेड करते हैं तो डीएओ फ़ंक्शन कैसे करता है? – JeffO

1

एमएस एक्सेस एक ही एसक्यूएल खिड़की से आने वाले अनेक डालने की अनुमति नहीं है बनाने के लिए डीएओ उपयोग नहीं कर सकते। आप चाहते हैं सम्मिलित, का कहना है कि तालिका में 10 पंक्तियाँ, कहते हैं कि फिल्म (मध्य, mname, mdirector, ....), आप खोलने के लिए एसक्यूएल खिड़कियों की आवश्यकता होगी,

  1. प्रकार 1 stmt, 1 stmt निष्पादित, 1 stmt
  2. प्रकार 2 stmt हटाने के लिए, 2 stmt निष्पादित, 2 stmt हटाना
  3. प्रकार 3 stmt, 3 stmt निष्पादित, 3 stmt हटाना ......

बहुत उबाऊ। इसके बजाय आप ऐसा करके एक्सेल से लाइनों आयात कर सकते हैं:

  1. तालिका नाम है कि आप पहले से ही एक्सेल (आयात संवाद बॉक्स खोला जाता है)
  2. एक्सेल करने के लिए ब्राउज़ से बनाया है
  3. आयात पर राइट क्लिक करें रिकॉर्ड युक्त फ़ाइल तालिका में आयात करने के लिए
  4. "तालिका में रिकॉर्ड की एक प्रति संलग्न करें:" पर क्लिक करें
  5. पर "ठीक है"
  6. आवश्यक तालिका का चयन करें (इस उदाहरण फिल्म में)
  7. क्लिक करें
  8. वर्कशीट उस स्प्रैडशीट में डेटा शामिल
  9. समाप्त

एक्सेल में पूरे डाटासेट तालिका में लोड किया गया है "फिल्म"

1

एमएस एक्सेस भी डेटा संलग्न कर सकते हैं पर क्लिक करें का चयन करें एक साधारण पाठ फ़ाइल से एक तालिका में। सीएसवी मान (मैंने बस सभी को कॉमा को हटाने के लिए सभी बॉक्स को बदलें) और बाहरी डेटा के तहत टेक्स्ट फ़ाइल का चयन करें।

From this: 
INSERT INTO CLASS VALUES('10012','ACCT-211','1','MWF 8:00-8:50 a.m.','BUS311','105'); 
INSERT INTO CLASS VALUES('10013','ACCT-211','2','MWF 9:00-9:50 a.m.','BUS200','105'); 
INSERT INTO CLASS VALUES('10014','ACCT-211','3','TTh 2:30-3:45 p.m.','BUS252','342'); 
To this: 
10012,ACCT-211,1,MWF 8:00-8:50 a.m.,BUS311,105 
10013,ACCT-211,2,MWF 9:00-9:50 a.m.,BUS200,105 
10014,ACCT-211,3,TTh 2:30-3:45 p.m.,BUS252,342 
संबंधित मुद्दे