2012-01-24 121 views
5

Tôi khá mới với VBA và tôi hy vọng một người nào đó có thể giúp tôi với một chút mã cuối cùng.Macro VBA trong Excel để chạy câu lệnh Chèn SQL

Tôi đang cố gắng lấy các ô từ bảng tính và thêm chúng vào bảng SQL nhưng tôi đang chạy truy vấn SQL. Đây là mã tôi có cho đến nay.

 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 

Lỗi phát sinh khi tôi cố gắng chạy câu lệnh SQL tôi có cần tạo đối tượng hoặc phương thức cho điều này hay gì đó không.

Bất kỳ trợ giúp nào về điều này thực sự sẽ được đánh giá cao cảm ơn!

+1

Bạn đang gặp phải lỗi nào? 'DoCmd'? Đây là một đối tượng Access, không phải là đối tượng Excel. –

+0

Bạn đang gặp phải lỗi nào? DoCmd? Đây là một đối tượng Access, không phải là đối tượng Excel. - Olivier Jacot-Descombes 1 phút trước Hey Olivier no Tôi gặp lỗi Run-Time '424': Yêu cầu đối tượng Cảm ơn bạn đã trả lời nhanh – user1167046

+2

Thực hiện 'debug.print strSQL' (sau khi bạn đã xây dựng nó, nhưng trước khi bạn thực thi). Sau đó sao chép chuỗi nó sẽ xuất ra cửa sổ ngay lập tức. Sau đó dán truy vấn vào công cụ SQL yêu thích của bạn và chạy nó. Tôi nghĩ rằng ý tưởng tốt nhất là để có được một INSERT INTO làm việc đầu tiên, và sau đó sửa đổi VBA của bạn để nó phù hợp. Hi vọng điêu nay co ich. – jon

Trả lời

0

Look this article

nó là một cách dễ dàng để nhập dữ liệu từ Excel sang SQL với ADO.

[của]

1

tôi đoán đó là dòng này:

rs.Source = Sql

Thuộc tính Nguồn chấp nhận một IStream cũng như một chuỗi, như vậy kể từ Sql isn' t tuyên bố bất cứ nơi nào, nó hoàn toàn là một đối tượng với một giá trị của Không có gì.

Dự đoán tiếp theo của tôi là một vài dòng bên dưới, bảng tính được chỉ định ở đâu? Tất nhiên, tất cả điều này sẽ dễ dàng hơn nếu chúng ta biết dòng lỗi nào xảy ra trên ... vẫn dễ dàng hơn nếu bạn đặt điểm ngắt và bước vào mã - bạn không cần phải đổ giá trị biến vào tệp , bạn có thể xem chúng tương tác trong trình gỡ lỗi.

1

Thay vì sử dụng câu lệnh INSERT, tôi khuyên bạn nên tạo một thủ tục lưu sẵn và chuyển các giá trị vào nó bằng đối tượng ADOBO.Command.