उपरोक्त मेरी टिप्पणी और यावर द्वारा दिए गए उत्तर के अनुरूप, मुझे पता नहीं है कि पास थ्रू प्रश्न हमेशा संपादन योग्य/अद्यतन योग्य होते हैं। वे इस अर्थ में संपादन योग्य हैं कि आप एक सेव पास थ्रू क्वेरी ऑब्जेक्ट को संपादित कर सकते हैं, लेकिन मुझे विश्वास नहीं है कि पास थ्रू क्वेरी के लिए संपादन योग्य रिकॉर्डसेट बनाना संभव है।
एक्सेस को गैर-एक्सेस डेटा स्रोत से कनेक्ट करने के लिए मूल रूप से दो तरीके हैं।
पहली विधि, और सबसे लोकप्रिय, कुछ प्रकार की लिंक्ड टेबल का उपयोग करना है, आमतौर पर ओडीबीसी लिंक्ड टेबल। एमएस एक्सेस के साथ ओडीबीसी लिंक्ड टेबल का उपयोग करने के कई तरीके हैं लेकिन अधिकांश डेवलपर्स जो पसंद करते हैं वह डीएसएन-कम कनेक्शन का उपयोग करना है जो आपके एप्लिकेशन के शुरू होने पर रीफ्रेश या पुनर्निर्मित (हटाए गए और पुन:कनेक्ट) हो जाते हैं। ध्यान रखें कि जब आप ODBC का उपयोग करते हैं, तब भी आप DAO का उपयोग कर रहे होते हैं। डीएओ एमएस एक्सेस में निर्मित डिफ़ॉल्ट डेटा एक्सेस ऑब्जेक्ट है और यहां तक कि जब आप विशेष रूप से कोई डीएओ कोड नहीं लिखते हैं, तब भी एमएस एक्सेस आपके फॉर्म, रिपोर्ट और प्रश्नों को आपके डेटा स्रोत से जोड़ने के लिए हुड के तहत डीएओ का उपयोग कर रहा है। ओडीबीसी के मामले में, आप वास्तव में काम पर दो डेटा एक्सेस लेयर, डीएओ और ओडीबीसी रखते हैं। लेकिन आप ODBC/DAO का उपयोग बहुत अच्छे प्रदर्शन के साथ और बिना कोड लिखे (ODBC लिंक्ड टेबल को बनाए रखने के अलावा) कर सकते हैं।
दूसरी विधि एडीओ का उपयोग करना है। आम धारणा के विपरीत, इसका मतलब यह नहीं है कि आपको अनबाउंड फॉर्म का उपयोग करना होगा। लेकिन इसका मतलब यह है कि आपको JET/DAO/MSAccess या DAO/ODBC/SSQL सर्वर का उपयोग करने की तुलना में अधिक कोड लिखना होगा। आपको अपने डेटाबेस से और एडीओ रिकॉर्डसेट में रिकॉर्ड लाने के लिए कोड लिखना होगा और फिर अपने फॉर्म को उस रिकॉर्डसेट से बांधने के लिए कोड का उपयोग करना होगा। आपको चाइल्ड फॉर्म को पैरेंट फॉर्म के साथ सिंक में रखने के लिए, नए रिकॉर्ड्स बनने पर चाइल्ड फॉर्म में विदेशी कुंजी डालने के लिए, और कई अन्य चीजों के लिए भी फॉर्म के अंतर्निर्मित फ़िल्टरिंग और सॉर्टिंग के रूप में फ़िल्टरिंग और सॉर्टिंग के लिए अधिक कोड लिखना होगा। विकल्प आमतौर पर एडीओ रिकॉर्डसेट के साथ काम नहीं करते हैं। एडीओ एसक्यूएल सर्वर से बात करने का एक शानदार तरीका है क्योंकि यह वास्तव में आपको बहुत अधिक नियंत्रण देता है, लेकिन क्योंकि यह कोड गहन है, और क्योंकि ओडीबीसी लिंक्ड टेबल इतनी अच्छी तरह से काम करते हैं, अधिकांश डेवलपर्स एडीओ का उपयोग करने की अनुशंसा नहीं करते हैं जब तक कि ऐसा करने का कोई अन्य तरीका न हो तुम करना चाहते हो। इसका एक उदाहरण संग्रहित प्रक्रियाओं को बुला रहा है। मेरा मानना है कि पास थ्रू क्वेरीज़ का उपयोग संग्रहित प्रक्रियाओं को कॉल करने के लिए किया जा सकता है लेकिन मुझे यह भी लगता है कि वहां कुछ सीमाएं हैं (जैसे पैरामीटर्स का उपयोग करना)। मेरा मानना है कि ज्यादातर मामलों में डेवलपर्स संग्रहित प्रक्रियाओं को कॉल करने के लिए एडीओ का उपयोग करते हैं। मैं एडीओ का बहुत उपयोग करता हूं लेकिन मैं संग्रहित प्रक्रियाओं का अधिक उपयोग नहीं करता (अभी तक नहीं) इसलिए मुझे उस पर बहुत अधिक जानकारी नहीं है।
एक और बात ध्यान देने योग्य है कि ओडीबीसी के साथ डीएओ "आलसी लोडिंग" का उपयोग करता है, लेकिन एडीओ आपको उन सभी डेटा को खींचने के लिए मजबूर करता है जो बहुत समय लेने वाले हो सकते हैं और यदि आपके पास> लाखों पंक्तियाँ हैं तो बहुत अधिक मेमोरी का उपभोग करें। या फिर आपको किसी प्रकार के पेजिंग को लागू करने की आवश्यकता होगी।
एक एकल डीएसएन-कम ओडीबीसी लिंक्ड टेबल बनाने के लिए मेरा अपना कार्य नीचे है। यदि आप एक्सेस करने के लिए नए हैं और वीबीए में नए हैं तो शायद यह आपके लिए बहुत मायने नहीं रखेगा। कोड किसी भी तालिका परिभाषा को हटा देता है जो उस तालिका के लिए पहले से मौजूद है जिसे आप लिंक करने का प्रयास कर रहे हैं, जो थोड़ा खतरनाक है क्योंकि मेरा मानना है कि यह एक स्थानीय, गैर-लिंक की गई तालिका को हटा सकता है जिसे आप नहीं चाहते हैं। यहां त्रुटि प्रबंधन वास्तव में गति के लिए नहीं है, लेकिन अधिकांश ऑनलाइन उदाहरण कोड में इसमें शामिल जटिलताओं के कारण इसमें अच्छी त्रुटि प्रबंधन नहीं है। किसी लिंक की गई तालिका पर प्राथमिक कुंजी अनुक्रमणिका बनाना हमेशा आवश्यक नहीं होता है। मैंने इसे अभी अपने कार्य में बनाया है क्योंकि मुझे एक विशिष्ट परियोजना के लिए एक बार इसकी आवश्यकता थी इसलिए अब मैं इसे वहां छोड़ देता हूं और इसका उपयोग बेहतर या बदतर के लिए करता हूं।
इस कोड का उचित उपयोग करने के लिए आपको वास्तव में अपनी सभी लिंक की गई तालिकाओं की एक सूची कहीं और उस सूची के माध्यम से पुनरावृत्त करने की आवश्यकता है और प्रत्येक तालिका के लिए इस फ़ंक्शन को कॉल करें। यह फ़ंक्शन आपको SQL सर्वर में इसके वास्तविक नाम से भिन्न नाम का उपयोग करके तालिका को लिंक करने की अनुमति देता है। आपके पास एक वैध ODBC कनेक्शन स्ट्रिंग बनाने का एक तरीका भी होना चाहिए जिसे इस फ़ंक्शन में भी पास किया जाना चाहिए।
Private Sub LinkODBCTable(sSourceTableName As String, _
sLocalTableName As String, _
sPrimaryKeyField As String, _
sConString As String)
Dim dbCurrent As DAO.Database
Dim tdfCurrent As DAO.TableDef
Set dbCurrent = DBEngine.Workspaces(0).Databases(0)
On Error Resume Next
'Be Careful, this could delete a local, non-linked table.
dbCurrent.TableDefs.Delete sLocalTableName
If Err.Number <> 0 Then
If Err.Number = 3011 Then
'Table does not exist
Else
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
End If
Err.Clear
End If
On Error GoTo 0
Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
tdfCurrent.Connect = sConString
tdfCurrent.sourceTableName = sSourceTableName
dbCurrent.TableDefs.Append tdfCurrent
On Error Resume Next
If sPrimaryKeyField <> "" Then
dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sPrimaryKeyField & ")", dbFailOnError
If Err.Number <> 0 Then
If Err.Number = 3283 Then
'Primary Key Already Exists
Else
MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
End If
Err.Clear
End If
End If
Set tdfCurrent = Nothing
Set dbCurrent = Nothing
End Sub
डीएओ, एडीओ, पास थ्रू क्वेरीज़, एसक्यूएल सर्वर, आदि से संबंधित कुछ बहुत अच्छे संसाधन हैं जिन्हें आपको देखना चाहिए:
http://technet.microsoft.com /en-us/library/bb188204%28v=sql.90%29.aspx
http://www.utteraccess.com/wiki/Choosing_between_DAO_and_ADO
एडीओ रिकॉर्डसेट में फॉर्म को बाध्य करने का एक उदाहरण यहां दिया गया है। हालांकि यह थोड़ा भ्रामक है क्योंकि वैश्विक कनेक्शन ऑब्जेक्ट होना सबसे अच्छा है जो एप्लिकेशन के रनटाइम के दौरान खुला रहता है। यह आपको एडीओ रिकॉर्डसेट का उपयोग करने की अनुमति देता है जो स्वचालित रूप से अद्यतन करने योग्य होते हैं। इस अभ्यास का उपयोग करने से आपका रिकॉर्डसेट एक प्रपत्र स्तरीय वस्तु भी बन सकता है।
http://msdn.microsoft .com/en-us/library/office/bb243828%28v=office.12%29.aspx