IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Importation d'un fichier Excel


Sujet :

Développement SQL Server

  1. #1
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut Importation d'un fichier Excel
    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

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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

    @++

  3. #3
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut Importation d'un fichier Excel
    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

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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.

    Je suis plus familiarisé avec ça qu'avec l'usage du SSIS
    OK si vous êtes pressé, sinon c'est dommage de ne pas s'y mettre


    @++

  5. #5
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut Importer fichier Excel avec opendatasource
    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:
    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
    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.
    Merci

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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 :

    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
    Ici j'utilise le type NVARCHAR car la procédure stockée système sp_executeSQL l'exige.
    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à

    @++

  7. #7
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut Imorter fichier excel à l'aide de opendatasource
    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+

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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...
    C'est ce que je vous ai proposé ici :

    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$]'
    La variable @SQL contient la requête.
    On la soumet ensuite au moteur de base de données avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC maBD.dbo.sp_executeSQL @SQL
    ou encore :

    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 )
    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

    @++

  9. #9
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut opendatasource en sql dynamique
    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+

  10. #10
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Citation Envoyé par elsuket Voir le message
    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)
    @elsuket ,

    J'attends votre (vous 2, hein ^^) avec impatience

    @Zemblamoh : Il serait préférable que vous posiez une question par post ;-)


  11. #11
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut opendata source par sql dynamique
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @Zemblamoh : Il serait préférable que vous posiez une question par post ;-)
    merci pour l'ensemble

  12. #12
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut opendata source et serveur lié
    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.
    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
    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
    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

  13. #13
    Membre habitué

    Homme Profil pro
    Ingénieur géologue
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur géologue

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 158
    Points
    158
    Billets dans le blog
    4
    Par défaut Importer fichier Excel par opendatasource
    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 directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * INTO Table FROM EXCEL_G...[feuille1$]"
    et l'exécuter;
    L'application opendatasource est abandonnée. plus besoin de ça pour importer fichier Excel vers sql server.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importation d'un fichier excel vers access
    Par zinini dans le forum Access
    Réponses: 2
    Dernier message: 07/07/2006, 12h42
  2. Importation d'un fichier EXCEL EN ACCESS
    Par noob_vba dans le forum Access
    Réponses: 3
    Dernier message: 23/06/2006, 16h13
  3. Réponses: 7
    Dernier message: 23/11/2005, 18h20
  4. Réponses: 7
    Dernier message: 04/10/2005, 18h21
  5. importation d'un fichier excel à destination finale : delphi
    Par pier dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 24/09/2005, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo