excel - कई मान पैदा करने के लिए सशर्त आंतरिक प्रवेश वक्तव्य(VBA / SQL)




access-vba access (3)

मैं VBA / SQL के लिए काफी नया हूँ और मैं एक सशर्त आंतरिक में शामिल होने की कोशिश कर रहा हूं।

मेरे पास आम में एक स्तंभ ("सीआरएम" और "कोडसीआरएम") के साथ दो तालिकाओं हैं और मैं तालिका 2 ("फ्लक्स") में कुछ ट्रिगर हो जाने पर तालिका 2 ("डेस्क") से ईमेल पता प्राप्त करना चाहूंगा। एक स्वचालित ईमेल में जोड़ने के लिए

Dim StrDestinataire As String
Select Case Strtable
   Case "Flux", "GAFIJOUR"

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim Y As String
    Dim sSql As String

    Set cn = CurrentProject.Connection


    sSql = "Select AddMailCRM from Desks Inner Join Flux on Desks.CODECRM = Flux.CRM WHERE Flux.CODEBLOCAGE = '101'"

    Set rs = cn.Execute(sSql)

    If Not rs.BOF And Not rs.EOF Then
        Y = rs.Fields("AddMailCRM").Value
    End If


    StrDestinataire =  Y

    cn.Close

सब कुछ महान काम करता है सिवाय इसके कि यह ईमेल पते के लिए एक से अधिक मान लौटना चाहिए। कोई सुराग?

धन्यवाद


Answers

हल किया।

Dim StrDestinataire As String
Select Case Strtable
   Case "Flux", "GAFIJOUR"

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim Y As String
    Dim sSql As String

    Set cn = CurrentProject.Connection


    sSql = "Select AddMailCRM from Desks Inner Join Flux on Desks.CODECRM = Flux.CRM WHERE Flux.CODEBLOCAGE = '101'"

    Set rs = cn.Execute(sSql)

    If Not rs.BOF And Not rs.EOF Then
        Y = rs.Fields("AddMailCRM").Value
    End If


    StrDestinataire =  Y

    cn.Close

ऐसे तीन कीवर्ड हैं जो भ्रम पैदा कर सकते हैं:

एसक्यूएल में चयन करें

परिणामस्वरूप रिकॉर्डसेट में कॉलम निर्धारित करता है। यदि आपका एसक्यूएल स्टेटमेंट का SELECT Name, Number FROM Employees , का चयन करें भाग आपको बताता है कि परिणामी अभिलेखों में नाम और संख्या वाले दो कॉलम होंगे।

VBA में केस चुनें

सिलेक्ट करें केस एक प्रोग्रामिंग है जो कंडीशंस के लिए है। आप इसका प्रयोग तब करेंगे जब आप If..ElseIf..ईल्स् कथन का एक गुच्छा का उपयोग नहीं करना चाहते हैं, लेकिन आप जो कुछ भी कर सकते हैं यदि आप केस चुनें के साथ कर सकते हैं

Select Case A
    Case "Flux"
        Execute these VBA statements when the variable A = Flux
    Case "Capacitor"
        Execute these statements when A = Capacitor
    Case Else
        Execute these statements when A is neither Flux nor Capacitor
End Select

एसक्यूएल में मामला

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

SELECT Name, CASE WHEN Number = 1 THEN 'One' ELSE 'Two' END MyNum FROM Employees

यदि आप इस रिकॉर्डसेट को निष्पादित करते हैं, तो आपको दो कॉलम (नाम, माइनम) मिलता है। MyNum फ़ील्ड में टेक्स्ट One जब उस नंबर के लिए नंबर 1 होता है और टेक्स्ट Two अगर नंबर 1 पर कुछ भी होता है।

recordsets

आपके पास एक्सेल और एक्सेस टैग्स दोनों हैं, इसलिए मैं यह मानने जा रहा हूं कि आप उन दोनों में से एक में ADO का उपयोग कर रहे हैं। तुम्हारा बयान

Y = Select email from table2 Inner Join table1 on table2.Crm = table1.Crm WHERE table1.Code = 1

कुछ भी नहीं करता - यह संकलन नहीं करेगा मान लीजिए आप चाहते हैं कि वे चर, Y , जिसमें आपको उस एसक्यूएल स्टेटमेंट को अंजाम दिया गया हो, उस ईमेल को शामिल किया जाए।

Sub GetEmail()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim Y As String
    Dim sSql As String

    Set cn = New ADODB.Connection
    cn.Open "MyConnectionStringGoesHere"

    sSql = "Select email from table2 Inner Join table1 on table2.Crm = table1.Crm WHERE table1.Code = 1"

    Set rs = cn.Execute(sSql)

    If Not rs.BOF And Not rs.EOF Then
        Y = rs.Fields("email").Value
    End If

End Sub

इस मामले में मुझे एक रिकॉर्डसेट बनाने और एक विशिष्ट कनेक्शन के लिए रिकॉर्डसेट निष्पादित करना होगा। संभवतया इसमें शामिल होने और WHERE खंड यह सुनिश्चित करता है कि यह केवल एक रिकॉर्ड वापस करेगा। लेकिन अगर यह अधिक देता है, तो यह उदाहरण केवल पहले रिकॉर्ड से ईमेल का उपयोग करेगा।

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


हम डुप्लिकेट मानों को कैसे गिन सकते हैं ?? या तो इसे 2 गुना या 2 से अधिक बार दोहराया जाता है। बस उन्हें समझें, समूह के अनुसार नहीं।

की तरह सरल

select COUNT(distinct col_01) from Table_01




sql excel vba access-vba access