Difference between revisions of "FR/FAQ/Base/FAQ MS Access et Base"

From Apache OpenOffice Wiki
< FR‎ | FAQ‎ | Base
Jump to: navigation, search
(Deleted link to category 'Quality Assurance')
 
(39 intermediate revisions by 6 users not shown)
Line 5: Line 5:
 
Veuillez néanmoins essayer de proposer des questions et des réponses d'ordre général. Si une réponse concerne une fonctionnalité spécifique à une version de MSA, veuillez indiquer le numéro de version.
 
Veuillez néanmoins essayer de proposer des questions et des réponses d'ordre général. Si une réponse concerne une fonctionnalité spécifique à une version de MSA, veuillez indiquer le numéro de version.
  
'''Specifically, please only update the wiki if you have an answer for the question you are adding.''' ( ''If you may need to get back shortly with the answer don't let that stop you from getting the question in first however - just come back before long'' )  
+
'''En particulier, ne faites un ajout au wiki que si vous proposez une réponse à la question que vous posez.''' ( ''Si vous pensez revenir rapidement avec la réponse, n'hésitez pas à inscrire la question d'abord, - mais revenez vite'')
  
For asking '''specific questions''' or for general help it would be appropriate to then ask on either the:
+
Si vous avez des '''questions particulières''' ou si vous cherchez de l'aide en général, vous pouvez vous diriger vers [http://fr.openoffice.org/servlets/SummarizeList?listName=users la liste de discussion des utilisateurs Francophones].  
[http://www.oooforum.org/forum/viewforum.phtml?f=10 Base Forum]
 
or on 
 
[http://dba.openoffice.org/servlets/ProjectMailingListList the Base users mailing list].
 
  
== Est-ce que je peux utiliser les bases de données Access avec OOo Base ? Can I use Microsoft Access databases (.mdb) in Base? ==
+
== Est-ce que je peux utiliser les bases de données MS Access avec Base ? ==
  
On Windows: yes. You cannot open them directly via <code>File|Open</code>, but you can access the data therein. For this, you need an Open Document Base file (*.odb), which holds the connection information. For details see [[Connecting to Microsoft Access]].
+
Sous Windows : oui. Vous ne pouvez les ouvrir directement avec <code> Fichier|Ouvrir</code>, mais vous pouvez accéder aux données qu'elles contiennent. Pour cela, vous avez besoin d'un document Base qui contient les informations de connexion. Pour plus de détails, voir [[Fr.openoffice.org/FAQ/Base/Se connecter à une base Microsoft Access|Se connecter à une base Microsoft Access]].
  
You can modify the data in the tables and you can add and remove records.
+
Vous pouvez modifier les données dans les tables, et vous pouvez ajouter ou supprimer des enregistrements.
You can create new tables, but you cannot alter the structure of existing tables.
+
Vous pouvez créer de nouvelles tables mais vous ne pouvez pas modifier la structure des tables existantes.
  
Queries in MS Access are shown as views in the table container. You can use the query results, but you have no access to the underlying definitions and you cannot alter them.
+
Les requêtes MS Access sont affichées comme des vues dans la zone des tables. Vous pouvez utiliser le résultat des requêtes mais vous n'avez pas accès aux définitions sous-jacentes, et vous ne pouvez pas les modifier.
  
You cannot read MS Access forms or reports.
+
Vous ne pouvez pas lire les formulaires et les rapports MS Access.
  
== Can I read my Base database from MS Access? ==
+
==Est-ce que je peux lire ma base de données Base avec MS Access ?==
There is no way to use the table linking mechanism in Access to connect to a Base database.
 
  
It is possible for a Base database to update data in the Access database. At this time this will require however that the Access database be opened and locked by the Base file.
+
Il est impossible d'utiliser le mécanisme de liaisons de tables de MS Access pour se connecter à une base de données Base.
  
Data could also be passed back to the Access database by creating a linked CSV file in the Base database. Then linking to this CSV file to a table in the Access database.
+
Il est possible de mettre à jour des données dans une base de données MS Access depuis une base de données Base. À l'heure actuelle, cela impose que la base de données MS Access soit ouverte et verrouillée par le document Base.
  
== Can I create an Access database (mdb file) with Base? ==
+
Des données peuvent également être renvoyée vers une base de données MS Access en créant une table liée à un fichier CSV dans la base de données Base et en liant ce fichier à une table dans la base de données MS Access.
  
No. Base can not create a new Access database file; or new tables, queries, forms etc. within an existing mdb file.
+
== Puis-je créer une base de données MS Access (fichier mdb) avec Base? ==
  
== Can I create a Switchboard in Base? ==
+
Non. Base ne permet pas de créer de nouvelles bases MS Access ni de nouvelles tables, requêtes ou formulaires dans une base existante.
  
Base does not currently have a switchboard style form wizard. It is possible to achieve a very similar effect however using either of two techniques.
+
== Puis-je créer un Menu Général dans Base? ==
  
=== Opening a default form via a macro ===
+
Base n'offre pas pour le moment d'assistant pour créer un Menu Général. Il est possible néanmoins d'aboutir à un résultat similaire en utilisant l'une ou l'autres de ces deux techniques:
  
=== Using a stand alone form to launch the Base database ===
+
=== En ouvrant un formulaire par défaut par macro ===
== Our Access databases uses "Workgroup Security" to control group/user permission to view/maintain data? ==
 
  
This question points out what is a fundamental difference between OOoBase and MS Access (MSA). In the case of MSA there is one and only one database engine in use - although you may link tables in MSA to external datasource - MS Jet is still the only database engine actually used by MSA.
+
=== En utilisant un formulaire autonome pour lancer la base de données Base ===
  
In Base (OOoBase) this is not the case at all. The Base database document is simply a front end (client application) to a variety of database engines. In one of these forms it embeds a HSQLDB database into the ODB file itself, many people simply see this as the only Base database format. That is totally mistaken. In this instance of an embedded database there is no support for multiple users and of course no support for groups therefore. However, that is only one of the ways Base can be configured.
+
== Notre base MS Access utilise "Workgroup Security" pour gérer les  droits des groupes/utilisateurs à voir/modifier les données? ==
  
You are free to use Base as the front end to a HSQLDB database in server mode. HSQLDB is a very small footprint, low administration database engine and in server mode has full support for users / groups. For larger numbers of users you could just as easily configure Base to work with MySQL, PostgreSQL, Firebird, Oracle, or MS SQL Server.
+
Cette question met en évidence une différence fondamentale entre OOoBase et MS Access (MSA). Dans le cas de MSA, il y a un et un seul moteur de base de données - même s'il est possible de lier des tables dans MSA à des bases de données externes - MS Jet est finalement le seul moteur réellement utilisé par MSA.
  
There is another significant difference between MSA and Base regarding this then. In MSA you would deploy one MDB (or one of its variants ) file, then have each user in the workgroup see this file and open it.
+
Dans Base (OOoBase) ce n'est pas du tout le cas. Le fichier base de données de Base est simplement un frontal (application client) de différents moteurs de bases de données. Sous l'une de ses formes, il incorpore une base HSQLDB à l'intérieur même du fichier ODB et beaucoup pensent qu'il s'agit là du seul format de base de données disponible. Ce qui est complètement faux. Pour poursuivre avec cet exemple de base incorporée, on ne bénéficie dans ce cas d'aucun support pour les accès concurrents (multi-utilisateurs) et donc par conséquent pas de support pour la notion de groupe. Mais ce n'est que l'une des façons de configurer Base.
  
In Base each user would have their own ODB file and each of these would be connected to the shared data server. In this way each user would have their own space for custom queries and reports - but it makes distribution of common forms, queries and reports more work.
+
Vous pouvez librement utiliser Base comme frontal pour une base HSQLDB en mode serveur. HSQLDB est un moteur de base de données de très faible encombrement et dont l'administration est très allégée. En mode serveur, il fournit un support complet pour les notions d'utilisateurs et de groupes. Lorsqu'un grand nombre d'utilisateurs doit être géré vous pouvez tout aussi facilement configurer Base de manière à interfacer des bases comme MySQL, PostgreSQL, Firebird, Oracle, ou MS SQL Server.
  
== Is a Form in Base different from a Form in MSA? ==
+
Pour poursuivre sur ce thème, il a encore une autre différence entre MSA et Base. Sous MSA, vous déployez un fichier MDB (ou l'une de ses variantes) auquel accède chaque utilisateur du groupe. Avec Base, chaque utilisateur reçoit son propre fichier ODB et chacun se connecte au serveur des données partagées. De cette manière, chacun dispose de son propre espace pour ses requêtes et ses rapports, mais celà complique le déploiement des formulaires, requêtes et rapports communs.
  
Yes.  There are very real differences between how Forms are implemented in Access and Base.
+
== Un formulaire Base est-il différent d'un formulaire MSA ? ==
  
=== Virtual forms within Base forms ===
+
Oui. Il y a des différences importantes dans la façon dont sont implémentés les formulaires dans Access et dans Base.
  
Virtual forms in Base are called "subforms". You can manage them opening the form in Edit mode and then clicking on "Form Navigator", in "Form Design" toolbar.
+
=== Des formulaires virtuels dans des formulaires Base ===
  
== Where are the Delete / Update queries? ==
+
Dans Base, les formulaires virtuels sont appelés "sous-formulaires". Vous pouvez les gérer en ouvrant le formulaire en mode édition puis en cliquant sur le bouton "Navigateur de formulaire", dans la barre d'outils "Conception de formulaire".
Base does not currently support building delete / insert / update queries in the designer.
 
  
=== Equivalent actions ===  
+
== Où sont les instructions INSERT, UPDATE , DELETE ? ==
==== ''using the Query Designer'' ====
+
Base ne supporte pas actuellement la construction d'instructions d'effacement, d'insertion ou de mise à jour dans le concepteur de requêtes.
You can achieve the equivalent actions in the GUI using the designer and or SQL commands.
 
  
==== ''using a macro'' ====
+
=== Actions équivalentes ===
 +
==== ''Au moyen de <code>Outils|SQL ...</code>'' ====
 +
Vous pouvez exécuter ces instructions dans l'interface graphique à l'aide de <code>Outils|SQL ...</code>.
  
== I want to filter my form based on the contents of a combobox? ==
+
La syntaxe supportée dépend du moteur de base de données auquel votre document Base est connecté. Consultez la documentation du moteur de base de données concerné.
  
== Converting my [[VBA]] modules to Base modules ==
+
==== ''Au moyen d'une macro'' ====
  
=== What happened to me? ===
+
== Je voudrais filtrer mon formulaire à partir du contenu d'une liste combinée ==
  
There is no exact duplicate to the ME pseudo variable in VBA.
+
== Conversion de mes modules [[VBA]] en modules Base ==
  
In Access VBA 'me' has attributes of two separate objects in OOoBasic:
+
=== Qu'est-il arrivé à "me" ? ===
TextDocument and DataForm
 
  
The TextDocument object would be used for controlling the window size and placement on the screen for instance.  
+
Il n'y a pas de réplique exacte à la pseudo variable ME de VBA.
  
The DataForm meanwhile supports result set functions, such as First, Filter, InsertRow.
+
Sous Access VBA, "me" possède les attributs de deux objets distincts dans OOoBasic :
 +
TextDocument et DataForm. L'objet TextDocument est employé par exemple pour contrôler la taille de la fenêtre et son placement sur l'écran. DataForm, quant à lui, supporte les fonctions d'ensemble de résultats, comme First, Filter, InsertRow.
  
In OOoBasic the pseudo variable thisComponent normally would be the TextDocument, while thisComponent.DrawPage.Forms(0) meanwhile would reference the first DataForm owned by the TextDocument.
+
En OOoBasic la pseudo variable thisComponent serait normalement de type TextDocument, alors que thisComponent.DrawPage.Forms(0) référencerait le premier DataForm possédé par TextDocument.
  
Perhaps a still closer equivalent is to use the object ownership hierarchy to get to the form. For example, if we had a single table form with a button, then in the macro called by the 'onClick' (or as OOBase calls it the 'When initializing' event) we would do this: Create a macro in a library named onButtonClick( oEv as object )
+
Peut-être un équivalent plus proche est d'utiliser la hiérarchie des propriétaires de l'objet pour remonter au formulaire. Par exemple, si nous avons une simple table et un bouton, alors  nous ferions ceci dans la macro appelée par l'événement "onClick" (ou, comme OOBase l'appelle, l'événement "Sur initialisation") : Création d'une macro dans une bibliothèque nommée onButtonClick(oEv as object)
  
 
     sub onButtonClick( oEv as object )
 
     sub onButtonClick( oEv as object )
       ' oEv is the event object passed automatically
+
       ' oEv est l'objet événement passé automatiquement
       ' it has a property SOURCE which is the
+
       ' il a une propriété SOURCE qui représente
       ' button that initiated this call
+
       ' le bouton qui a initié cet appel
 
      
 
      
 
       dim oForm as variant
 
       dim oForm as variant
 
      
 
      
 
       oForm = oEv.Source.Model.Parent
 
       oForm = oEv.Source.Model.Parent
       ' oForm is now the virtual form objct
+
       ' oForm est maintenant l'objet formulaire virtuel
 
        
 
        
 
       dim oDocument as variant
 
       dim oDocument as variant
 
        
 
        
 
       oDocument = thisComponent
 
       oDocument = thisComponent
       ' oDocument is now the textDocument displayed in
+
       ' oDocument est maintenant le textDocument affiché
       ' the window on screen
+
       ' dans la fenêtre à l'écran
 
      
 
      
 
     end sub
 
     end sub
  
=== Where is findfirst? ===
+
=== Où est findfirst ? ===
  
Base does not appear to have a FindFirst function on the rowset like MS Access, what is the equivalent Base function?
+
Base ne dispose pas d'une fonction FindFirst sur l'ensemble de lignes comme MS Access. Quel est la fonction équivalente dans Base ?
  
MSAccess VBA example:
+
Exemple en VBA sous MSAccess :
  
Say there is a VB combo box which lists all the prospects in the database and allows the user to select a particular prospect and then have the form automatically go to that person's data record.
+
Soit une liste combinée qui liste tous les prospects dans la base de données et permet la sélection de l'un d'eux, de manière que le formulaire présente automatiquement les données de celui-ci.
  
 
   Private Sub Find_Combo_AfterUpdate()
 
   Private Sub Find_Combo_AfterUpdate()
Line 122: Line 117:
 
   Me.recordsetclone.FindFirst (strCriteria)
 
   Me.recordsetclone.FindFirst (strCriteria)
 
   If me.recordsetclone.NoMatch Then
 
   If me.recordsetclone.NoMatch Then
       MsgBox "No entry found"
+
       MsgBox "Aucune donnée trouvée"
 
   Else
 
   Else
 
       Form_F_Prospects.Bookmark = me.recordsetclone.Bookmark
 
       Form_F_Prospects.Bookmark = me.recordsetclone.Bookmark
Line 129: Line 124:
 
   End Sub
 
   End Sub
  
For this type of simple single column search it is easy enough to create our own find first equivalent with OOoBasic:
+
Pour ce type de recherche mono-colonne, il nous est facile de créer notre propre équivalent de findfirst en OOoBasic :
  
 
  Sub Find_Combo_AfterUpdate( OEv as Object)
 
  Sub Find_Combo_AfterUpdate( OEv as Object)
     ' Oev is the event object automatically sent
+
     ' Oev est l(objet événement envoyé automatiquement lors de l'appel
     ' to sub procedure call
+
     ' de la procédure
     ' Oev will have a property Source
+
     ' Oev a une propriété Source
     ' that is the control that triggered
+
     ' qui désigne le contrôle qui a déclenché
     ' the call to this procedure
+
     ' l'appel à cette procédure
 
    
 
    
   Dim oForm as variant ' The dataform obejct
+
   Dim oForm as variant ' l'objet formulaire de données
 
    
 
    
   Dim oComboBox as variant ' The combobox control
+
   Dim oComboBox as variant ' la liste combinée
 
    
 
    
 
   Dim oBkMark as variant
 
   Dim oBkMark as variant
Line 149: Line 144:
 
      
 
      
 
   oBkMark = FindFirst( oForm.CreateResultSet(), "Prospect_ID", oComboBox.Text )
 
   oBkMark = FindFirst( oForm.CreateResultSet(), "Prospect_ID", oComboBox.Text )
       ' oForm.CreateResultSet() is equivilant here to me.recordsetclone
+
       ' ici oForm.CreateResultSet() est équivalent à me.recordsetclone
 
   if not IsEmpty( oBkMark ) then
 
   if not IsEmpty( oBkMark ) then
 
   oForm.moveToBookmark( oBkMark )
 
   oForm.moveToBookmark( oBkMark )
 
   else
 
   else
   msgBox( oComboBox.Text & " not found" )
+
   msgBox( oComboBox.Text & " non trouvé" )
 
   end if
 
   end if
 
    
 
    
Line 159: Line 154:
  
 
  function FindFirst( oRS as variant, ColName as string, SearchVal as string ) as variant
 
  function FindFirst( oRS as variant, ColName as string, SearchVal as string ) as variant
         ' oRS is a resultSet object
+
         ' oRS est un objet ResultSet
         ' ColName is the name of a column in the resultset
+
         ' ColName est le nom d'une colonne dans l'ensemble résultat
         ' SearchVal is
+
         ' SearchVal est
 
     dim colIDX as integer
 
     dim colIDX as integer
 
     dim NotFound as variant
 
     dim NotFound as variant
Line 182: Line 177:
 
  end function
 
  end function
  
=== How do I set the filter for a sub-form only? ===
+
=== Comment positionner un filtre pour un sous-formulaire seulement ? ===
  
=== Is there an equivalent to DoCmd RunSQL ===
+
=== Existe-t-il un équivalent à DoCmd RunSQL ? ===
  
Yes, in OOoBase you would use either a Statement or PreparedStatement object to achieve the same function. With OOoBase you must also decide between using execute and executeUpdate.
+
Oui, dans OOoBase, on utilise soit un objet '''Statement''' soit un objet '''PreparedStatement''' pour réaliser la même fonctionnalité. Dans OOoBase nous devrons également choisir d'utiliser '''execute''' ou '''executeUpdate'''.
  
For example if you had the VBA line
+
Par exemple ligne VBA
 
   DoCmd RunSQL( "SELECT * FROM tContacts" )
 
   DoCmd RunSQL( "SELECT * FROM tContacts" )
  
it would become in OOoBase
+
devient dans OOoBase
 
    
 
    
 
   Dim oStatement as variant
 
   Dim oStatement as variant
 
    
 
    
 
   oStatement = OForm.ActiveConnection.CreateStatement
 
   oStatement = OForm.ActiveConnection.CreateStatement
     ' Where oForm is a DataForm object
+
     ' oForm est un objet DataForm
     ' NOTE you could do exactly the same thing with
+
     ' NOTE vous pourriez réaliser exactement la même chose
     ' a resultSet or rowSet obejct also
+
     ' avec un objet resultSet ou rowSet, comme ceci
 
     ' oStatement = OResultSet.ActiveConnection.CreateStatement
 
     ' oStatement = OResultSet.ActiveConnection.CreateStatement
 
    
 
    
 
   oStatement.execute( "SELECT * FROM ""tContacts"""  )
 
   oStatement.execute( "SELECT * FROM ""tContacts"""  )
 
    
 
    
If on the other hand the VBA line where
+
Par ailleurs, la ligne VBA
 
   DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" )
 
   DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" )
  
then we would use the executeUpdate method on a statement
+
nous pousserait à utiliser la méthode executeUpdate sur une instruction
  
 
   oStatement.executeUpdate( "DELETE FROM ""tContacts"" WHERE ""Status"" = 'INACTIVE'"  )
 
   oStatement.executeUpdate( "DELETE FROM ""tContacts"" WHERE ""Status"" = 'INACTIVE'"  )
  
The rule is -
+
La règle générale étant :
*if your SQL statement will return records you use execute or executeQuery.
+
*si l'instruction SQL renvoie des enregistrements, alors utiliser execute or executeQuery.
*if the SQL statement returns no records then you must use executeUpdate.
+
*si l'instruction SQL ne renvoie pas d'enregistrements, alors utiliser executeUpdate.
  
== If I use Lookup fields/columns in my  Access tables what can I do in Base? ==
+
== Si j'utilise des champs ou des colonnes de recherche dans mes tables Access, que puis-je faire sous Base ? ==
There are two parts to this answer, given that Base does not support Lookup column types in tables.
+
Cette réponse est en deux parties car Base ne supporte pas les colonnes de recherche dans les tables.
  
When a table is displayed in a custom form use of a bound listbox will give you the same functionality. An example of [[adding a listbox to a form]] and to a grid control on a form is at this page.
+
Lorsqu'une table est affichée dans un formulaire personnalisé, une boîte liste vous donne les mêmes fonctionnalités. Pour un exemple de l'ajout d'une boîte liste dans un formulaire et à contrôle grille sur un formulaire, voir [[cette page]].
  
In a table view ( double clicking on the table name ) there is no equivalent to this.
+
En vue table (en double cliquant le nom de la table), il n'existe pas d'équivalent.
  
==How do I use Domain Aggregate functions in Base?==
+
==Comment utiliser les fonction d'agrégat de domaine sous Base ?==
  
Domain Aggregate functions such as '''DCount''', '''DLookup''', '''DMax''' etc have no direct equivalent in Base. You will have to write or design queries to return these results using the appropriate SQL functions.
+
Les fonctions d'agrégat de domaine telles que '''DCount''', '''DLookup''', '''DMax''' etc. n'ont pas d'équivalent direct sous Base. Vous devez écrire des requêtes retournant ces résultats au moyen des fonction SQL appropriées.
  
==How do I add Calculated Controls to my forms and reports?==
+
==Comment puis-je utiliser des contrôles calculés dans mes formulaires et rapports ?==
  
Controls in Base forms and reports cannot be used to perform calculations. There are two methods available to get a calculated result on a form or report.
+
Dans Base, les formulaires et les rapports ne peuvent pas être employés pour réaliser des calculs. Il existe deux moyens d'obtenir un résultat calculé dans un formulaire ou un rapport.
  
===Using a query===
+
===A l'aide d'une requête===
Modify the underlying data source of the form or report to perform the calculation for each record and return the result as a (calculated) field.
+
Modifiez la source de données du formulaire ou du rapport afin qu'elle réalise le calcul pour chaque enregistrement. Le résultat sera retourné dans un champ (calculé).
  
===Using a macro===
+
===A l'aide d'une macro===
If you need your control to update as data is entered into a form, you will need to write a small macro to perform the calculation and assign it to an appropriate event on one of the data entry controls (e.g. the Text modified event).
+
Si le contrôle doit se mettre à jour à la volée pendant la saisie de données dans un formulaire, vous devrez écrire une petite macro qui réalisera le calcul. Vous en assignerez le résultat à l'événement approprié de l'un des contrôles de saisie de données (par ex. l'événement "Texte modifié").
  
 
''Autor: [mailto:atjensen@openoffice.org?subject:OOoWiki MSA-Base Faq] [[User:DrewJensen|Drew]] 21:01, 11 September 2007 (CEST) '<br>
 
''Autor: [mailto:atjensen@openoffice.org?subject:OOoWiki MSA-Base Faq] [[User:DrewJensen|Drew]] 21:01, 11 September 2007 (CEST) '<br>
Line 239: Line 234:
 
acknowledge of the author or the [http://wiki.services.openoffice.org/wiki/Project_Lead OOo QA Project Lead/Co-Leads].''
 
acknowledge of the author or the [http://wiki.services.openoffice.org/wiki/Project_Lead OOo QA Project Lead/Co-Leads].''
  
[[Category:Quality Assurance]]
 
 
[[Category:Database]]
 
[[Category:Database]]
 
[[Category:Base Documentation]]
 
[[Category:Base Documentation]]
 
[[Category:User FAQ]]
 
[[Category:User FAQ]]
 +
 +
[[Category: FR/Documentation/FAQ/Base]]

Latest revision as of 08:51, 30 March 2010

Questions fréquentes et réponses pour les utilisateurs migrant de Microsoft Access (MSA) vers OpenOffice.org Base.

Ce document est le fruit des efforts de la communauté des utilisateurs - participez à améliorer la base de connaissance si vous le pouvez.

Veuillez néanmoins essayer de proposer des questions et des réponses d'ordre général. Si une réponse concerne une fonctionnalité spécifique à une version de MSA, veuillez indiquer le numéro de version.

En particulier, ne faites un ajout au wiki que si vous proposez une réponse à la question que vous posez. ( Si vous pensez revenir rapidement avec la réponse, n'hésitez pas à inscrire la question d'abord, - mais revenez vite)

Si vous avez des questions particulières ou si vous cherchez de l'aide en général, vous pouvez vous diriger vers la liste de discussion des utilisateurs Francophones.

Est-ce que je peux utiliser les bases de données MS Access avec Base ?

Sous Windows : oui. Vous ne pouvez les ouvrir directement avec Fichier|Ouvrir, mais vous pouvez accéder aux données qu'elles contiennent. Pour cela, vous avez besoin d'un document Base qui contient les informations de connexion. Pour plus de détails, voir Se connecter à une base Microsoft Access.

Vous pouvez modifier les données dans les tables, et vous pouvez ajouter ou supprimer des enregistrements. Vous pouvez créer de nouvelles tables mais vous ne pouvez pas modifier la structure des tables existantes.

Les requêtes MS Access sont affichées comme des vues dans la zone des tables. Vous pouvez utiliser le résultat des requêtes mais vous n'avez pas accès aux définitions sous-jacentes, et vous ne pouvez pas les modifier.

Vous ne pouvez pas lire les formulaires et les rapports MS Access.

Est-ce que je peux lire ma base de données Base avec MS Access ?

Il est impossible d'utiliser le mécanisme de liaisons de tables de MS Access pour se connecter à une base de données Base.

Il est possible de mettre à jour des données dans une base de données MS Access depuis une base de données Base. À l'heure actuelle, cela impose que la base de données MS Access soit ouverte et verrouillée par le document Base.

Des données peuvent également être renvoyée vers une base de données MS Access en créant une table liée à un fichier CSV dans la base de données Base et en liant ce fichier à une table dans la base de données MS Access.

Puis-je créer une base de données MS Access (fichier mdb) avec Base?

Non. Base ne permet pas de créer de nouvelles bases MS Access ni de nouvelles tables, requêtes ou formulaires dans une base existante.

Puis-je créer un Menu Général dans Base?

Base n'offre pas pour le moment d'assistant pour créer un Menu Général. Il est possible néanmoins d'aboutir à un résultat similaire en utilisant l'une ou l'autres de ces deux techniques:

En ouvrant un formulaire par défaut par macro

En utilisant un formulaire autonome pour lancer la base de données Base

Notre base MS Access utilise "Workgroup Security" pour gérer les droits des groupes/utilisateurs à voir/modifier les données?

Cette question met en évidence une différence fondamentale entre OOoBase et MS Access (MSA). Dans le cas de MSA, il y a un et un seul moteur de base de données - même s'il est possible de lier des tables dans MSA à des bases de données externes - MS Jet est finalement le seul moteur réellement utilisé par MSA.

Dans Base (OOoBase) ce n'est pas du tout le cas. Le fichier base de données de Base est simplement un frontal (application client) de différents moteurs de bases de données. Sous l'une de ses formes, il incorpore une base HSQLDB à l'intérieur même du fichier ODB et beaucoup pensent qu'il s'agit là du seul format de base de données disponible. Ce qui est complètement faux. Pour poursuivre avec cet exemple de base incorporée, on ne bénéficie dans ce cas d'aucun support pour les accès concurrents (multi-utilisateurs) et donc par conséquent pas de support pour la notion de groupe. Mais ce n'est que l'une des façons de configurer Base.

Vous pouvez librement utiliser Base comme frontal pour une base HSQLDB en mode serveur. HSQLDB est un moteur de base de données de très faible encombrement et dont l'administration est très allégée. En mode serveur, il fournit un support complet pour les notions d'utilisateurs et de groupes. Lorsqu'un grand nombre d'utilisateurs doit être géré vous pouvez tout aussi facilement configurer Base de manière à interfacer des bases comme MySQL, PostgreSQL, Firebird, Oracle, ou MS SQL Server.

Pour poursuivre sur ce thème, il a encore une autre différence entre MSA et Base. Sous MSA, vous déployez un fichier MDB (ou l'une de ses variantes) auquel accède chaque utilisateur du groupe. Avec Base, chaque utilisateur reçoit son propre fichier ODB et chacun se connecte au serveur des données partagées. De cette manière, chacun dispose de son propre espace pour ses requêtes et ses rapports, mais celà complique le déploiement des formulaires, requêtes et rapports communs.

Un formulaire Base est-il différent d'un formulaire MSA ?

Oui. Il y a des différences importantes dans la façon dont sont implémentés les formulaires dans Access et dans Base.

Des formulaires virtuels dans des formulaires Base

Dans Base, les formulaires virtuels sont appelés "sous-formulaires". Vous pouvez les gérer en ouvrant le formulaire en mode édition puis en cliquant sur le bouton "Navigateur de formulaire", dans la barre d'outils "Conception de formulaire".

Où sont les instructions INSERT, UPDATE , DELETE ?

Base ne supporte pas actuellement la construction d'instructions d'effacement, d'insertion ou de mise à jour dans le concepteur de requêtes.

Actions équivalentes

Au moyen de Outils|SQL ...

Vous pouvez exécuter ces instructions dans l'interface graphique à l'aide de Outils|SQL ....

La syntaxe supportée dépend du moteur de base de données auquel votre document Base est connecté. Consultez la documentation du moteur de base de données concerné.

Au moyen d'une macro

Je voudrais filtrer mon formulaire à partir du contenu d'une liste combinée

Conversion de mes modules VBA en modules Base

Qu'est-il arrivé à "me" ?

Il n'y a pas de réplique exacte à la pseudo variable ME de VBA.

Sous Access VBA, "me" possède les attributs de deux objets distincts dans OOoBasic : TextDocument et DataForm. L'objet TextDocument est employé par exemple pour contrôler la taille de la fenêtre et son placement sur l'écran. DataForm, quant à lui, supporte les fonctions d'ensemble de résultats, comme First, Filter, InsertRow.

En OOoBasic la pseudo variable thisComponent serait normalement de type TextDocument, alors que thisComponent.DrawPage.Forms(0) référencerait le premier DataForm possédé par TextDocument.

Peut-être un équivalent plus proche est d'utiliser la hiérarchie des propriétaires de l'objet pour remonter au formulaire. Par exemple, si nous avons une simple table et un bouton, alors nous ferions ceci dans la macro appelée par l'événement "onClick" (ou, comme OOBase l'appelle, l'événement "Sur initialisation") : Création d'une macro dans une bibliothèque nommée onButtonClick(oEv as object)

   sub onButtonClick( oEv as object )
     ' oEv est l'objet événement passé automatiquement
     ' il a une propriété SOURCE qui représente 
     ' le bouton qui a initié cet appel
   
     dim oForm as variant
   
     oForm = oEv.Source.Model.Parent
      ' oForm est maintenant l'objet formulaire virtuel
     
     dim oDocument as variant
     
     oDocument = thisComponent
      ' oDocument est maintenant le textDocument affiché
      ' dans la fenêtre à l'écran
   
   end sub

Où est findfirst ?

Base ne dispose pas d'une fonction FindFirst sur l'ensemble de lignes comme MS Access. Quel est la fonction équivalente dans Base ?

Exemple en VBA sous MSAccess :

Soit une liste combinée qui liste tous les prospects dans la base de données et permet la sélection de l'un d'eux, de manière que le formulaire présente automatiquement les données de celui-ci.

 Private Sub Find_Combo_AfterUpdate()
 Dim strCriteria As String
 
 strCriteria = "[Prospect_ID] =" & Me.Find_Combo
 
 Me.recordsetclone.FindFirst (strCriteria)
 If me.recordsetclone.NoMatch Then
     MsgBox "Aucune donnée trouvée"
 Else
     Form_F_Prospects.Bookmark = me.recordsetclone.Bookmark
 End If
 
 End Sub

Pour ce type de recherche mono-colonne, il nous est facile de créer notre propre équivalent de findfirst en OOoBasic :

Sub Find_Combo_AfterUpdate( OEv as Object)
   ' Oev est l(objet événement envoyé automatiquement lors de l'appel
   ' de la procédure
   ' Oev a une propriété Source
   ' qui désigne le contrôle qui a déclenché
   ' l'appel à cette procédure
 
 Dim oForm as variant ' l'objet formulaire de données 
 
 Dim oComboBox as variant ' la liste combinée
 
 Dim oBkMark as variant
 
 oForm = oEv.Source.Model.Parent
 
 oComboBox = oForm.getByName( "Find_Combo" )
   
 oBkMark = FindFirst( oForm.CreateResultSet(), "Prospect_ID", oComboBox.Text )
     ' ici oForm.CreateResultSet() est équivalent à me.recordsetclone
 if not IsEmpty( oBkMark ) then
 		oForm.moveToBookmark( oBkMark )
 else
 	msgBox( oComboBox.Text & " non trouvé" )
 end if
 
end sub
function FindFirst( oRS as variant, ColName as string, SearchVal as string ) as variant
       ' oRS est un objet ResultSet
       ' ColName est le nom d'une colonne dans l'ensemble résultat
       ' SearchVal est
   dim colIDX as integer
   dim NotFound as variant
 
   FindFirst = notFound
   colIDX = oRS.FindColumn( ColName )
   oRS.First
   do 
     if oRS.getString( colIDX ) <> Searchval
       oRS.Next
       if oRS.isAfterLast then
         exit do
       endif
     else
       FindFirst = oRS.getBookMark
       exit do
     end if
   loop while oRS.isAfterLast <> True
 
end function

Comment positionner un filtre pour un sous-formulaire seulement ?

Existe-t-il un équivalent à DoCmd RunSQL ?

Oui, dans OOoBase, on utilise soit un objet Statement soit un objet PreparedStatement pour réaliser la même fonctionnalité. Dans OOoBase nous devrons également choisir d'utiliser execute ou executeUpdate.

Par exemple ligne VBA

 DoCmd RunSQL( "SELECT * FROM tContacts" )

devient dans OOoBase

 Dim oStatement as variant
 
 oStatement = OForm.ActiveConnection.CreateStatement
   ' où oForm est un objet DataForm
   ' NOTE vous pourriez réaliser exactement la même chose
   ' avec un objet resultSet ou rowSet, comme ceci
   ' oStatement = OResultSet.ActiveConnection.CreateStatement
 
 oStatement.execute( "SELECT * FROM ""tContacts"""  )
 

Par ailleurs, la ligne VBA

 DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" )

nous pousserait à utiliser la méthode executeUpdate sur une instruction

 oStatement.executeUpdate( "DELETE FROM ""tContacts"" WHERE ""Status"" = 'INACTIVE'"  )

La règle générale étant :

  • si l'instruction SQL renvoie des enregistrements, alors utiliser execute or executeQuery.
  • si l'instruction SQL ne renvoie pas d'enregistrements, alors utiliser executeUpdate.

Si j'utilise des champs ou des colonnes de recherche dans mes tables Access, que puis-je faire sous Base ?

Cette réponse est en deux parties car Base ne supporte pas les colonnes de recherche dans les tables.

Lorsqu'une table est affichée dans un formulaire personnalisé, une boîte liste vous donne les mêmes fonctionnalités. Pour un exemple de l'ajout d'une boîte liste dans un formulaire et à contrôle grille sur un formulaire, voir cette page.

En vue table (en double cliquant le nom de la table), il n'existe pas d'équivalent.

Comment utiliser les fonction d'agrégat de domaine sous Base ?

Les fonctions d'agrégat de domaine telles que DCount, DLookup, DMax etc. n'ont pas d'équivalent direct sous Base. Vous devez écrire des requêtes retournant ces résultats au moyen des fonction SQL appropriées.

Comment puis-je utiliser des contrôles calculés dans mes formulaires et rapports ?

Dans Base, les formulaires et les rapports ne peuvent pas être employés pour réaliser des calculs. Il existe deux moyens d'obtenir un résultat calculé dans un formulaire ou un rapport.

A l'aide d'une requête

Modifiez la source de données du formulaire ou du rapport afin qu'elle réalise le calcul pour chaque enregistrement. Le résultat sera retourné dans un champ (calculé).

A l'aide d'une macro

Si le contrôle doit se mettre à jour à la volée pendant la saisie de données dans un formulaire, vous devrez écrire une petite macro qui réalisera le calcul. Vous en assignerez le résultat à l'événement approprié de l'un des contrôles de saisie de données (par ex. l'événement "Texte modifié").

Autor: MSA-Base Faq Drew 21:01, 11 September 2007 (CEST) '
Please do not change the logical content of this site without acknowledge of the author or the OOo QA Project Lead/Co-Leads.

Personal tools