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

OpenOffice & LibreOffice Discussion :

Résultat de requête SQL dans une feuille déterminée [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut Résultat de requête SQL dans une feuille déterminée
    Bonjour,

    Quand je fait "F4", j'ai bien la connexion à ma base PostgreSQL qui s'affiche (programme_production). Si je clique sur requêtes, j'ai bien ma requête d'enregistrée (Liste_CA_Code).
    Ce que je veux faire, c'est de me connecter à la base de donnée postgreSQL, de lancer ma requête et de récupérer le résultat dans la feuille CA_prod. Tous ceci via une macro.
    Comment faire?

    Cordialement,
    vandman

  2. #2
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Je vais m'auto répondre:
    Voici ce que j'ai fait.

    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
    Sub RequeteAlimCABProd 
    Dim oDBContext As Object , oDB As Object , oBase As Object  
    Dim oStatement As Object , oRequeteCA As Object 
    Dim strSQLCA As String , Fichier As String
    Dim Ientifian as String
    Dim monDocument As Object
    Dim ListeDesFeuilles as Object
    Dim FCAProd As Object
    Dim FCBProd As Object
    Dim cel_obj As Object
    dim i as long
    dim FinJ as integer
    dim J as integer
     
    MsgBox("Dans la fenêtre suivante, veuillez sélectionner le fichier de paramétrage pour la connexion avec le serveur SQL. C'est un fichier avec une extention .odb", 0, "Information")
    'Boite de dialoque demandant ou se trouve le fichier de paramétrage de connexion à la base de donnée.
    	'Pour le créer, aller dans Fichier => nouveau => Base de donnée, Sélectionner se connecter à une base de donnée existante.
    	'Dans mon cas, j'ai sélectionner PostgreSQL et mis dans "URL de la source de donnée" = "dbname=nom_Base_de_Donne hostaddr=AdresseIPDuServeur port=5432"
    	'Ensuite, suivre ce qui est demandé.
    Dim FP As Object
    FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
    FP.SetDisplayDirectory("L:\9. Paramétrage\5. Procedure\Macros_LibreOffice\")
    if FP.execute <> com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
    	goto endSub
    end if
     
    'J'initialise les feuilles
    monDocument = ThisComponent
    ListeDesFeuilles = monDocument.Sheets
    FCAProd = ListeDesFeuilles.getByName("CA_Prod")
    FCBProd = ListeDesFeuilles.getByName("CB_Prod")
     
    'Répupération du chemin pour atteindre le fichier
    Fichier = ConvertToURL(FP.Files(0))  
    oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
    oDB = oDBContext.getbyName(Fichier) 
     
    'Demande l'identifiant de connection à la base de donnée
    Ientifian = InputBox ("Identifiant de connexion à la base de Donnée")
     
    'crée une boite de dialogue pour demander le mot de passe
    'Attention, la boite de dialogue est aussi à créer en cliquant droit dans l'onglet en bas de l'éditeur de macro sur "module", puis "Insérer" et "Boite de dialogue BASIC".
    'il faut ensuite ajouter les éléments suivant (bouton * 2, 1  zone de texte et 1 champ d'étiquette qui correspond, ici, au Label1)
    'Dans le bouton "OK", il faut aller dans propriété et aller à la ligne "Type de bouton" pour sélectionner "OK". Si vous ne le faite pas, le bouton sera inerte.
    'Dans le bouton "Annuler", il faut aller dans propriété et aller à la ligne "Type de bouton" pour sélectionner "Annuler". Si vous ne le faite pas, le bouton sera inerte.
    'Dans la zone de texte, il faut aller dans propriété et aller à la ligne "Caractère pour mot de passe" et metter ce que vous voulez. j'ai mis "*". Si vous ne le faite pas, le texte apparîtra en claire à l'écran.
    'Attention, il n'y aura pas d'autre sécurité que le fait de ne pas pouvoir lire le mot de passe tapé.
    Dim Dlg As Object, bibli As Object, monDialogue As Object, MotDePasse as string
    BasicLibraries.LoadLibrary("Standard")               'Chargement des bibliothèques
    DialogLibraries.LoadLibrary("Standard")
    bibli = DialogLibraries.GetByName("Standard")         
    monDialogue = bibli.GetByName("Dialog2")            'Accès au dialogue
    Dlg  = CreateUnoDialog(monDialogue)                 'Exécution du dialogue
       ' -- Bouton OK
       Dlg.getControl("CommandButton1").Label ="OK"
       Dlg.getControl("CommandButton1").Model.Align = 1
       ' -- Bouton Annuler
       Dlg.getControl("CommandButton2").Label ="Annuler"
       Dlg.getControl("CommandButton2").Model.Align = 1
       ' -- label
       Dlg.getControl("Label1").text ="Veullez saisir votre mot de passe"
       Dlg.getControl("Label1").Model.Align = 1
       ' -- Boite
       Dlg.setTitle("Mot de Passe")
     
    'Lance l'exécution de la boite de dialogue   
    Dlg.execute
    MotDePasse = Dlg.getControl("TextField1").text         'Récupère le texte saisi
     
    'se connecte à la base de donnée
    oBase = oDB.getConnection(Ientifian,MotDePasse)
    oStatement = oBase.createStatement()  
     
    'strSQLCA = "Requette SQL sur une seul ligne"
    strSQLCA = "Select CA.code, CA.libelle, Client.name From codeA as CA LEFT JOIN Client ON Client.id = CA.id_client Where Client.id > 40 ORDER BY CA.code, Client.name"
    'exécute la requete SQL pour CA_prod
    oRequeteCA = oStatement.executeQuery( strSQLCA )
    i = 0
    FinJ = 7
    'écrit la première ligne => Header
    cel_obj = FCAProd.getCellByPosition(0, 0)
    cel_obj.string = "code"
    cel_obj = FCAProd.getCellByPosition(1, 0)
    cel_obj.string = "libelle"
    cel_obj = FCAProd.getCellByPosition(2, 0)
    cel_obj.string = "Nom_Client"
     
    'Stoque le résultat dans la feuille CA_prod
    If Not IsNull(oRequeteCA) Then 
    	While oRequeteCA.next
    		i = i + 1
    		for j = 1 to FinJ
    			cel_obj = FCAProd.getCellByPosition(j - 1, i)
    			cel_obj.string = oRequeteCA.getString(j)
    		next
    	Wend 
    End If 
    oRequeteCA.Close
    oStatement.Close 
    oBase.Close 
    oBase.Dispose
    goto finSub
    endSub:
    MsgBox("Il faut saisir un répertoire, relancer la macro car elle se termine maintenant", 0, "Attention !!!")
    goto finSub
    msgbox "Terminé"
    finSub:
    end sub
    Ce que je n'ai pas réussi à faire:
    _ Paramétrer dans la macro le éléments me permettant de me connecter à la base de donnée. La macro en l'état ne permet pas de partager le fichier car si les utilisateurs n'ont pas accès au fichier de paramétrage pour se connecter au serveur SQL, il ne peuvent pas utiliser la macro.
    _ Créer les boites de dialogues via la macro sans passer par la partie "insertion boite de dialogue BASIC"???
    Cordialement,
    Vandman

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    tu peux faire comme cela pour te connecter à la base de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sURL  = "sdbc:postgresql:dbname=mabase hostaddr=127.0.0.1 port=5432 user=nomuser password=motdepasse"
    oManager = CreateUnoService("com.sun.star.sdbc.DriverManager")
    oCon = oManager.getConnection(sURL)
    oStatement = oCon.createStatement()  
    oRequete = oStatement.executeQuery( "select champ from matable" )
    pour la boîte de dialogue , je ne comprend pas ce qui te gêne. Les utilisateurs n'utilisent pas ton document ?

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,

    Voici ce que donne le code corrigé:
    Ce que le code fait:
    • Les différents paramètres de connexion à la base SQL
    • Vérifie qu'il ne manque pas de paramètre
    • Exécute une requete SQL
    • Stocke le résultat de la requete SQL dans la feuille "CA_Prod"

    Ce qu'il ne fait pas encore:
    • Créer les boites de dialogues via la macro sans passer par la partie "insertion boite de dialogue BASIC"???

    Ce qu'il ne fait pas n'est pas grave, je passe donc cette discussion en résolu.

    Cordialement,
    Vandman

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    Sub RequeteAlimCABProd 
    Dim oDBContext As Object , oDB As Object , oBase As Object  
    Dim oStatement As Object , oRequeteCA As Object 
    Dim strSQLCA As String , Fichier As String
    Dim Ientifian as String
    Dim monDocument As Object
    Dim ListeDesFeuilles as Object
    Dim FCAProd As Object
    Dim cel_obj As Object
    dim i as long
    dim FinJ as integer
    dim J as integer
     
     
    'J'initialise les feuilles
    monDocument = ThisComponent
    ListeDesFeuilles = monDocument.Sheets
    FCAProd = ListeDesFeuilles.getByName("CA_Prod")
     
    Dim Dlg3 As Object, bibli3 As Object, monDialogue3 As Object, TypeDB as string, TypeDBList (3) as string
     
    TypeDBList (0) = "dbase"
    TypeDBList (1) = "jdbc"
    TypeDBList (2) = "mysql"
    TypeDBList (3) = "postgresql"
     
     
    BasicLibraries.LoadLibrary("Standard")               'Chargement des bibliothèques
    DialogLibraries.LoadLibrary("Standard")
    bibli3 = DialogLibraries.GetByName("Standard")         
    monDialogue3 = bibli3.GetByName("Dialog3")            'Accès au dialogue
    Dlg3  = CreateUnoDialog(monDialogue3)                 'Exécution du dialogue
       ' -- Bouton OK
       Dlg3.getControl("CommandButton1").Label ="OK"
       Dlg3.getControl("CommandButton1").Model.Align = 1
       ' -- Bouton Annuler
       Dlg3.getControl("CommandButton2").Label ="Annuler"
       Dlg3.getControl("CommandButton2").Model.Align = 1
       ' -- choix par défaut = TypeDBList (3) = "postgresql"
       Dlg3.getControl("ComboBox1").text ="postgresql"
       Dlg3.getControl("ComboBox1").Model.Align = 1
       ' -- liste de selection
       Dlg3.setTitle("Type de Base de donnée")
       Dlg3.getControl("ComboBox1").addItems(TypeDBList, 0)
     
    'Lance l'exécution de la boite de dialogue   
    Dlg3.execute
    TypeDB = Dlg3.getControl("ComboBox1").text         'Récupère le choix
     
     
    'Demande les paramètres de connexion à la base postgres, car celle choisit par défaut, le type de base peut être changé.
    'Demande l'identifiant de connection à la base de donnée, par défaut: "Nom de la base de donnée"
    mabase = InputBox ("Nom de la base de Donnée?", "Mabase?" , "Nom de la base de donnée")
    'Demande l'identifiant de connection à la base de donnée, par défaut: "127.0.0.1"
    adresseIP = InputBox ("Adresse IP du serveur SQL?", "Adresse IP?", "127.0.0.1")
    'Demande l'identifiant de connection à la base de donnée, par défaut: "5432"
    port = InputBox ("Port de connexion au serveur SQL?", "Port SQL?", "5432")
    'Demande l'identifiant de connection à la base de donnée, par défaut: "postgres"
    Identifiant = InputBox ("Identifiant de connexion à la base de Donnée", "Identifiant", "postgres")
     
    'test si un des paramètre de connexion est manquant.
    if mabase="" then
    	goto MabaseEnd
    end if
    if adresseIP = "" then
    	goto AdresseIPEnd
    end if
    if port = "" then
    	goto PortEnd
    end if
    if Identifiant = "" then
    	goto IdPEnd
    end if
     
    'crée une boite de dialogue pour demander le mot de passe
    'Attention, la boite de dialogue est aussi à créer en cliquant droit dans l'onglet en bas de l'éditeur de macro sur "module", puis "Insérer" et "Boite de dialogue BASIC".
    'il faut ensuite ajouter les éléments suivant (bouton * 2, 1  zone de texte et 1 champ d'étiquette qui correspond, ici, au Label1)
    'Dans le bouton "OK", il faut aller dans propriété et aller à la ligne "Type de bouton" pour sélectionner "OK". Si vous ne le faite pas, le bouton sera inerte.
    'Dans le bouton "Annuler", il faut aller dans propriété et aller à la ligne "Type de bouton" pour sélectionner "Annuler". Si vous ne le faite pas, le bouton sera inerte.
    'Dans la zone de texte, il faut aller dans propriété et aller à la ligne "Caractère pour mot de passe" et metter ce que vous voulez. j'ai mis "*". Si vous ne le faite pas, le texte apparîtra en claire à l'écran.
    'Attention, il n'y aura pas d'autre sécurité que le fait de ne pas pouvoir lire le mot de passe tapé.
    Dim Dlg As Object, bibli As Object, monDialogue As Object, MotDePasse as string
    BasicLibraries.LoadLibrary("Standard")               'Chargement des bibliothèques
    DialogLibraries.LoadLibrary("Standard")
    bibli = DialogLibraries.GetByName("Standard")         
    monDialogue = bibli.GetByName("Dialog2")            'Accès au dialogue
    Dlg  = CreateUnoDialog(monDialogue)                 'Exécution du dialogue
       ' -- Bouton OK
       Dlg.getControl("CommandButton1").Label ="OK"
       Dlg.getControl("CommandButton1").Model.Align = 1
       ' -- Bouton Annuler
       Dlg.getControl("CommandButton2").Label ="Annuler"
       Dlg.getControl("CommandButton2").Model.Align = 1
       ' -- label
       Dlg.getControl("Label1").text ="Veullez saisir votre mot de passe"
       Dlg.getControl("Label1").Model.Align = 1
       ' -- Boite
       Dlg.setTitle("Mot de Passe")
     
    'Lance l'exécution de la boite de dialogue   
    Dlg.execute
    MotDePasse = Dlg.getControl("TextField1").text         'Récupère le texte saisi
    'se connecte à la base de donnée
    sURL  = "sdbc:" & TypeDB & ":dbname=" & mabase & " hostaddr=" & adresseIP & " port=" & port &" user=" & Identifiant &" password=" & MotDePasse
    oDBContext = CreateUnoService("com.sun.star.sdbc.DriverManager")
    oBase = oDBContext.getConnection(sURL)
    oStatement = oBase.createStatement()  
     
    'strSQLCA = "Requette SQL sur une seul ligne"
    strSQLCA = "Select CA.code, CA.libelle, Client.name From codeA as CA LEFT JOIN Client ON Client.id = CA.id_client Where Client.id > 40 ORDER BY CA.code, Client.name"
    'exécute la requete SQL pour CA_prod
    oRequeteCA = oStatement.executeQuery( strSQLCA )
    i = 0
    FinJ = 7
    'écrit la première ligne => Header
    cel_obj = FCAProd.getCellByPosition(0, 0)
    cel_obj.string = "code"
    cel_obj = FCAProd.getCellByPosition(1, 0)
    cel_obj.string = "libelle"
    cel_obj = FCAProd.getCellByPosition(2, 0)
    cel_obj.string = "Nom_Client"
     
    'Stoque le résultat dans la feuille CA_prod
    If Not IsNull(oRequeteCA) Then 
    	While oRequeteCA.next
    		i = i + 1
    		for j = 1 to FinJ
    			cel_obj = FCAProd.getCellByPosition(j - 1, i)
    			cel_obj.string = oRequeteCA.getString(j)
    		next
    	Wend 
    End If 
    oRequeteCA.Close
    oStatement.Close 
    oBase.Close 
    oBase.Dispose
    goto finSub
     
    MabaseEnd:
    MsgBox("Il faut indiquer le nom de la base de donnée, relancer la macro car elle se termine maintenant", 0, "Attention !!!")
    goto finSub
     
    AdresseIPEnd:
    MsgBox("Il faut idiquer l'adresse du serveur SQL, relancer la macro car elle se termine maintenant", 0, "Attention !!!")
    goto finSub
     
    PortEnd:
    MsgBox("Il faut renseigner le numéro de port pour accéder au serveur SQL, relancer la macro car elle se termine maintenant", 0, "Attention !!!")
    goto finSub
     
    IdPEnd:
    MsgBox("Il faut indiquer un identifien de connexion pour accéder à la base de donnée, relancer la macro car elle se termine maintenant", 0, "Attention !!!")
    goto finSub
     
    msgbox "Terminé"
    finSub:
    end sub

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

Discussions similaires

  1. Affecter le résultat d'une requête SQL dans une variable
    Par Tsumago dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/04/2013, 01h19
  2. Réponses: 5
    Dernier message: 26/02/2008, 12h45
  3. Récuperer le résultat d'une requête SQL dans une variable
    Par DashRendar dans le forum Accès aux données
    Réponses: 3
    Dernier message: 24/01/2008, 11h04
  4. Réponses: 13
    Dernier message: 26/07/2007, 08h50

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