FAQ LibreOffice et Apache OpenOfficeConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 359, dernière mise à jour : 15 juillet 2017  Ajouter une question

 

Bienvenue sur la FAQ, elle a été réalisée pour répondre aux questions concernant les suites bureautiques Apache OpenOffice (AOO) et LibreOffice (LibO).

Si vous souhaitez participer pour l'améliorer, pour proposer vos contributions ou si vous constatez des erreurs dans cette page, n'hésitez-pas !!! Participez.


SommaireProgrammation OBasicOBasic : Base de données (8)
précédent sommaire suivant
 

Cet exemple effectue une requête dans la base de données enregistrée « Bibliography » (base démo fournie dans le pack d'installation Open Office).
Une base est dite enregistrée lorsque vous pouvez la visualiser en utilisant le menu Afficher/Sources de données (ou par la touche raccourci F4) depuis Tableur et Traitement de texte.

Pour enregistrer une base :

  • menu Outils ;
  • Options ;
  • sélectionnez « Base » dans l'arborescence ;
  • double cliquez sur « Bases de données » ;
  • cliquez sur le bouton « Nouveau » ;
  • utilisez le bouton « Parcourir » pour rechercher la base sur le disque ;
  • puis Validez en cliquant sur OK dans toutes les boîtes de dialogue.


Remarque :
Le nom des champs et des tables est encadré par des doubles guillemets dans la requête.
Code vb : Sélectionner tout
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
Sub RequeteBase_V01 
Dim oDBContext As Object , oDB As Object , oBase As Object  
Dim oStatement As Object , oRequete As Object 
Dim strSQL As String  
  
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
'Connexion à la base de données enregistrée "Bibliography"  
'(Base démo fournie dans le pack d'installation Open Office) 
  
  'Une base est dite enregistrée lorsque vous pouvez la visualiser 
  'en utilisant le menu Afficher/Sources de données(ou par la touche raccourci F4). 
    'Pour enregistrer une base : 
    'Menu Outils 
    'Options 
    'Sélectionnez "Base" dans l'arborescence 
    'Double cliquez sur "Bases de données" 
    'Cliquez sur le bouton "Nouveau" 
    'Utilisez le bouton "Parcourir" pour rechercher la base sur le disque 
    'Puis Validez en cliquant sur OK dans toutes les boîtes de dialogue.  
oDB = oDBContext.getbyName("Bibliography") 
  
'Si la base est protégée par un mot de passe, utilisez 
'oBase = oDB.getConnection("Login", "MotDePasse") 
oBase = oDB.getConnection("","")  
oStatement = oBase.createStatement()  
  
strSQL = "SELECT ""Identifier"",""Publisher"",""ISBN"" FROM ""biblio"" " & _ 
    "WHERE ""Author""='Böhm, Franz'" 
oRequete = oStatement.executeQuery( strSQL )  
  
If Not IsNull(oRequete) Then 
  While oRequete.next 
    MsgBox oRequete.getString(1) & " / " & _ 
      oRequete.getString(2) & " / " & oRequete.getString(3) 
  Wend 
End If 
  
oRequete.Close 
oStatement.Close 
oBase.Close 
oBase.Dispose 
End Sub

Cet autre exemple permet de se connecter à une base non enregistrée.
Code vb : Sélectionner tout
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
Sub RequeteBase_V02 
Dim oDBContext As Object , oDB As Object , oBase As Object  
Dim oStatement As Object , oRequete As Object 
Dim strSQL As String , Fichier As String 
  
Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb") 
  
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
oDB = oDBContext.getbyName(Fichier) 
  
oBase = oDB.getConnection("","")  
oStatement = oBase.createStatement()  
  
strSQL = "SELECT ""ID"",""Champ1"",""Champ2"" FROM ""maTable"" " & _ 
    "WHERE ""Champ2""=12345" 
oRequete = oStatement.executeQuery( strSQL )  
  
If Not IsNull(oRequete) Then 
  While oRequete.next 
    MsgBox oRequete.getString(1) & " / " & _ 
      oRequete.getString(2) & " / " & oRequete.getString(3) 
  Wend 
End If 
  
oRequete.Close 
oStatement.Close 
oBase.Close 
oBase.Dispose 
End Sub

Mis à jour le 26 août 2013 SilkyRoad zoom61

Comme vous pouvez le voir dans l'exemple précédent, la méthode getString permet de lire le contenu de la requête au format texte.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
'Vérifie que le résultat de la requête n'est pas vide. 
If Not IsNull(oRequete) Then 
  'Boucle sur chaque ligne résultat de la requête 
  While oRequete.next 
    'Exemple pour 3 champs type String. 
	'Les paramètres 1, 2 et 3 définissent les numéros de colonnes. 
    MsgBox oRequete.getString(1) & " / " & _ 
      oRequete.getString(2) & " / " & oRequete.getString(3) 
  Wend 
End If

Quelques méthodes disponibles en fonction du type de champ à lire dans la base :
Méthode (Type de donnée)
getString (String)
getBoolean (Boolean)
getDouble (Double)
getDate (Date)
getTime (Time)
getTimestamp (DateTime)

Exemple de lecture d'un champ Date au format JJ/MM/AA hh:mm:ss dans la base :
Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
If Not IsNull(oRequete) Then 
  While oRequete.next 
    MsgBox oRequete.getString(1) 'renvoie un format AAAA-MM-JJ 
  
    MsgBox oRequete.getDate(1)'.Year 'renvoie un format AAAA 
    'MsgBox oRequete.getDate(1).Month 'renvoie un format MM 
    'MsgBox oRequete.getDate(1).Day 'renvoie un format JJ 
  
    MsgBox oRequete.getTimestamp(1).Year 'renvoie un format AAAA 
    MsgBox oRequete.getTimestamp(1).Month 'renvoie un format MM 
    'MsgBox oRequete.getTimestamp(1).Day 'renvoie un format JJ 
    MsgBox oRequete.getTimestamp(1).Hours 'renvoie un format hh 
    'MsgBox oRequete.getTimestamp(1).Minutes 'renvoie un format mm 
    'MsgBox oRequete.getTimestamp(1).Seconds  'renvoie un format ss 
    'MsgBox oRequete.getTimestamp(1).HundredthSeconds   
  Wend 
End If

Mis à jour le 26 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub AjoutEnregistrement 
Dim oDBContext As Object , oDB As Object , oBase As Object  
Dim oStatement As Object , oRequete As Object 
Dim strSQL As String , Fichier As String 
  
Fichier = ConvertToURL("C:\Documents and Settings\mimi\OOoBase.odb") 
  
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
oDB = oDBContext.getbyName(Fichier) 
  
oBase = oDB.getConnection("","")  
oStatement = oBase.createStatement()  
  
'--- Ajoute un enregistrement --- 
strSQL = _ 
  "INSERT INTO ""maTable"" (""ChampTexte"", ""ChampNum"") Values('azerty', 12345)" 
oRequete = oStatement.executeQuery( strSQL )  
'-------------------------------- 
  
oRequete.Close 
oStatement.Close 
oBase.Close 
oBase.Dispose 
End Sub

Mis à jour le 31 juillet 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  
Sub SupprimerEnregistrement 
Dim oDBContext As Object , oDB As Object , oBase As Object  
Dim oStatement As Object , oRequete As Object 
Dim strSQL As String , Fichier As String 
  
Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb") 
  
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
oDB = oDBContext.getbyName(Fichier) 
  
oBase = oDB.getConnection("","")  
oStatement = oBase.createStatement()  
  
'Supprime les enregistrements si le Champ2 contient la valeur 12345 
strSQL = "DELETE FROM ""maTable"" WHERE ""Champ2""=12345 " 
oRequete = oStatement.executeQuery( strSQL )  
'------------------------------------------------------------------ 
  
oRequete.Close 
oStatement.Close 
oBase.Close 
oBase.Dispose 
End Sub

Mis à jour le 31 juillet 2013 SilkyRoad

Code vb : Sélectionner tout
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
  
Sub MiseAJourEnregistrement 
Dim oDBContext As Object , oDB As Object , oBase As Object  
Dim oStatement As Object , oRequete As Object 
Dim strSQL As String , Fichier As String 
  
Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb") 
  
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
oDB = oDBContext.getbyName(Fichier) 
  
oBase = oDB.getConnection("","")  
oStatement = oBase.createStatement()  
  
'Mise à jour d'enregistrements : 
'Insère le mot "Cloture" dans le Champ1 si le Champ2 contient la valeur 10 
strSQL = "UPDATE ""maTable"" SET ""Champ1""='Cloture' WHERE ""Champ2"" = 10" 
oRequete = oStatement.executeQuery( strSQL )  
'----------------------------- 
  
oRequete.Close 
oStatement.Close 
oBase.Close 
oBase.Dispose 
End Sub

Mis à jour le 31 juillet 2013 SilkyRoad

Code vb : Sélectionner tout
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
  
Sub CreerTable 
Dim oDBContext As Object , oDB As Object , oBase As Object  
Dim Fichier As String 
Dim NouvelleTable As Object, CollectionTables As Object, NouveauChamp As Object 
  
Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb") 
  
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
oDB = oDBContext.getbyName(Fichier) 
  
oBase = oDB.getConnection("","")  
  
  
'Création nouvelle table 
CollectionTables = oBase.Tables 
  
NouvelleTable = CollectionTables.createDataDescriptor 
NouvelleTable.Name = "gestionStock" 'nom de la nouvelle table 
  
'Description 1er champ 
NouveauChamp = NouvelleTable.Columns.createDataDescriptor 
NouveauChamp.Name = "NomProduit" 'nom champ 
NouveauChamp.Type = com.sun.star.sdbc.DataType.VARCHAR '(1) champ type texte 
NouveauChamp.Precision = 200 
NouvelleTable.Columns.appendByDescriptor(NouveauChamp) 'ajout du champ 
  
'Description 2eme champ 
NouveauChamp = NouvelleTable.Columns.createDataDescriptor 
NouveauChamp.Name = "NbStock" 'nom champ 
NouveauChamp.Type = com.sun.star.sdbc.DataType.INTEGER '(2) champ type numérique 
NouveauChamp.Precision = 10 
NouvelleTable.Columns.appendByDescriptor(NouveauChamp) 
  
'Insertion de la nouvelle table 
CollectionTables.appendByDescriptor(NouvelleTable) 
'---------------------------------------- 
  
oBase.Close 
oBase.Dispose 
End Sub

Mis à jour le 31 juillet 2013 SilkyRoad

Une source est dite enregistrée lorsque vous pouvez la visualiser en utilisant le menu Afficher/Sources de données (ou par la touche raccourci F4) depuis Tableur ou Traitement de texte.

Code vb : Sélectionner tout
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
Sub Integrer_SourceDonnees() 
Dim oDBContext As Object, oDataSource As Object  
Dim Source As String, Chemin As String 
Dim Array() 
  
'Le nom qui s'affichera quand vous visualiserez  
'la source depuis Tableur ou Traitement de texte (touche F4). 
Source = "OOoBase" 
'Répertoire contenant la base de données 
Chemin = ConvertToURL("C:\Documents and Settings\mimi\dossier") 
  
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
oDataSource = createUnoService("com.sun.star.sdb.DataSource") 
  
'Vérifie s'il existe déjà une base intégrée portant ce nom 
If oDBContext.hasByName(Source) then 
  MsgBox "Opération annulée. Vérifiez le nom." , , "Message" 
  Exit Sub 
End If 
  
'Attention au format URL: bien saisir un Slash / 
'Chemin & "/OOoBase.odb" correspond au chemin complet de votre base de données 
oDataSource.databaseDocument.storeAsURL(Chemin & "/OOoBase.odb", Array()) 
Chemin = "sdbc:dbase:" & Chemin  
  
oDBContext.registerObject(Source , oDataSource) 
  
oDataSource.setPropertyValue("URL", Chemin)  
oDataSource.databaseDocument.Store()'Sauvegarde 
'oDataSource.databaseDocument.Close(True) 
End Sub

Mis à jour le 31 juillet 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Desactiver_SourceDeDonnees() 
  Dim oDBContext As Object, Source As String 
  
  'Le nom de la source à désactiver 
  Source = "OOoBase" 
  oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") 
  
  If oDBContext.hasByName(Source) Then 
    oDBContext.revokeObject(Source) 
    Else 
    MsgBox "Opération annulée. Vérifiez le nom." , , "Message" 
  End If 
  
End Sub

Pour désactiver une source manuellement :
  • menu Outils ;
  • Options ;
  • sélectionnez « Base » dans l'arborescence ;
  • double cliquez sur « Bases de données » ;
  • sélectionnez une source dans la liste ;
  • cliquez sur le bouton « Annuler » pour désactiver la source de données ;
  • puis Validez en cliquant sur OK dans toutes les boîtes de dialogue ;
  • la source n'est plus visible en utilisant le menu Afficher/Sources de données (ou par la touche raccourci F4) depuis Tableur ou Traitement de texte.

Mis à jour le 31 juillet 2013 SilkyRoad

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique OpenOffice & LibreOffice : zoom61 -