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 :

Se connecter à une base de donnée par macro [OpenOffice][Base de données]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut Se connecter à une base de donnée par macro
    Bonjour,

    J'ai créé une base de données "TrocVelo.odb"

    J'ai une table appelée "Clients" qui contient diverses colonnes dont une appelée "NumClient". Ce champ continent des entiers.
    Je veux trouver la nombre maximum contenu dans ce champ "NumClient" sachant que chaque numéro est unique.

    J'ouvre ma base de données puis j'accède aux macros contenue dans la base de données (j'enregistre la macro dans le fichier de la base de données).
    Actuellement, la macro est en cours de développement et donc je la fait se dérouler ligne par ligne via Macro - Editer puis, une fois la macro choisie F8 pour exécuter chaque ligne.

    Mais dès le début, ça coince !

    Je tente de me connecter à la base de données par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    DataSource = DatabaseContext.getByName("TrocVelo")
    Si j'écris "TroVelo.odb" au lieu de "TrocVelo" j'ai le même problème : je reçois ce message d'erreur :
    Une exception s'est produite :
    Type: com.sun.star.container.NoSuchElementException
    Message: TrocVelo.
    En fait, je veux trouver le nombre maximum puis l'incrémenter de 1 lorsque je créerai un nouvel enregistrement. Cela m'évitera d'avoir des doublons dans ces numéros de clients.

    Pouvez-vous m'aider à résoudre ce problème ?
    Version: 4.3.3.2
    Build ID: 430m0(Build:2)

    Merci

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Si tu es dans la même base, il suffit de faire quelque chose comme cela :
    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
    sub dernierEnregistrement()
        'Attention, il ne faut pas qu'il y est d'espace dans le chemin et le nom du fichier sinon le mettre en dur
        cheminBdd = ConvertFromURL(ThisComponent.getURL) 
        oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
        oDB = oDBContext.getByName(cheminBdd)
        oBase = oDB.getConnection("","") 
        oStatement = oBase.createStatement() 
        strSQL = "SELECT max(NumClient) dernier FROM Clients"
        oRequete = oStatement.executeQuery( strSQL )
        If Not IsNull(oRequete) Then
          While oRequete.next
            MsgbBx "Le nouveau numéro est : " & Cint(oRequete.getString(1))+1
          Wend
        End If
        oRequete.Close
        oStatement.Close
        oBase.Close
        oBase.Dispose   
    end sub
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut
    Bonjour zoom61,

    Merci pour ta suggestion mais j'ai encore le même problème :
    J'exécute la macro ligne par ligne (F8).
    À la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cheminBdd = ConvertFromURL(ThisComponent.getURL)
    cheminBdd a bien l'adresse de la base de données en question
    "/media/CORSAIR/Base_donnees_Troc_velos/TrocVelo.odb"
    mais à l'exécurion de la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    oDB = oDBContext.getByName(cheminBdd)
    Pan ! le message d'erreur :
    Erreur d'exécution BASIC.
    Une exception s'est produite :
    Type: com.sun.star.container.NoSuchElementException
    Message: /media/CORSAIR/Base_donnees_Troc_velos/TrocVelo.odb
    Il avait des espaces dans le nom du chemin vers la base de donnée => j'ai remplacé par le trait de soulignement _.
    Puis j'ai supprimé les traits de soulignement.
    Il y avait des accents dans ce même nom => j'ai supprimé.

    Mais rien ne change quant aux résultats : même sanction.

    LibreOffice 4.3.3.2

    A+

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    As-tu essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cheminBdd = ConvertFromURL("/media/CORSAIR/Base_donnees_Troc_velos/TrocVelo.odb")
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut Même sanction
    Bonsoir,

    Hélas, même sanction.
    Erreur d'exécution BASIC.
    Une exception s'est produite :
    Type: com.sun.star.container.NoSuchElementException
    Message: /media/CORSAIR/Base_Donnees_Troc_Velos/TrocVelo.odb
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    oDB = oDBContext.getByName("/media/CORSAIR/Base_Donnees_Troc_Velos/TrocVelo.odb")
    même sanction.

    Et même si je déplace la base de données de la clé USB vers mon disque dur, même sanction.

    A+

  6. #6
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Rajoute au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim oDBContext As Object , oDB As Object , oBase As Object  
    Dim oStatement As Object , oRequete As Object 
    Dim strSQL As String
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut Même sanction !
    Bonjour zoom61,

    Merci pour ton aide mais j'y avais pensé mais la sanction reste la même.

    Une question : comme je suis déjà dans la base de données, et que j'essaie d'atteindre une de ses tables, comment se fait-il que je ne puisse pas y arriver ? Me connecter à une table dans laquelle je me trouve ... je ne comprends pas trop.
    Avec Calc, une fois le classeur ouvert, on peut accéder directement aux feuilles et aux cellules. Pourquoi pas ici dans Base ?

    A+

  8. #8
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Papy Octet Voir le message
    Une question : comme je suis déjà dans la base de données, et que j'essaie d'atteindre une de ses tables, comment se fait-il que je ne puisse pas y arriver ? Me connecter à une table dans laquelle je me trouve ... je ne comprends pas trop.
    Avec Calc, une fois le classeur ouvert, on peut accéder directement aux feuilles et aux cellules. Pourquoi pas ici dans Base ?
    Ce qui est étrange, c'est que cela fonctionne parfaitement, chez moi.
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  9. #9
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut Avec le fichier, peut-être ?
    Bonjour zoom61,

    Merci pour ton aide précieuse. C'est en effet assez "curieux" ce dysfonctionnement.

    Je joins la base de donnée sous un nom .odt (pour qu'il soit accepté pas le site. Il suffit de le renommer .odb.
    Peut-être que cela aidera à trouver une solution ?

    A+
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Je pense avoir trouvé, je me suis trompé c'est pas ConvertFromURL mais il faut mettre ConvertToURL
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  11. #11
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 211
    Points : 168
    Points
    168
    Billets dans le blog
    1
    Par défaut Ouf ! Ça fonctionne.
    Bonjour zoom61,

    Maintenant, ça fonctionne (après avoir corrigé les 2 petites fautes de frappe à "MsgbBx" qui devient "MsgBox".
    Un tout grand MERCI.

    Entre-temps, j'ai aussi posté ailleurs ici où de nombreux conseils m'ont été faits.
    On ne sait jamais. Ça peut toujours servir

    Encore Merci.
    A+

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/11/2014, 07h38
  2. Se connecter à une base de donnée Oracle par java
    Par ayoubkira dans le forum JDBC
    Réponses: 6
    Dernier message: 04/08/2010, 17h20
  3. Réponses: 3
    Dernier message: 24/04/2008, 09h13
  4. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2004, 15h05
  5. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/07/2004, 13h03

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