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

VBScript Discussion :

Script sql depuis un vbs


Sujet :

VBScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Support interfaçage
    Inscrit en
    Juin 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 45
    Points : 28
    Points
    28
    Par défaut Script sql depuis un vbs
    Bonjour à tous,

    je m'occupe d'un utilitaire qui me permet de faire des requêtes sur deux bases de données mysql.

    Pour faire une mise à jour de celle-ci, je suis passé par des vbs pour ajouter des champs en fin de chaque ligne de fichiers de plus de 350 000 lignes ( en mode batch,cela prenait 15 minutes pour un fichier, en vbs 15 secondes lol ).

    Aujourd'hui, mon utilitaire lance différent script mysql, mais il y a un affichage dans une fenêtre ms-dos de plus de 300 000 lignes ce qui génèrent une lenteur, car dans query browser, je fais un script en 1 minute, face à 10 minutes au moins pour ce même batch.

    J'ai cherché en vain comment lancer un script.sql depuis un vbs mais je n'ai pas réussi....Et surtout ensuite, comment être sure que mon script est finit avant de faire autre chose.

    D'avance, merci à tous.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Bonjour,
    Personnellement, j'exécute les requêtes SQL directement depuis mon VBS.
    Ceci dit, j'ai un pgm qui exécute un .bat qui lance une procédure (exe). Tu peux peut-être t'en inspirer.
    Cordialement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                    '--- Mise à jour de FMFI par lancement de l'exécution d'un pgm.bat
                            If TRAIT Then
                                    Dim objShell
                                    Set objShell = CreateObject("Wscript.Shell")
                                    objShell.run "Maj_FMFI.bat", 0, True
                                    If Err.Number<>0 Then
                                            Call Fnc_Err("TRAIT","Exec MAJ FMFI Impossible",Err.Number)
                                            ERREUR = True
                                            TRAIT = False
                                    Else
    Le .bat : Il exécute un pg en java avec passage de paramètres.
    @echo off
    pushd \\dematfac2\Itesoft\fmsrv\slfi\database
    SET FMFI_BATCH_EXEC=SILENCE
    wscript.exe UpdateBusinessData.js //E:Jscript //B
    popd

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Support interfaçage
    Inscrit en
    Juin 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Bonjour, je tenais à te remercier de la réponse....mais je ne peux lancer des .Exe facilement.Ils doivent être déclarés à l'avance, et ce, pour plusieurs centaines de clients, donc difficiles à mettre en place.

    je pensais que mon gentil vbs serait faire nativement un launch monscript.sql..... .... l'espoir faire vivre.

    Si vous avez une idée.......

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Pour avoir des idées un peu plus claires, quel genre de sql s'agit-il ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Support interfaçage
    Inscrit en
    Juin 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Voici mon script, dont j'ai juste changé quelques noms ....... pour le déposer ici

    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
    DROP TABLE IF EXISTS `tmp`;
     
    CREATE TABLE `tmp` (
       `valeur1` varchar(255) NOT NULL,
       `valeur2` varchar(255) NOT NULL,
       `valeur3` varchar(255) NOT NULL,
       `valeur4` varchar(45) NOT NULL,
       `valeur5` varchar(255) NOT NULL,
       `valeur7` varchar(255) NOT NULL,
     
       PRIMARY KEY (`valeur1`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    LOAD DATA INFILE 'C:\\TEMP\\HOTLINE2\\valeur17_valeur113_ANSI.txt' INTO TABLE tmp FIELDS TERMINATED BY ';';
     
    insert into tablet_info (tblt_cd,tblt_nm,tblt_barcode,tblt_type,use_atm_yn,tblt_barcode_list)
    select valeur5,valeur2,valeur5,valeur3,'N',valeur1 from tmp where valeur5 not in (select tblt_cd from tablet_info);
     
    delete from tmp where valeur5 in( select tblt_cd from tablet_info);
     
    update tablet_info,tmp set tblt_nm=valeur2,tblt_type=valeur3,tblt_barcode_list=valeur1 where tblt_cd=valeur5;
     
    DROP TABLE `tmp`;
     
    update tablet_info set tblt_barcode=tblt_cd;

  6. #6
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Il me semble que tous les sql's contient les mots clés de commande au côté serveur - c'est plutôt un bon signe, on peut les réécrire dans le script vbs explicitement dans une approche à premier lieu comme ça.
    Code vbs : 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
    dim asql, ssql, sdb, suser, spwd, shost, sconn, oconn, ocmd, i
    asql=array("drop table if exists tmp;" _
        , _
        "create table tmp (" & vbcrlf & vbtab & _
        "valeur1 varchar(255) NOT NULL," & vbcrlf & vbtab & _
        "valeur2 varchar(255) NOT NULL," & vbcrlf & vbtab & _
        "valeur3 varchar(255) NOT NULL," & vbcrlf & vbtab & _
        "valeur4 varchar(45) NOT NULL," & vbcrlf & vbtab & _
        "valeur5 varchar(255) NOT NULL," & vbcrlf & vbtab & _
        "valeur7 varchar(255) NOT NULL," & vbcrlf & vbtab & _
        "PRIMARY KEY (valeur1)" & vbcrlf & _
        ") ENGINE=InnoDB DEFAULT CHARSET=utf8;" _
        , _
        "LOAD DATA INFILE 'C:/TEMP/HOTLINE2/valeur17_valeur113_ANSI.txt' INTO TABLE tmp FIELDS TERMINATED BY ';';" _
        , _
        "insert into tablet_info (tblt_cd,tblt_nm,tblt_barcode,tblt_type,use_atm_yn,tblt_barcode_list)" & vbcrlf & vbtab & _
        "select valeur5,valeur2,valeur5,valeur3,'N',valeur1 from tmp where valeur5 not in (select tblt_cd from tablet_info);" _
        , _
        "delete from tmp where valeur5 in (select tblt_cd from tablet_info);" _
        , _
        "update tablet_info,tmp set tblt_nm=valeur2,tblt_type=valeur3,tblt_barcode_list=valeur1 where tblt_cd=valeur5;" _
        , _
        "DROP TABLE tmp;" _
        , _
        "update tablet_info set tblt_barcode=tblt_cd;" _
    )
     
    'sconn connection-string pour mysql, je ne donne qu'une version possible et il vous faut s'adapter
    sdb="databasename"
    suser="username"
    spwd="xxxxxx"
    shost="localhost"    'ou autre
    sconn="Driver={MySQL ODBC 5.3 Unicode Driver};Server=" & shost & ";Database=" & sdb & ";UID=" & suser & ";PWD=" & spwd & ";"
    set oconn=createobject("adodb.connection")
    oconn.open sconn
    set ocmd=createobject("adodb.command")
    set ocmd.activeconnection=oconn
    ocmd.commandtype=1	'adCmdText=1
     
    for i=0 to ubound(asql)
        ssql=asql(i)
        ocmd.commandtext=ssql
        ocmd.execute
    next
     
    set ocmd=nothing
    set oconn=nothing
    Si on pouvait employer là la commande dit "source", ce serait parfait parce qu'on peut profiter le fichier des sql's directement; mais, malheureusement, source est une commande côté client et c'est pour ça la construction des commandes sql en forme de tableau semble laborieuse ! et on n'y peut rien ou très peu sinon d'en faire des trucs même beaucoup plus laborieux.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Support interfaçage
    Inscrit en
    Juin 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup de ta proposition.

    Il y a un problème, il va être trop compliqué de faire la configuration ODBC à chaque fois sur les poste distants, et apparemment, sans cela, pas de driver mysql, et le script vbs est pas content......

    En tout cas, merci ; je considère le sujet résolu mais difficile à mettre en place.

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

Discussions similaires

  1. Récupération d'un script sql depuis oracle
    Par mehdirock dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/08/2008, 15h04
  2. Exécuter un script SQL depuis une procédure PL/SQL
    Par rvfranck dans le forum PL/SQL
    Réponses: 8
    Dernier message: 19/04/2008, 02h11
  3. [SQL] Executer un script SQL depuis php
    Par sly3333 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/12/2007, 02h33
  4. Réponses: 2
    Dernier message: 23/03/2007, 16h16
  5. Executer un script SQl depuis VB
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/03/2007, 21h06

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