1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut [VBS] Select sur base SQL

    Bonjour,
    J'utilise une base SQL via PhpMyAdmin pour autoriser la connexion réseau d'imprimantes par rapport au nom des postes.
    La base est faite de cette manière:
    192.168.xx.xx/localhost/locationposte/location

    - locationposte
    - - - location
    - - - - - Colonnes
    - - - - - - - - DefaultPrinter
    - - - - - - - - 2ndPrinter
    - - - - - - - - 3rdPrinter
    - - - - - - - - 4thPrinter
    - - - - - - - - 5thPrinter
    - - - - - - - - ClientName
    - - - - - Index
    - - - - - - - - ClientName

    A l'aide de la requête suivant, je récupère les postes qui utilisent une imprimante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM location
    WHERE ( `DefaultPrinter` LIKE '%lonspruacaseca%')
    OR ( `2ndPrinter` LIKE '%lonspruacaseca%')
    OR ( `3rdPrinter` LIKE '%lonspruacaseca%')
    OR ( `4thPrinter` LIKE '%lonspruacaseca%')
    OR ( `5thPrinter` LIKE '%lonspruacaseca%')
    J'aimerais simplifier la tâche par un script VB via un inputbox par exemple!
    Voilà ce que j'ai commencé:

    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
    dim objCon
    dim strCon
     
    dataSource = "192.168.xx.xx" 
    initialCatalog = "locationposte"
    tableName = "location"
    columnName = "DefaultPrinter"
    columnName2 = "2ndPrinter"
    columnName3 = "3rdPrinter"
    columnName4 = "4thPrinter"
    columnName5 = "5thPrinter"
    'Index = ClientName
    userId = " " 'Nom d'utilisateur
    password = " " 'mot de passe
     
    'Connection
    Set objCon = CreateObject("ADODB.Connection")
     
    'Authentication
    objCon.ConnectionString = "DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=" & dataSource & _
    						  "; PORT=3306;" & _
    						  "DATABASE=" & initialCatalog & _
    						  "; USER=" & userId & _
    						  "; PASSWORD=" & password & _
    						  "; OPTION=3;"
     
    objCon.Open
     
    strCon = "SELECT * FROM " & Tablename & "WHERE" & columnName & "or" & columnName2 & "or" & columnName3 & "or" & columnName4 & "or" & columnName5
    Je ne suis pas très à mon aise, un peu d'aide svp?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut

    Bonjour,
    Je progresse doucement.
    J'arrive à établir la connexion et requêter ma BDD MySQL depuis mon vbs.
    Avec le bon connecteur ODBC ça va tout de suite mieux.
    Je ne parviens pas à récupérer depuis mon "PrinterName" la liste des "ClientName" concernés.
    J'ai tenté une 1er approche en essayant dans un premier temps de récupérer déjà l'imprimante par défaut (Voire Code mis en commentaire).
    Je ne m'en sort pas! Un petit coup de pouce serait le bienvenue.

    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
    OPTION Explicit
     
    Dim dataSource, initialCatalog, tableName, userId, password 
     
    Dim Connection
    Dim ConnectionString
    Dim Recordset
    Dim SQL
    Dim strValue
    Dim port
    Dim columnName1
    Dim PrinterName
     
    dataSource = "192.168.xx.xx" 
    initialCatalog = "locationposte"
    tableName = "location"
    userId = "xxxx" 
    password = "xxxx"
    port = "3306" 
    columnName1 = "DefaultPrinter"
    PrinterName = "Imprimante1"
     
     
    SQL = "SELECT * FROM " & tableName
    'SQL = "SELECT * FROM " & tableName & " WHERE ('" & columnName1 & "' LIKE '%" & PrinterName & "%')"
     
     
    ConnectionString = "DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=" & dataSource & _
    					";PORT=" & port & _
    					";DATABASE=" & initialCatalog & _
    					";UID=" & userId & _
    					";PASSWORD=" & password &_
    					";OPTION=3"
     
    Set Connection = CreateObject("ADODB.Connection")
    Set Recordset = CreateObject("ADODB.Recordset")
     
    Connection.Open ConnectionString
     
    Recordset.Open SQL,Connection
     
    If Recordset.EOF Then
    MsgBox "erreur"
    Else
     
    Do While NOT Recordset.Eof   
    	strValue = RecordSet.Fields("DefaultPrinter").Value 
    	'strValue = RecordSet.Fields("ClientName").Value  
    	Recordset.MoveNext 
    Loop
    End If
    MsgBox strValue
     
    Recordset.Close
    Set Recordset=nothing
    Connection.Close
    Set Connection=nothing

  3. #3
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 066
    Points : 8 071
    Points
    8 071

    Par défaut

    Salut
    As tu un message d'erreur ?
    Utilises tu une gestion d'erreur type On Error Resume Next dans cette partie de ton code ?

    Il faudrait savoir si ton recordset est ouvert suite à Recordset.Open SQL,Connection
    Pour cela il faut lire la propriété State du recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Recordset.Open SQL,Connection
    If Recordset.State = 0 Then MsgBox "Recordset fermé"
    If Recordset.State = 1 Then MsgBox "Recordset ouvert"
    If Recordset.EOF Then MsgBox "Recordset ne renvoi aucun enregistrement"
    Si Recordset ouvert mais Recordset ne renvoi aucun enregistrement, on saura que c'est la rédaction de la requête qui n'est pas bonne.

  4. #4
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 066
    Points : 8 071
    Points
    8 071

    Par défaut

    Re
    De plus, es tu sur de ton ConnectionString
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ConnectionString = "DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=" & dataSource & _
    					";PORT=" & port & _
    					";DATABASE=" & initialCatalog & _
    					";UID=" & userId & _
    					";PASSWORD=" & password &_
    					";OPTION=3"
    Je penserai plus à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ConnectionString = "DRIVER=(MySQL ODBC 5.3 ANSI Driver); SERVER=" & dataSource & _
    					";PORT=" & port & _
    					";DATABASE=" & initialCatalog & _
    					";UID=" & userId & _
    					";PASSWORD=" & password &_
    					";OPTION=3"

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut

    Salut ProgElecT
    Sympa de prendre le temps de te pencher sur mon problème
    Mon ConnectionString fonctionne bien avec les accolades mais plus avec les parenthèses.
    La gestion d'erreur me dit que le Recordset et bien ouvert est qu'il ne renvoi aucun enregistrement puis le MsgBox "erreur" du If Recordset.EOF Then s'affiche .

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut

    Tu avais raison la rédaction de la requête qui n'est pas bonne.
    Remplacement des apostrophes par des "accents grave" autour de DefaultPrinter (`" & columnName1 & "`).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT * FROM " & tableName & " WHERE ('" & columnName1 & "' LIKE '%" & PrinterName & "%')"
    Remplacé par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT * FROM " & tableName & " WHERE (`" & columnName1 & "` LIKE '%" & PrinterName & "%')"

    Cette foi je coince sur l'appel de mon strValue lié cette requette.
    J'ai plusieurs " ClientName" qui peuvent avoir la même imprimante par défaut `DefaultPrinter`.
    Et idem pour `2ndPrinter`, `3rdPrinter`, `4thPrinter`, `5thPrinter`
    Je ne vois pas trop comment traiter successivement les différentes imprimantes et ce pour chaque ClientName

  7. #7
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 066
    Points : 8 071
    Points
    8 071

    Par défaut

    Cette foi je coince sur l'appel de mon strValue lié cette requette.
    Plutôt que récupérer avec cette syntaxe strValue = RecordSet.Fields("DefaultPrinter").Value, essais strValue = RecordSet.Fields("DefaultPrinter") (en supprimant le .value)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut

    Même avec cette syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strValue = RecordSet.Fields("ClientName")
    Je récupère seulement le 1er ClientName détecter.

    Ce que j'aimerais c'est un MsgBox pour chaque clientName ayant l'imprimante (PrinterName) déclaré et ce quel que soit la colonne et un listing des imprimantes déclarées pour ce ClientName.

    Exemple
    Recherche sur le (PrinterName) nommé "Imprimante1"

    ClientName trouvé nommé "ClientA"
    MsgBox:
    ClientA
    DefaultPrinter = Imprimante1
    2ndPrinter = Imprimante4
    3rdPrinter = Null
    4thPrinter = Null
    5thPrinter = Null

    ClientName trouvé nommé "ClientB"
    MsgBox:
    ClientB
    DefaultPrinter = Imprimante3
    2ndPrinter = Imprimante1
    3rdPrinter = Imprimante5
    4thPrinter = Imprimante4
    5thPrinter = Null

    Voilà ou j'en suis:

    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
    OPTION Explicit
     
    Dim dataSource, initialCatalog, tableName, userId, password 
     
    Dim Connection
    Dim ConnectionString
    Dim Recordset
    Dim SQL
    Dim strValue
    Dim port
    Dim columnName1, columnName2, columnName3, columnName4, columnName5
    Dim PrinterName
     
    dataSource = "192.168.xx.xx" 
    initialCatalog = "locationposte"
    tableName = "location"
    userId = "xxxx" 
    password = "xxxx"
    port = "3306" 
    columnName1 = "DefaultPrinter"
    columnName2 = "2ndPrinter"
    columnName3 = "3rdPrinter"
    columnName4 = "4thPrinter"
    columnName5 = "5thPrinter"
    PrinterName = "Imprimante1"
     
    'SQL = "SELECT * FROM " & tableName & " WHERE (`" & columnName1 & "` LIKE '%" & PrinterName & "%')"
    SQL = "SELECT * FROM " & tableName & " WHERE (`" & _
    									columnName1 & "` LIKE '%" & PrinterName & "%') OR (`" & _
    									columnName2 & "` LIKE '%" & PrinterName & "%') OR (`" & _
    									columnName3 & "` LIKE '%" & PrinterName & "%') OR (`" & _
    									columnName4 & "` LIKE '%" & PrinterName & "%') OR (`" & _
    									columnName5 & "` LIKE '%" & PrinterName & "%')"
     
    MsgBox SQL
     
    ConnectionString = "DRIVER={MySQL ODBC 5.3 ANSI Driver}; SERVER=" & dataSource & _
    ";PORT=" & port & _
    ";DATABASE=" & initialCatalog & _
    ";UID=" & userId & _
    ";PASSWORD=" & password &_
    "; OPTION=3"
     
     
    Set Connection = CreateObject("ADODB.Connection")
    Set Recordset = CreateObject("ADODB.Recordset")
     
    Connection.Open ConnectionString
     
    Recordset.Open SQL,Connection
     
    If Recordset.EOF Then
    MsgBox "erreur"
    Else
     
    Do While NOT Recordset.Eof   
    	strValue = RecordSet.Fields("ClientName")'.Value
    	'strValue = RecordSet.Fields("DefaultPrinter").Value
    	Recordset.MoveNext
     
    Loop
    MsgBox strValue
    End If
     
    Recordset.Close
    Set Recordset=nothing
    Connection.Close
    Set Connection=nothing

  9. #9
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 066
    Points : 8 071
    Points
    8 071

    Par défaut

    Re

    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
    SQL = "SELECT * FROM " & tableName & " WHERE ('" & _
    							DefaultPrinter & "' LIKE '%" & PrinterName & "%') OR ('" & _
    							columnName1 & "' LIKE '%" & PrinterName & "%') OR ('" & _
    							columnName2 & "' LIKE '%" & PrinterName & "%') OR ('" & _
    							columnName3 & "' LIKE '%" & PrinterName & "%') OR ('" & _
    							columnName4 & "' LIKE '%" & PrinterName & "%') OR ('" & _
    							columnName5 & "' LIKE '%" & PrinterName & "%')"
     
    Dim MsG
    Do While NOT Recordset.Eof   
    	MsG = "Client " &  RecordSet.Fields("ClientName")
    	If Not IsNull(RecordSet.Fields("DefaultPrinter")) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields("DefaultPrinter")
    	End If	
    	If Not IsNull(RecordSet.Fields("columnName1")) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields("columnName1")
    	End If	
    	If Not IsNull(RecordSet.Fields("columnName2")) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields("columnName2")
    	End If	
    	If Not IsNull(RecordSet.Fields("columnName3")) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields("columnName3")
    	End If	
    	If Not IsNull(RecordSet.Fields("columnName4")) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields("columnName4")
    	End If	
    	If Not IsNull(RecordSet.Fields("columnName5")) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields("columnName5")
    	End If	
    	MsgBox MsG, vbInformation, "Rapport" 
     
    	Recordset.MoveNext
    Loop
    me semble t il.


    ATTENTION, ton éditeur de texte a tendance à transformer les apostrophes, ce qui doit te faire planter ton programme.
    Moi j'utilise Notepad++ (gratuit lien) qui supporte la colorisation syntactique et bien d'autres choses.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut

    Salut,

    Impeccable juste quelque petites adaptations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    columnName1 = "DefaultPrinter"
    J'ai donc supprimé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	If Not IsNull(RecordSet.Fields("DefaultPrinter")) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields("DefaultPrinter")
    	End If

    Supprimé les guillemets autour des variables (columnName).

    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
    	If Not IsNull(RecordSet.Fields(columnName1)) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields(columnName1)
    	End If
    	If Not IsNull(RecordSet.Fields(columnName2)) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields(columnName2)
    	End If	
    	If Not IsNull(RecordSet.Fields(columnName3)) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields(columnName3)
    	End If	
    	If Not IsNull(RecordSet.Fields(columnName4)) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields(columnName4)
    	End If	
    	If Not IsNull(RecordSet.Fields(columnName5)) Then
    		MsG = MsG & vbNewLine & RecordSet.Fields(columnName5)	
    	End If
            
    Merci

  11. #11
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 066
    Points : 8 071
    Points
    8 071

    Par défaut

    Salut

    Supprimé les guillemets autour des variables (columnName).
    le fait est, je n'ai pas fait attention que cela désignait une variable et non le nom du champs du recordset.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut

    Histoire de rendre plus lisible et compréhensible mon code en cas d'intervention ultérieur, j'aimerais renommer mes différentes variables afin de mieux les identifier.

    Connaissez-vous un moyen de définir plus précisément le type d'une variable?
    Dans le doute "variant" semble abusivement utilisé.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 39
    Points : 19
    Points
    19

    Par défaut

    J'ai recensé dans un 1er temps celle-ci:
    Byte
    Integer
    Long
    Single
    Double
    Currency
    Decimal
    Date
    String
    Boolean
    Empty
    Null
    Object

  14. #14
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 066
    Points : 8 071
    Points
    8 071

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

Discussions similaires

  1. Recherche à la google sur base SQL SERVER
    Par seb.49 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 09/08/2006, 18h12
  2. application access sur base sql server
    Par souma dans le forum Access
    Réponses: 1
    Dernier message: 05/05/2006, 09h11
  3. Requete SQL sur base SQL Server VB6
    Par Yanmeunier dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/11/2005, 12h30
  4. Connexion automatique sur base SQL (Login/pass mémorisé)
    Par Fredo67 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/10/2005, 16h24
  5. Requete ASP sur Base SQL
    Par smast2005 dans le forum ASP
    Réponses: 8
    Dernier message: 22/02/2005, 11h03

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