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

MS SQL Server Discussion :

.txt vers BDD MS SQL [2014]


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut .txt vers BDD MS SQL
    Bonjour à toutes et à tous,

    Je suis actuellement sur un projet où je dois transférer des données venant d'un fichier texte vers une BDD MS 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    /* This sample program shows how to create a database record. */
     
    /* define PURE_SQL to use a SQL INSERT INTO statement instead of   */
    /* DBCreateRecord and DBPutRecord.                                 */
    #undef PURE_SQL
    #include "cvi_db.h"
    #include <utility.h>
    #include <ansi_c.h>
    #include <userint.h>
     
    void ShowError()
    {
        MessagePopup("Database Error",DBErrorMessage());
    }
     
     
    void main()
    {
        int hdbc = 0;       /* Handle to database connection    */
        int hmap = 0;       /* Handle to map                    */
        int hstmt = 0;      /* Handle to SQL statement          */
        char uutNum[11];    /* Buffer for uut serial number     */
        int uutStat;        /* Status variable for uut number   */
        double meas1;       /* Variable for test measurement 1  */
        int meas1Stat;      /* Fetch status  for measurement 1  */
        double meas2;       /* Variable for test measurement 2  */
        int meas2Stat;      /* Fetch tatus for measurement 2    */
        int resCode;        /* Result code                      */
    	char dsn[74]	;
     
    #ifdef WIN64
    	DisableBreakOnLibraryErrors();
    #endif 
    	/* Connect to database (in this case dBase files) */
        hdbc = DBConnect ("DSN = ");
    #ifdef WIN64
    	EnableBreakOnLibraryErrors();
    	if (hdbc == -10 || hdbc == -11) {
    		MessagePopup ("Could not connect to Datasource", 
    			"The SQL Toolkit could not connect to the \"CVI SQL Samples\" data source.\n"		\
    			"The most likely reason for this is because the SQL Toolkit was unable to\n"		\
    			"register the datasource at installation time. The samples.mdb file requires\n" 	\
    			"a 64-bit Access driver and as of April 2010 one did not exist. According to\n"		\
    			"Microsoft, the Jet Database Engine is being deprecated and will be replaced\n"		\
    			"with a new x64 compatible Access Database Engine when Office 2010 is released.\n\n"\
    			"Once a 64-bit Access driver has been released and installed on this machine,\n"	\
    			"the DSN can be added by opening up Control Panel and then going to\n"				\
    			"Administrative Tools >> Data Sources (ODBC). In the System DSN tab, hit the\n"		\
    			"Add button and select the Microsoft Access Driver you just installed. You must\n"	\
    			"set the Data Source Name as \"CVI SQL Samples\".\n"		\
    			"Then Select the samples.mdb database located at:\n"								\
    			"C:\\Users\\Public\\Documents\\National Instruments\\CVI\\samples\\sql\\samples.mdb.\n"	\
    			"Click the OK button and then the SQL samples should work.\n\n"			\
    			"Note: The SQL samples should all work correctly when run in 32-bit mode."
    			);
    		goto Error;
    		}
    	else
    #endif
        if (hdbc <= 0) {ShowError(); goto Error;}
     
    #ifdef PURE_SQL
        resCode = DBImmediateSQL(hdbc, "INSERT INTO TESTRES (UUT_NUM, MEAS1, MEAS2) \
                    VALUES ('2860B567',0.7,1.1)");
    #else
     
        /* begin map for constructed SQL statement */
        hmap = DBBeginMap (hdbc);
        if (hmap <= 0) {ShowError(); goto Error;}
     
        /* specify the columns to be selected and the variables where column */
        /* values will be placed.                                            */
        resCode = DBMapColumnToChar (hmap, "UUT_NUM", 11, uutNum, &uutStat, "");
        if (resCode != DB_SUCCESS) {ShowError(); goto Error;}
        resCode = DBMapColumnToDouble (hmap, "MEAS1", &meas1, &meas1Stat);
        if (resCode != DB_SUCCESS) {ShowError(); goto Error;}
        resCode = DBMapColumnToDouble (hmap, "MEAS2", &meas2, &meas2Stat);
        if (resCode != DB_SUCCESS) {ShowError(); goto Error;}
     
        /* Activate the map for table testres.  (construct a SQL Select     */
        /* statement, execute the statement, bind the selected columns to   */
        /* the previously specified variables.)                             */
        hstmt = DBActivateMap (hmap, "testres");
        if (hstmt <= 0) {ShowError(); goto Error;}
     
        /* Create the new record */
        resCode = DBCreateRecord (hstmt);
        if (resCode != DB_SUCCESS) {ShowError(); goto Error;}
     
        /* Put values into the bound variables */
        strcpy(uutNum, "2860B567");
        meas1 = 0.7;
        meas2 = 1.1;
     
        /* Insert the record into the database */
        resCode = DBPutRecord (hstmt);
        if (resCode != DB_SUCCESS) {ShowError(); goto Error;}
     
        resCode = DBDeactivateMap (hmap);
        if (resCode != DB_SUCCESS) {ShowError(); goto Error;}
    #endif
        resCode = DBDisconnect (hdbc);
        if (resCode != DB_SUCCESS) {ShowError(); goto Error;}
        MessagePopup ("Create Record Sample",
                      "Successfully created record for UUT_NUM 2860B567");
    Error:
        return;
    }
    Exemple donné dans la librairie SQL Tool.

    Je ne sais pas comment faire pour me connecter à la BDD en question (le terme DSN apparaît). Et je ne sais ni comment aller lire ce fichier.txt pour transférer les données.

    En vous remerciant,
    AUFFRET Fabien.

  2. #2
    Membre averti
    Avatar de taibag
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 214
    Points : 357
    Points
    357
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je pense que l'erreur est dans la chaîne de connexion DSN (Data source Name) , vous devez remplir les paramètre de votre DSN :

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DSN=myDsn;Uid=myUsername;Pwd=;
    Cordialement.
    मैं एक छात्र हूँ |

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta réponse rapide Taibag.

    J'ai vu qu'il y avait un moyen plus simple appelé SSIS qui me semble fort intéressant, je vais donc m'attarder dessus pour voir si c'est réalisable ici.

    Encore une fois, merci.

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser du bulk insert en transact SQL :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BULK INSERT AdventureWorks2008R2.Sales.SalesOrderDetail
       FROM 'f:\orders\sales.txt'
       WITH 
          (
             FIELDTERMINATOR =' ;',
             ROWTERMINATOR =' |\n'
          )
    un peu d'aide :

    https://technet.microsoft.com/fr-fr/...ql.105%29.aspx
    MCSA SQL SERVER |MCT | MVP Data Platform

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    C'est une bonne idée, en effet. Mais je vais avoir deux fichiers txt et j'ai 3 tables dans ma BDD. Un fichier va servir pour une seule table et l'autre pour deux tables. Dans ces fichiers txt, je ne pas besoin de toutes les données car elles vont servir pour un logiciel de supervision assez basique, et le reste des infos serviront à une supervision plus complexe par la suite.

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Dans ce cas il est alors plus approprié d'utiliser un ETL comme SSIS qui va permettre d'inserer les données avec de l'intelligence.
    MCSA SQL SERVER |MCT | MVP Data Platform

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Oui, je compte m'aider du fichier pdf sur ce sujet là. Je compte m'en occuper cet après-midi.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Sous SSIS :

    J'ai réussi à faire ce que je souhaitais, sauf que j'aurais voulu savoir s'il était possible de forcer une valeur dans une colonne ? Et est-il possible aussi de faire un collage complet et non à la suite des valeurs déjà obtenues ?

    J'ai aussi un message d'erreur lorsque je veux insérer le package dans ma DB.
    http://hpics.li/0d68e99

    J'ai bien installé le SQL Business Integration. Je fonctionne sous la version Express, c'est à cause de cela ?

    Merci.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Peut-on également faire un import de données dans une même table avec deux fichiers plats différents ? Y a-t-il une requête script qui permet de copier des données à la suite des autres en évitant de recopier celle qui possède un même champ ou alors de supprimer celles qui possèdent le même champ ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 674
    Points
    674
    Par défaut
    Bonjour,

    Citation Envoyé par nLineMayuri Voir le message

    J'ai réussi à faire ce que je souhaitais, sauf que j'aurais voulu savoir s'il était possible de forcer une valeur dans une colonne ? Et est-il possible aussi de faire un collage complet et non à la suite des valeurs déjà obtenues ?
    Oui dans le controle Flow crée une tache permettant de supprimer les lignes souhaité ou permettant de faire un Truncate en SQL.
    Ajouter une tache BulkInsert ou un DataFlow a la suite qui va integrer les données.
    Attention une tache BulkInsert nécessite que la structure de la table destinatrice soit identique a la structure de du fichier, et aucun filtre n'est possible.

    Citation Envoyé par nLineMayuri Voir le message
    Peut-on également faire un import de données dans une même table avec deux fichiers plats différents ?
    Oui sans soucis il suffit de creer plusieurs connexions vers les fichiers et de les inserer ou de creer une connexion qui va chercher les fichiers souhaités une petite aide:

    http://www.expert-only.com/tutoriels...avec-ssis-2008


    Citation Envoyé par nLineMayuri Voir le message
    Y a-t-il une requête script qui permet de copier des données à la suite des autres en évitant de recopier celle qui possède un même champ ou alors de supprimer celles qui possèdent le même champ ?
    Vous souhaités faire un DELETE INSERT ? ( DELETE si cela existe / Insert si elle n'existe pas ) ou n'inserer que les lignes qui n'existent ?

    Si c'est le cas penchez vous sur le composant LOOKUP :

    http://mcnextpost.com/2013/10/16/met...ans-ssis-2012/

    Ou utiliser MERGE en TSQL

    https://msdn.microsoft.com/fr-fr/library/bb510625.aspx

    Je dois avouer que je ne comprend pas bien votre question.
    MCSA SQL SERVER |MCT | MVP Data Platform

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Merci pour vos réponses Julien94320.

    J'ai fais tout autrement, j'ai utilisé qu'un fichier où j'ai centralisé toutes les valeurs dont j'avais besoin. Pour le forçage de colonne, je l'ai fais directement via MS SQL.
    Pour copier des données à la suite, je génère mon fichier.txt que j'importe dans ma BDD et que je supprime par la suite.

    Merci encore une fois.

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

Discussions similaires

  1. copie d´un fichier txt vers MS SQL Server
    Par makohsarah dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/10/2010, 17h26
  2. fichier txt vers fichier .sql
    Par radzar dans le forum Langage SQL
    Réponses: 9
    Dernier message: 12/03/2009, 13h40
  3. XML + XSD vers BDD Sql Server ?
    Par LordZener dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/03/2008, 17h11
  4. Restore d une BDD de Sql serv er 2005 vers Sql Server 2000
    Par Nadaa dans le forum Administration
    Réponses: 1
    Dernier message: 27/09/2007, 13h11
  5. Restore d une BDD de Sql serv er 2005 vers Sql Server 2000
    Par Nadaa dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/09/2007, 13h11

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