2012-01-24 26 views
5

Hola soy bastante nuevo para VBA y esperaba que alguien me pudiera ayudar con el último código.macro de VBA en Excel para ejecutar la declaración Insertar SQL

Estoy tratando de tomar celdas de una hoja de cálculo y agregarlas a una tabla SQL, pero estoy teniendo trubble ejecutando la instrucción SQL. Aquí está el código que tengo hasta ahora.

 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 

El error surge cuando estoy tratando de ejecutar la instrucción SQL necesito para crear un objeto o método para esto o algo así.

Cualquier ayuda con esto sería realmente apreciada gracias!

+1

¿Qué error estás recibiendo? 'DoCmd'? Este es un objeto de acceso, no un objeto de Excel. –

+0

¿Qué error estás recibiendo? DoCmd? Este es un objeto de acceso, no un objeto de Excel. - Olivier Jacot-Descombes Hace 1 minuto Hey Olivier no Obtuve un error '424' en tiempo de ejecución: Objeto requerido Gracias por su respuesta rápida – user1167046

+2

Haga un 'debug.print strSQL' (después de haberlo construido, pero antes de ejecutarlo) Luego copie la cadena que saldrá a la ventana inmediata. A continuación, pegue la consulta en su herramienta SQL favorita y ejecútela. Creo que la mejor idea es obtener un INSERT INTO en funcionamiento primero, y luego modificar tu VBA para que coincida. Espero que esto ayude. – jon

Respuesta

0

Look this article

es una manera fácil de importar datos de Excel a SQL con ADO.

[de]

1

supongo que es esta línea:

rs.Source = SQL

La propiedad Fuente acepta un IStream, así como una cadena, por lo que desde SQL ISN' t declarado en cualquier lugar, es implícitamente un objeto con un valor de Nada.

Mi próxima suposición es un par de líneas debajo de eso, ¿dónde se asigna wsheet?

Por supuesto, todo esto sería más fácil si supiéramos en qué línea se produce el error ... más fácil aún si establece un punto de interrupción y entra en el código - no necesita volcar valores de variables en el archivo , puedes verlos interactivamente en el depurador.

1

En lugar de usar la instrucción INSERT, sugeriría crear un procedimiento almacenado y pasarle valores utilizando el objeto ADOBO.Command.

Cuestiones relacionadas