मेरे पास एक SQL क्वेरी है जिसे मैं ऑब्जेक्ट विधि के रूप में ctrl का उपयोग करके दो अलग-अलग रूपों से कॉल कर रहा हूं। यह ठीक काम करता है, लेकिन जब मैं इसे एक क्लिक इवेंट से चलाता हूं तो यह जो भी फॉर्म वर्तमान में लोड नहीं होता है उसे भी खोल देगा। क्वेरी मेरे इच्छित परिणाम देता है, यह केवल एक ही समय में दोनों रूपों में करता है, भले ही लोड किया गया हो।

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

मुझे पता है कि इस मुद्दे का एक हिस्सा or कथन का उपयोग करके मेरी क्वेरी है जो दोनों रूपों के मूल्यों को संदर्भित करता है, लेकिन मुझे यकीन नहीं है कि सक्रिय रूप को संदर्भित करने के लिए इसे कैसे बदला जाए।

Attendance और reporting दो UserForms के नाम हैं जो वर्तमान में इस क्वेरी को कॉल कर रहे हैं। उन दोनों में Team नाम का कम्बोबॉक्स नियंत्रण है। मैंने सक्रियफॉर्म इत्यादि की कोशिश की है, लेकिन मुझे इसे काम करने का कोई तरीका नहीं दिख रहा है।

Sub agents(ctrl As Object)
    database_connect
    Dim SQLStr As String
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    Dim Counter As Long
    SQLStr="select distinct[Agentname] from dbo.[Attendance] Where [Team]='" & _
        attendance.Team.Value & "' or [Team] ='" & Reporting.Team.Value & "'"
    If appconn.State = 0 Then
        Call database_connect
    End If
    rs.Open SQLStr, appconn, adOpenStatic
    With ctrl
        Do
            .AddItem rs![Agentname]
            rs.MoveNext
        Loop Until rs.EOF
    End With
    rs.Close
    database_Disconnect
    Set rs = Nothing
    Exit Sub
End Sub
0
Jb83 26 जुलाई 2018, 17:44
तो आपका प्रश्न एसक्यूएल के बारे में नहीं है बल्कि उपयोगकर्ताफॉर्म से डेटा कैसे पढ़ा जाए? उदाहरण के लिए यहां देखें: stackoverflow.com/a/5621996/7599798
 – 
FunThomas
26 जुलाई 2018, 17:52
1
और, एक सलाह के रूप में: अपना SQL-स्टेटमेंट न बदलें बल्कि ADODB.Parameter का उपयोग करें, देखें stackoverflow.com/a/10353908 /7599798
 – 
FunThomas
26 जुलाई 2018, 17:53
क्या आप वाकई Microsoft Word में ऐसा कर रहे हैं? क्या आप कुछ और पृष्ठभूमि और स्पष्टीकरण प्रदान कर सकते हैं कि आप क्या करने की कोशिश कर रहे हैं? मुझे लगता है कि जानकारी का एक महत्वपूर्ण हिस्सा गायब है।
 – 
ashleedawg
26 जुलाई 2018, 17:54
हां, मैं इस प्रोग्राम को वर्ड में वीबीए में बना रहा हूं। यह क्वेरी किसी टीम को sql तालिका से असाइन किए गए एजेंटों की सूची खींचती है। मैं जिस मूल्य में गुजर रहा हूं वह सभी टीमों वाली ड्रॉपडाउन सूची से चयनित टीम है। हालांकि एक समय में केवल एक फॉर्म लोड होता है, दो अलग-अलग फॉर्म में टीमों की एक सूची होती है, और किसी भी फॉर्म पर आप एक टीम का चयन कर सकते हैं और एजेंटों की सूची प्राप्त कर सकते हैं।
 – 
Jb83
26 जुलाई 2018, 17:57

2 जवाब

1) नियंत्रणों को संदर्भित करने के लिए सबसे पहले आपको फॉर्म लोड करना होगा।

2) आप सबसे अजीब तरीके से नियंत्रण की बात कर रहे हैं। इस URL की समीक्षा करें और सहेजें http://access.mvps.org/access/forms/frm0031 .htm

3) यदि एक फॉर्म बंद है तो आपकी क्वेरी हमेशा कुछ भी नहीं लौटा सकती है। क्या यह वांछित आउटपुट है?

0
Doug Coats 26 जुलाई 2018, 17:47
क्वेरी ठीक वही लौटाती है जो मैं चाहता हूं। मुद्दा यह है कि यदि उपस्थिति प्रपत्र वर्तमान में लोड किया गया है, तो क्वेरी चलाने से रिपोर्टिंग प्रपत्र भी लोड हो जाएगा और फिर परिणामों को दोनों रूपों पर नियंत्रण में आउटपुट कर देगा। मुझे परिणामों को वर्तमान में लोड किए गए फॉर्म पर केवल लोड करने की आवश्यकता है।
 – 
Jb83
26 जुलाई 2018, 17:49
ऐसा प्रतीत होता है कि आप कोड में क्या हो रहा है इसकी पूरी तस्वीर प्रदान नहीं कर रहे हैं। उप को क्या मूल्य पारित किया जा रहा है? क्या हम उस मॉड्यूल को देख सकते हैं जो इसे कॉल करता है? मुझे लगने लगा है कि यह मुद्दा आपके द्वारा प्रदान की गई सामग्री में 100% समाहित नहीं है
 – 
Doug Coats
26 जुलाई 2018, 17:52
पारित किए जा रहे मान या तो उपस्थिति हैं। टीम। मूल्य या रिपोर्टिंग। टीम। मूल्य। उपस्थिति फॉर्म और रिपोर्टिंग फॉर्म दोनों में एक ड्रॉपडाउन सूची होती है जिसे टीम कहा जाता है। तो मूल्य उस सूची में से जो भी टीम चुनी जाती है। अगर मुझे पता होता कि एक्टिव फॉर्म को कैसे रेफर करना है तो वैल्यू एक्टिवफॉर्म.टीम.वैल्यू जैसा कुछ होगा। यही लक्ष्य है।
 – 
Jb83
26 जुलाई 2018, 18:23
@ डौग कोट वह पृष्ठ एक्सेस का उपयोग करने वाले लोगों के लिए प्रतीत होता है, मैं वर्ड का उपयोग कर रहा हूं। साथ ही, मैं नहीं देखता कि वहां पर वर्तमान में सक्रिय फॉर्म का संदर्भ कैसे दिया जाए।
 – 
Jb83
26 जुलाई 2018, 18:29
stackoverflow.com/questions/7148185 /… ऐसा लगता है कि आपको यह पता लगाने की आवश्यकता है कि स्ट्रिंग चर का उपयोग करके फ़ॉर्म को गतिशील रूप से कैसे संदर्भित किया जाए
 – 
Doug Coats
26 जुलाई 2018, 18:33

किसी के लिए भी जो इसे कुछ इसी तरह की तलाश में ढूंढ सकता है, यह वह समाधान है जिसका मैंने उपयोग किया था।

मैंने यह जांचने के लिए एक फ़ंक्शन का उपयोग किया है कि कोई उपयोगकर्ताफॉर्म लोड है या नहीं।

Public Function IsLoaded(formName As String) As Boolean
Dim frm As Object
For Each frm In VBA.UserForms
If frm.Name = formName Then
    IsLoaded = True
    Exit Function
End If
Next frm
IsLoaded = False
End Function

फिर मेरे उपरोक्त कोड को इस तरह समायोजित किया

database_connect
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim Counter As Long
If IsLoaded("Attendance") Then
SQLStr = "select distinct[Agentname] from dbo.[Attendance] Where [Team] ='" & attendance.Team.value & "'"
ElseIf IsLoaded("Reporting") Then
SQLStr = "select distinct[Agentname] from dbo.[Attendance] Where [Team] ='" & Reporting.Team.value & "'"
End If
If appconn.State = 0 Then
Call database_connect
End If
rs.Open SQLStr, appconn, adOpenStatic
With ctrl
Do
.AddItem rs![Agentname]
rs.MoveNext
Loop Until rs.EOF
End With
rs.Close
database_Disconnect
Set rs = Nothing
Exit Sub

अब यह एक आकर्षण की तरह काम करता है!

0
Jb83 26 जुलाई 2018, 19:22