Macro VBA dans Excel pour Exécuter instruction SQL Insert
Hey im tout à fait nouveau pour VBA et j'espérais que quelqu'un pourrait m'aider avec le dernier code.
Je suis en train de prendre des cellules d'une feuille de calcul et les ajouter à une table SQL mais j'ai trubble de l'exécution de l'instruction SQL. Voici le code que j'ai jusqu'ici.
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'erreur se produit lorsque j'essaie d'exécuter l'instruction SQL ai-je besoin de créer un objet ou une méthode pour ceci ou quelque chose.
L'aide de ce serait vraiment apprécié merci!
Quelle erreur avez-vous?
Quelle erreur avez-vous? DoCmd? C'est un Accès à un objet, pas un objet Excel. – Olivier Jacot-Descombes 1 min et il y a Hey Olivier non, je reçois une erreur d'Exécution '424': Objet requis Merci pour votre réponse rapide
Faire un
Désolé pour la réponse tardive, j'ai dû passer à un autre travail. L'instruction insert fonctionne maintenant, j'ai eu une feuille que j'ai écrit, mais je l'ai réparé complètement, mais toujours obtenir la même zone. N'ai-je pas besoin de faire appel d'une Requête SQL Analizer ou quelque chose?
Le
DoCmd
? C'est un Accès à un objet, pas un objet Excel.Quelle erreur avez-vous? DoCmd? C'est un Accès à un objet, pas un objet Excel. – Olivier Jacot-Descombes 1 min et il y a Hey Olivier non, je reçois une erreur d'Exécution '424': Objet requis Merci pour votre réponse rapide
Faire un
debug.print strSQL
(après que vous avez construit, mais avant de vous exécuter). Ensuite, copiez la chaîne, il sera affiché dans la fenêtre exécution. Puis coller la requête dans votre favori SQL outil et l'exécuter. Je pense que la meilleure idée est d'obtenir un travail INSÉREZ EN premier, et ensuite modifier votre VBA afin qu'il corresponde. Espérons que cette aide.Désolé pour la réponse tardive, j'ai dû passer à un autre travail. L'instruction insert fonctionne maintenant, j'ai eu une feuille que j'ai écrit, mais je l'ai réparé complètement, mais toujours obtenir la même zone. N'ai-je pas besoin de faire appel d'une Requête SQL Analizer ou quelque chose?
Le
;
à la fin de la chaîne doit être à l'origine d'une erreur, mais il ne devrait pas être un 424 object required
erreur. Votre connexion snytax et l'exécution de la requête de la syntaxe semble bien pour moi.
OriginalL'auteur user1167046 | 2012-01-24
Vous devez vous connecter pour publier un commentaire.
Je suppose que c'est cette ligne:
rs.Source = Sql
La Source de la propriété accepte un IStream ainsi que d'une chaîne, donc depuis Sql n'est pas déclaré, n'importe où, il est implicitement un objet avec une valeur de Rien.
Mon prochain guess est un couple de lignes en dessous, d'où wsheet affectés?
Bien sûr, tout cela serait plus facile si nous savions que la ligne à laquelle l'erreur se produit sur... encore plus facile si vous définissez un point d'arrêt et pas dans le code, vous n'avez pas besoin de vider les valeurs des variables fichier, vous pouvez les visualiser de manière interactive dans le débogueur.
OriginalL'auteur Mark McGinty
Au lieu d'utiliser l'instruction INSERT, je suggère la création d'une procédure stockée et la transmission de valeurs à l'aide de l'ADOBO.Objet de commande.
OriginalL'auteur Derek B. Bell
Look cet article
c'est un moyen facile d'importer des données à partir d'Excel dans SQl avec ADO.
[]s
OriginalL'auteur Bruno Leite