Difference between revisions of "FR/FAQ/Base/FAQ MS Access et Base"
Line 226: | Line 226: | ||
==Comment puis-je utiliser des contrôles calculés dans mes formulaires et rapports ?== | ==Comment puis-je utiliser des contrôles calculés dans mes formulaires et rapports ?== | ||
− | Dans Base, les | + | 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=== | ===A l'aide d'une requête=== |
Revision as of 22:10, 6 October 2007
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 Connecting to 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
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.
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.
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.
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.
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.
Is a Form in Base different from a Form in MSA?
Yes. There are very real differences between how Forms are implemented in Access and Base.
Virtual forms within Base forms
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.
Where are the Delete / Update queries?
Base does not currently support building delete / insert / update queries in the designer.
Equivalent actions
using the Query Designer
You can achieve the equivalent actions in the GUI using the designer and or SQL commands.
using a macro
I want to filter my form based on the contents of a combobox?
Converting my VBA modules to Base modules
What happened to me?
There is no exact duplicate to the ME pseudo variable in VBA.
In Access VBA 'me' has attributes of two separate objects in OOoBasic: TextDocument and DataForm
The TextDocument object would be used for controlling the window size and placement on the screen for instance.
The DataForm meanwhile supports result set functions, such as 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.
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 )
sub onButtonClick( oEv as object ) ' oEv is the event object passed automatically ' it has a property SOURCE which is the ' button that initiated this call dim oForm as variant oForm = oEv.Source.Model.Parent ' oForm is now the virtual form objct dim oDocument as variant oDocument = thisComponent ' oDocument is now the textDocument displayed in ' the window on screen end sub
Where is findfirst?
Base does not appear to have a FindFirst function on the rowset like MS Access, what is the equivalent Base function?
MSAccess VBA example:
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.
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 "No entry found" Else Form_F_Prospects.Bookmark = me.recordsetclone.Bookmark End If End Sub
For this type of simple single column search it is easy enough to create our own find first equivalent with OOoBasic:
Sub Find_Combo_AfterUpdate( OEv as Object) ' Oev is the event object automatically sent ' to sub procedure call ' Oev will have a property Source ' that is the control that triggered ' the call to this procedure Dim oForm as variant ' The dataform obejct Dim oComboBox as variant ' The combobox control Dim oBkMark as variant oForm = oEv.Source.Model.Parent oComboBox = oForm.getByName( "Find_Combo" ) oBkMark = FindFirst( oForm.CreateResultSet(), "Prospect_ID", oComboBox.Text ) ' oForm.CreateResultSet() is equivilant here to me.recordsetclone if not IsEmpty( oBkMark ) then oForm.moveToBookmark( oBkMark ) else msgBox( oComboBox.Text & " not found" ) end if end sub
function FindFirst( oRS as variant, ColName as string, SearchVal as string ) as variant ' oRS is a resultSet object ' ColName is the name of a column in the resultset ' SearchVal is 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
How do I set the filter for a sub-form only?
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 foncyionnalité. 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 ' Where oForm is a DataForm object ' NOTE you could do exactly the same thing with ' a resultSet or rowSet obejct also ' oStatement = OResultSet.ActiveConnection.CreateStatement oStatement.execute( "SELECT * FROM ""tContacts""" )
Par ailleurs, la ligne VBA
DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" )
nous pousserait à utiiser la méthode executeUpdate sur une instruction
oStatement.executeUpdate( "DELETE FROM ""tContacts"" WHERE ""Status"" = 'INACTIVE'" )
La règle génétale é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.
If I use Lookup fields/columns in my Access tables what can I do in Base?
There are two parts to this answer, given that Base does not support Lookup column types in 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.
In a table view ( double clicking on the table name ) there is no equivalent to this.
How do I use Domain Aggregate functions in 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.
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.