Quel est le moyen le plus rapide d'importer des données dans une base de données SQL Server directement à partir de la feuille de calcul active dans Excel?Quelle est la méthode la plus rapide pour importer de la feuille active dans Excel vers SQL Server?
J'ai eu beaucoup de succès simplement en bouclant les lignes et les colonnes, en générant une chaîne SQL, en ouvrant une ADODB.Connection et en exécutant le SQL. Cette solution, cependant, est trop lente pour les grands ensembles de données. Donc, je suis en train de tester le Jet Provider avec ADO. C'est certainement plus rapide, mais il faut que le classeur soit sauvegardé, et je ne peux pas demander à l'utilisateur d'enregistrer le classeur avant de le télécharger.
Le code suivant fonctionne si le classeur a été enregistré, mais si ActiveWorkbook n'a jamais été enregistré ActiveWorkbook.Path renvoie une chaîne null et le code échoue.
Sub UploadViaJet()
Dim objADO As New ADODB.Connection
Dim strSQL As String
Dim lngRecsAff As Long
Set objADO = New ADODB.Connection
objADO.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ActiveWorkbook.Path & _
"\" & ActiveWorkbook.Name & ";" & _
"Extended Properties=Excel 8.0"
strSQL = "SELECT * INTO [odbc;Driver={SQL Server};" & _
"Server=<server>;Database=<database>;" & _
"UID=<UID>;PWD=<PWD>].test_table " & _
"FROM [" & ActiveSheet.Name & "$]"
objADO.Execute strSQL, lngRecsAff, adExecuteNoRecords
End Sub
Existe-t-il une manière plus simple et plus rapide de faire cela?
Pourquoi ne pas simplement utiliser l'API du fichier temporaire Windows? –
C'est une bonne idée, sauf que la question indique que l'utilisateur ne devrait pas être invité à enregistrer le fichier. Donc, copier le contenu dans un fichier différent et utiliser l'API Windows Temp File serait mon choix. –
J'ai utilisé des requêtes distribuées ADO jusqu'à ce point. Cela a bien fonctionné pour moi, mais mes tailles de données ont augmenté au point que les opérations durent longtemps et dépassent parfois la capacité de mémoire de l'ordinateur. L'utilisation d'un fichier temporaire semble être une bonne solution, même si cela nécessite de gérer le fichier temporaire. Merci Raj! – Kuyenda