Difference between revisions of "FR/FAQ/Base/FAQ MS Access et Base"
(Deleted link to category 'Quality Assurance') |
|||
(40 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | Questions fréquentes et réponses pour les utilisateurs migrant de [[Microsoft Access]] vers OpenOffice.org [[Base]]. | + | 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. | 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 [http://fr.openoffice.org/servlets/SummarizeList?listName=users la liste de discussion des utilisateurs Francophones]. | |
− | [http:// | ||
− | |||
− | |||
− | == Est-ce que je peux utiliser les bases de données Access avec | + | == 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 <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]]. | |
− | + | 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. | |
− | Base | + | == 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". | |
− | Base | ||
− | == | + | == 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 <code>Outils|SQL ...</code>'' ==== | ||
+ | Vous pouvez exécuter ces instructions dans l'interface graphique à l'aide de <code>Outils|SQL ...</code>. | ||
− | + | 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 ) | sub onButtonClick( oEv as object ) | ||
− | ' oEv | + | ' 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 | dim oForm as variant | ||
oForm = oEv.Source.Model.Parent | oForm = oEv.Source.Model.Parent | ||
− | ' oForm | + | ' oForm est maintenant l'objet formulaire virtuel |
dim oDocument as variant | dim oDocument as variant | ||
oDocument = thisComponent | oDocument = thisComponent | ||
− | ' oDocument | + | ' oDocument est maintenant le textDocument affiché |
− | ' | + | ' dans la fenêtre à l'écran |
end sub | end sub | ||
− | === | + | === Où est findfirst ? === |
− | Base | + | Base ne dispose pas d'une fonction FindFirst sur l'ensemble de lignes comme MS Access. Quel est la fonction équivalente dans Base ? |
− | MSAccess | + | 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() | 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 " | + | 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 | ||
− | + | 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 | + | ' Oev est l(objet événement envoyé automatiquement lors de l'appel |
− | ' | + | ' de la procédure |
− | ' Oev | + | ' 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 ' | + | Dim oForm as variant ' l'objet formulaire de données |
− | Dim oComboBox as variant ' | + | 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() | + | ' 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 & " | + | 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 | + | ' oRS est un objet ResultSet |
− | ' ColName | + | ' ColName est le nom d'une colonne dans l'ensemble résultat |
− | ' SearchVal | + | ' 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 | ||
− | === | + | === 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" ) | DoCmd RunSQL( "SELECT * FROM tContacts" ) | ||
− | + | devient dans OOoBase | |
Dim oStatement as variant | Dim oStatement as variant | ||
oStatement = OForm.ActiveConnection.CreateStatement | oStatement = OForm.ActiveConnection.CreateStatement | ||
− | ' | + | ' où oForm est un objet DataForm |
− | ' NOTE | + | ' NOTE vous pourriez réaliser exactement la même chose |
− | ' | + | ' 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""" ) | ||
− | + | Par ailleurs, la ligne VBA | |
DoCmd RunSQL( "DELETE FROM tContacts WHERE Status = 'INACTIVE'" ) | 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'" ) | 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: [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: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.