2012-01-24 12 views
5

अरे मैं वीबीए के लिए काफी नया हूं और मुझे आशा है कि कोई मुझे अंतिम कोड के साथ मदद कर सकता है।एक्सेल में वीबीए मैक्रो एसक्यूएल सम्मिलन कथन चलाने के लिए

मैं स्प्रेडशीट से सेल्स लेने और उन्हें SQL तालिका में जोड़ने की कोशिश कर रहा हूं लेकिन मेरे पास SQL ​​कथन चलाने वाला ट्रबल है। मेरे पास अब तक का कोड है।

 Private Sub ConnectDB() 

     Dim oConn As Object 

Set oConn = CreateObject("ADODB.Connection") 
oConn.Open = "DRIVER={SQL Server};" & _ 
"SERVER=SERVER02;" & _ 
"DATABASE=platform;" & _ 
"USER=5y5t3mus3r;" & _ 
"PASSWORD=*******;" & _ 
"Option=3;" 
If oConn.State = adStateOpen Then 
    MsgBox "Welcome to Database!" 
Else 
MsgBox "Sorry No Database Access." 
End If 


Dim rs As ADODB.Recordset 
Dim strSQL As String 
Dim Company As String 
Dim Address As String 
Dim Address1 As String 
Dim Address2 As String 
Dim County As String 
Dim Contact As String 
Dim Phone As String 
Dim Fax As String 


    strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ 
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 


Sheets("wsheet").Activate 

Set rs = New ADODB.Recordset 
rs.Source = Sql 


    With wsheet 


     MyFile = "C:\Users\Ryan.ICS\Documents\Documents\InsertStatement.txt" 
     fnum = FreeFile() 
     Open MyFile For Output As fnum 


     myRow = 2 
      myCol = 4 

      For myRow = 2 To InputBox(Prompt:="What is the last row of data?", Title:="Data Row", Default:=1) 

      myCol = 4 


Company = ActiveSheet.Cells(myRow, myCol) 
myCol = myCol + 1 
Address = ActiveSheet.Cells(myRow, myCol) 
myCol = myCol + 1 
Address1 = ActiveSheet.Cells(myRow, myCol) 
myCol = myCol + 1 
Address2 = ActiveSheet.Cells(myRow, myCol) 
myCol = myCol + 1 
Address3 = ActiveSheet.Cells(myRow, myCol) 
myCol = myCol + 2 
Phone = ActiveSheet.Cells(myRow, myCol) 
myCol = myCol + 1 
Fax = ActiveSheet.Cells(myRow, myCol) 
myCol = myCol + 1 


     strSQL = "INSERT INTO [sandbox].[5y5t3mus3r].[ryan] (Organisation, Address1, Address2, TownCity, County, Telephone, Fax) VALUES('" & Company & "', '" & Address & "', '" & Address1 & "', '" & Address2 & "', '" & Address3 & "', " & Phone & ", " & Fax & ");" 

    Print #fnum, strSQL 

    DoCmd.RunSQL strSQL ***Here is where I am haveing an error it will not run the SQL command.**** 

     oConn.Execute strSQL **** here is another tag I tried in a number of different ways but i still couldnt get the SQL statement to run 



    Next 


     End With 

      ' Find out how many rows were affected by the Insert. 
     Set rs = oConn.Execute("Select @@rowcount") 
     ' Display the first field in the recordset. 
      MsgBox rs(0) & " rows inserted" 

      oConn.Close 



      Set rs = Nothing 
      Set oConn = Nothing 

       Close #fnum 


      End Sub 

     Function esc(txt As String) 

    esc = Trim(Replace(txt, "'", "\'")) 

     End Function 

त्रुटि जब मैं एसक्यूएल बयान को चलाने के लिए कोशिश कर रहा हूँ उठता है मैं इस या कुछ और के लिए एक वस्तु या विधि बनाने की जरूरत है।

इसके साथ किसी भी मदद की सराहना की जाएगी धन्यवाद!

+1

आपको कौन सी त्रुटि मिल रही है? 'DoCmd'? यह एक एक्सेस ऑब्जेक्ट है, एक्सेल ऑब्जेक्ट नहीं। –

+0

आपको कौन सी त्रुटि मिल रही है? DoCmd? यह एक एक्सेस ऑब्जेक्ट है, एक्सेल ऑब्जेक्ट नहीं। - ओलिवियर जैकोट-डेस्कोम्ब्स 1 मिनट पहले हे ओलिवियर नो मुझे रन-टाइम त्रुटि '424' मिलती है: ऑब्जेक्ट आवश्यक आपके त्वरित उत्तर के लिए धन्यवाद – user1167046

+2

एक 'debug.print strSQL' करें (इसे बनाने के बाद, लेकिन निष्पादित करने से पहले)। फिर उस स्ट्रिंग की प्रतिलिपि बनाएँ जो इसे तत्काल विंडो में आउटपुट करेगा। फिर क्वेरी को अपने पसंदीदा SQL टूल में पेस्ट करें और इसे चलाएं। मुझे लगता है कि सबसे अच्छा विचार है कि पहले एक काम करने वाला इंसर्ट प्राप्त करें, और फिर अपने वीबीए को संशोधित करें ताकि यह मेल खा सके। उम्मीद है की यह मदद करेगा। – jon

उत्तर

0

देखो this article

यह एक्सेल से डेटा आयात करने एडीओ साथ एसक्यूएल करने के लिए एक आसान तरीका है।

[] के

1

मुझे लगता है कि चाहते हैं यह इस लाइन है: इसलिए क्योंकि Sql isn,

rs.Source = Sql

स्रोत संपत्ति एक IStream के साथ-साथ एक स्ट्रिंग को स्वीकार करता है ' टी कहीं भी घोषित नहीं किया गया है, यह निश्चित रूप से कुछ भी नहीं है।

मेरा अगला अनुमान नीचे दी गई कुछ पंक्तियां हैं, जहां वाइटशीट असाइन की जाती है?

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

1

INSERT कथन का उपयोग करने के बजाय, मैं एक संग्रहित प्रक्रिया बनाने और ADOBO.Command ऑब्जेक्ट का उपयोग करके मूल्यों को पारित करने का सुझाव दूंगा।