Макрос VBA в Excel для запуска оператора SQL Insert - PullRequest
5 голосов
/ 24 января 2012

Эй, я новичок в VBA, и я надеялся, что кто-нибудь может помочь мне с последним кусочком кода.

Я пытаюсь взять ячейки из электронной таблицы и добавить их в таблицу 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

Ошибка возникает, когда я пытаюсь выполнить инструкцию SQL, нужно ли мне создавать объект или метод для этого или чего-то еще.

Любая помощь с этим будет очень признательна, спасибо!

Ответы [ 3 ]

1 голос
/ 03 марта 2012

Полагаю, это следующая строка:

rs.Source = Sql

Свойство Source принимает как IStream, так и строку, поэтому, поскольку Sql нигде не объявлен, оннеявно объект со значением Nothing.

Мое следующее предположение - пара строк ниже того, где назначается wsheet?

Конечно, все это было бы проще, если бы мы знали, какиестрока, в которой происходит ошибка ... еще проще, если вы установите точку останова и войдете в код - вам не нужно записывать значения переменных в файл, вы можете просматривать их в интерактивном режиме в отладчике.

1 голос
/ 20 марта 2012

Вместо использования оператора INSERT я бы предложил создать хранимую процедуру и передать в нее значения с помощью объекта ADOBO.Command.

0 голосов
/ 25 января 2012

Смотри эту статью

это простой способ импортировать данные из Excel в SQl с помощью ADO.

[] в

...