Bonjour,
Je cherche à importer un fichier excel par une procédure stockée (projet ADP et sql server 2005). Pouvez vous me donner un exemple ou me lancer sur un tuto.
Merci
Bonjour,
Je cherche à importer un fichier excel par une procédure stockée (projet ADP et sql server 2005). Pouvez vous me donner un exemple ou me lancer sur un tuto.
Merci
Bonjour,
S'il s'agit d'un import ponctuel, vous pouvez faire cela à l'aide de l'assistant importation de données que vous trouverez dans SQL Server Management Studio :
- Faites un clic droit sur la base de données dans laquelle vous devez réaliser l'import
- choisissez "Toutes les tâches" ou "Tâches"
- choisissez "Importer des données"
- laissez vous guider par l'assistant
S'il s'agit en revanche d'un traitement à effectuer régulièrement, il sera préférable de passer par un package d'intégration, comme vous en fait la démonstration Fleur-Anne Blain ici
@++![]()
Merci pour votre réponse.
Oui pour moi, il s'agit d'un traitement à effectuer régulièrement (je le propose aux clients).
J'ai une autre question dans le même contexte.
Est ce qu'on peut passer par une procédure stockée? vu que je cherche à ce que le client puisse définir le chemin du fichier à importer. Je suis plus familiarisé avec ça qu'avec l'usage du SSIS (la procédure stockée sera executer via un module VBA).
Est ce que le notion opendatasource ne peut pas s'appliquer dans ce genre de problème? si c'est oui pouvez vous m'orienter vers un tuto du même genre.
Merci
Vous pouvez effectivement créer une procédure qui utilisera la commande BULK INSERT, mais vous devrez la combiner avec du code SQL dynamique.
Vous pouvez aussi utiliser la commande OPENROWSET, mais là encore vous devrez a combiner avec du code SQL dynamique.
OK si vous êtes pressé, sinon c'est dommage de ne pas s'y mettreJe suis plus familiarisé avec ça qu'avec l'usage du SSIS
@++![]()
Bonjour,
Je cherche à importer dans une procédure stockée texte (sql server 2005), un fichier excel mais avec un "data source" variable. J'ai fait la tentative suivante:
Mais ça ne marche pas, l'erreur qui s'affiche est "Erreur ADO: Synthaxe incorrect vers '+'. Pouvez vous m'aider à résoudre ce problème ou me guider vers un tuto qui traite de cette question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Alter procedure... ( @path varchar(100) ) as set nocount on select * into table from opendatasource('Microsoft.jet.oledb.4.0', 'Data Source='+@path+';Extended properties=Excel 8.0')...[feuille1$] return
Merci
Vous devez pour cela utiliser du SQL dynamique, c'est à dire construire votre instruction SQL au fil de l'eau et la transmettre ensuite au moteur de base de données :
Ici j'utilise le type NVARCHAR car la procédure stockée système sp_executeSQL l'exige.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ALTER PROCEDURE... @path NVARCHAR(255) AS BEGIN SET NOCOUNT ON DECLARE @chaineDeConnexion NVARCHAR(512), @SQL NVARCHAR(1024) SET @chaineDeConnexion = 'Data Source='+ @path + ';Extended properties=Excel 8.0' SET @SQL = 'SELECT * INTO dbo.maTable FROM OPENDATASOURCE(''Microsoft.jet.oledb.4.0'', ' + @chaineDeConnexion + ')...[feuille1$]' -- PRINT @SQL EXEC maBD.dbo.sp_executeSQL @SQL END
J'ai étendu la largeur de la variable @path à 255 caractères, car un chemin sous Windows est me semble-t-il limité à cette longueur là
@++![]()
Bonjour et merci Elsuket,
Pouvez vous m'éclairer un peu plus, sur l'utilisation de sql dynamique et ce que signifie "instruction SQL au fil de l'eau et la transmettre ensuite au moteur de base de données . Comment procéder etc...
Pour plus de précision, je cherche à créer une instruction (genre procédure) et l'intégrer dans un module VBA qui va permettre aux clients d'exporter leur fichier excel vers une table sql du projet (*.adp).
A+
C'est ce que je vous ai proposé ici :Pouvez vous m'éclairer un peu plus, sur l'utilisation de sql dynamique et ce que signifie "instruction SQL au fil de l'eau et la transmettre ensuite au moteur de base de données . Comment procéder etc...
La variable @SQL contient la requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DECLARE @chaineDeConnexion NVARCHAR(512), @SQL NVARCHAR(1024) SET @chaineDeConnexion = 'Data Source='+ @path + ';Extended properties=Excel 8.0' SET @SQL = 'SELECT * INTO dbo.maTable FROM OPENDATASOURCE(''Microsoft.jet.oledb.4.0'', ' + @chaineDeConnexion + ')...[feuille1$]'
On la soumet ensuite au moteur de base de données avec
ou encore :
Code : Sélectionner tout - Visualiser dans une fenêtre à part EXEC maBD.dbo.sp_executeSQL @SQL
Après discussion avec mikedavem, je pense que nous allons rédiger un petit tutoriel sur le SQL dynamique, et je vous tiendrai au courant lors de la publication de celui-ci (au pire ce week-end
Code : Sélectionner tout - Visualiser dans une fenêtre à part EXEC (@SQL))
Vous avez en attendant quelques exemples ici (notamment les liens juste avant "Next Step")
Vous pouvez aussi voir la réponse que j'ai faite ici
@++![]()
Merci Elsuket pour votre aide et surtout pour votre patience,
Entre temps j'ai résolu mon problème en implicant le VBA (FileCopy) et une procédure stockée (avec data source fixe). Mais je me force encore à utiliser votre proposition qui malheureusement me produit un message d'erreur:"Syntaxe incorrect vers 'Data' ".
Merci pour l'idée de la tuto et A+
Bonjour tout le monde;
au modérateur: Je m'escuse je n'ai pas compris votre demande. J'espère que je ne dérange pas l'esprit du forum
merci pour l'ensemble
Code : Sélectionner tout - Visualiser dans une fenêtre à part @Zemblamoh : Il serait préférable que vous posiez une question par post ;-)
Bonjour,
Comme je viens de le dire plus haut, j'ai trouvé la solution à l'application par le client de l'opensource en applicant le VBA (FileCopy) et un opensource dérigé vers le fichier serveur: voici le programme VBA qui contient l'instruction sql.
Le problème c'est quand je lance le programme j'ai le message suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Sub importEchG_excel() Dim con As ADODB.Connection Set con = CurrentProject.Connection ' Dim chemin As String Dim SourceFile, DestinationFile ' On Error Resume Next ' 'DoCmd.RunSQL "drop table \\manex\dataexplore\tabechgex" ' chemin = InputBox("Entrer le Chemin relative à la feuille Excel 'Echant. " & _ " géochimie'") SourceFile = chemin ' Définit le nom du fichier source. DestinationFile = "\\MANEX\Fichier_Import\Tabechgex.xls" ' Définit le nom du fichier cible. ' Copie le fichier source dans le fichier cible. FileCopy SourceFile, DestinationFile On Error GoTo message ' SQL1 = "if object_id('dbo.tabechgex','u') is not null" & _ " drop table tabechgex" DoCmd.RunSQL SQL1 ' SQL2 = " select * into TabEchGEx from opendatasource('Microsoft.jet.OLEDB.4.0'," & _ " 'Data source=\\MANEX\fichier_import\tabechgex.xls;extended properties=Excel 8.0')...[feuille1$]" DoCmd.RunSQL SQL2 ' Exit Sub message: MsgBox Err.description ' con.Close End Sub
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part L'accès d'égal à égal au fournisseur ole db....à été refusé. Vous devez accéder à ce fournisseur par le biais d'un serveur lié
Comment insérer le serveur lié dans ce genre de programme.
Merci pour votre aide
Bonjour,
Le problème est résolu.
Pour ceux que ça intéresse, il faut:
1 - Créer un serveur lié (relatif à la biblio. Excel etc...facilement avec sql server management studio);
2 - appliquer directementet l'exécuter;
Code : Sélectionner tout - Visualiser dans une fenêtre à part "SELECT * INTO Table FROM EXCEL_G...[feuille1$]"
L'application opendatasource est abandonnée. plus besoin de ça pour importer fichier Excel vers sql server.
A+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager