#1 Le 01/12/2021, à 18:47
- Satanas410
LibreOffice Base
Bonjour à tous,
Je suis sous Ubuntu 20.04 et LibreOffice 7.2.3.2
J'écris une base de données pour gérer des clients(devis factures etc...)
J'ai un form client dans lequel j'ai ajouté une zone de liste. Je sélectionne un nom et voudrais que le formulaire m'affiche ce client à l'aide d'une macro à le perte de focus de cette zone de liste.
Je cherche de l'aide sur le net depuis deux jours et ne trouve rien. Je suis pourtant persuadé que la macro à écrire pour changer d'enregistrement ne doit pas être compliquée.
Merci de m'aider
Hors ligne
#2 Le 02/12/2021, à 13:42
- El Catala
Re : LibreOffice Base
Bonjour,
Voici une macro à adapter à votre cas . La première macro s' exécute après avoir sélectionné un élément dans votre liste déroulante. La deuxième est lancé lors de l' exécution de la première. Importatnt, La première macro est affecté dans l' index événement du formulaire au statut Modifiées.
Première macro:
Dim Frml As Object
Sub ListeCotation(oEv as Object)
Dim ValeurEc as String, DesignationChamp as string
Frml = thiscomponent.DrawPage.Forms.GetByIndex(0)
ValeurEc = oEv.source.SelectedItem
DesignationChamp = "NmrDsg"
' Recheche de la valeur sélectionnée
FchSlct(ValeurEc,DesignationChamp)
thiscomponent.currentcontroller.getControl(Frml.getByName("Numero")).setFocus
End sub
Deuxième macro:
Function FchSlct(DonneeEC as String,NomColonne as string)
Dim ValeurRch as string, ValeurTrv as string
Dim Enregistrement as Object, EnregistrementTrv as object
Dim Valeur as Boolean
Frml = thiscomponent.DrawPage.Forms.GetByIndex(0)
Enregistrement = Frml.createResultSet()
Enregistrement.beforeFirst
Valeur = false
Do while Enregistrement.next() and Valeur = false
EnregistrementTrv = Enregistrement.columns.getByName(NomColonne)
If DonneeEc = EnregistrementTrv.String Then
Valeur = true
Exit Do
End if
Loop
If Trv = true then
Frml.moveToBookmark(Enregistrement.Bookmark)
else
msgbox("Enregistrement non trouvé", 64)
End if
End Function
Voila la solution que j' utilise pour mettre à jour mes formulaires suite à une sélection dans un e liste de donnée.
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#3 Le 02/12/2021, à 13:54
- Satanas410
Re : LibreOffice Base
Merci, je vais tester cela et vous donner le résultat
Hors ligne
#4 Le 02/12/2021, à 16:29
- Satanas410
Re : LibreOffice Base
Je n'avance pas beaucoup et ai des réactions bizarres ! Peu être de ma zone de liste ? Je suis assez nul en basic et ne trouve rien pour m'aider sur le net...
Je vous donnerai la suite de mon travail.
Hors ligne
#5 Le 02/12/2021, à 17:56
- El Catala
Re : LibreOffice Base
Bonsoir,
Sinon vous postez une base exemple ne comportant aucune données personnelles et nous pourrons regarder votre problème.
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#6 Le 02/12/2021, à 19:03
- Satanas410
Re : LibreOffice Base
Merci, c'est très sympathique.
Je vais vous faire une petite Base test et vous faire parvenir le document
J'ai développé pas mal en Access mais il y a plus de 25 ans et ai bien perdu. Je désire refaire une appli sous Base mais il faut repartir!
Cordialement
Hors ligne
#7 Le 03/12/2021, à 10:30
- Satanas410
Re : LibreOffice Base
Je ne sais pas comment joindre la base
Hors ligne
#8 Le 04/12/2021, à 18:14
- El Catala
Re : LibreOffice Base
Bonsoir,
J' ai été un peu rapide, Au final, je ne suis pas sur que vous puissiez joindre un fichier .odb
Il y a bien ce tutoriel mais il n' est fait nulle part mention de ce type de fichier.
Doc Forum Ubuntu
Vous avez utilisé par le passé Access. Il existe un module qui permet d' utiliser Le VBA d' access dans LO.
Acces2Base
Si vous ne parvenez pas à joindre un exemple, je vous conseille de vous rapprocher du forum LO sur lequel vous trouverez plus d' information.
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#9 Le 05/12/2021, à 11:13
- Satanas410
Re : LibreOffice Base
Merci pour votre réponse.
J'ai crée en quelques minute une base test avec :
une table T_Test avec :
ID
Nom
Prenom
Un formulaire F_Form avec les 3 champs de la table
Puis une Zone de liste avec le champ Nom et votre macro en événement modifié
avec les corrections suivantes :
DesignationChamp = "Nom"
et thiscomponent.currentcontroller.getControl(Frml.getByName("ID")).setFocus
Ou est l'erreur ?
Merci de regarder cela.
Je vais regarder Acces2Base mais!!!
Cordialement
Hors ligne
#10 Le 05/12/2021, à 16:46
- El Catala
Re : LibreOffice Base
Bonsoir,
Il y a des baffes qui se perdent! J' ai bêtement recopié mes macros et modifiés les noms de variables sans revérifier. Il faut remplacer
If Trv = true then
Par:
If Valeur = true then
Autant pour moi.
Remarque:
Votre liste déroulante doit être basé sur le champ ID
La recherche se fait sur le champ Nom
La mise à jour du formulaire devra se faire:
thiscomponent.currentcontroller.getControl(Frml.getByName("Nom")).setFocus
Cordialement
Nota: Votre base est réalisé avec HSQLBD ou Firebird.
Dans le deuxième cas, vous risquer de rencontrer de nombreux problèmes lors de la réalisation de votre BD
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#11 Le 06/12/2021, à 17:36
- Satanas410
Re : LibreOffice Base
Un énorme merci.
J'ai fais les modifs hier soir dans ma base test et c'est super. Par contre, j'ai eu un problème pour intégrer la macro dans la base en construction. J'ai planté LibreOffice et il faut que je remette cela en route. Réinstallation pas facile !
Si vous avez la gentillesse de me donner des précisions entre HSQLBD et Firebird. cela m'évitera des recherches.
Cordialement
Hors ligne
#12 Le 06/12/2021, à 22:27
- El Catala
Re : LibreOffice Base
Bonsoir,
Jusqu' à il n'y a pas longtemps LO était livré avec HSQLBD comme moteur de BD. L' inconvénient est que ce moteur est monoposte. Les Développeurs ont voulu passer à Firebird qui permet du multipostes. Par contre, son intégration est loin d' être optimisée pour l' heure. Cela entraîne de nombreux dysfonctionnements qui ne sont pas toujours simple à résoudre. Aussi, sauf besoins particuliers, il est préférable, pour l' instant, de conserver HSQLBD.
Pour se faire, il faut aller dans:
Outils/Options/Avancé
Dans cet index, il faut décocher la case:
Activer les fonctions expérimentales
Cordialement
Pc portable HP Laptop 17
Xubuntu 24.04.1 lts
Dual boot Win 11
LibreCad 2.2 : Freecad 0.22: LibreOffice 24.8: Ancestris 0.12:
Hors ligne
#13 Le 07/12/2021, à 07:26
- Satanas410
Re : LibreOffice Base
Bonjour,
Merci pour ces précisions, j'ai encore appris quelque chose...
J'ai vérifié et c'est bon.
La macro tourne super dans ma base Test mais, un petit problème dans ma base de travail. Elle fait bien son travail de mise à jour mais s'arrête sur la Ligne
thiscomponent.currentcontroller.getControl(Frml.getByName("Nom")).setFocus
. J'ai pensé à l'index du Formulaire car j'en ai 6 dans ma base de travail et, pour voir, j'ai crée une second formulaire dans ma base Test. Là, elle se bloque aussi. Je ne sais pas où trouver l'index du Formulaire. Je vous donnerai la suite.
Cordialement,
Hors ligne
#14 Le 11/12/2021, à 15:11
- LeoMajor
Re : LibreOffice Base
salut,
A/ pour du ACCESS (*.mdb) ...
les bases de données avec ODBC, ne sont pas très pratiques à utiliser.
cat /etc/odbcinst.ini
[mdb]
Description=MDBTools Access Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so
UsageCount=1
FileUsage = 1
cat /etc/odbc.ini
[testmdb]
Description=MDB Access test database
Driver=mdb
Database=/home/toto/sql/Contacts_Demo_V1.01.mdb
isql testmdb <<< "select * from contacts "
B/ le plus portable est d'utiliser du sqlite3, utilisable directement, ou via odbc (facultatif)
cat /etc/odbcinst.ini
[sqlite3]
Description=SQLite3 ODBC Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libsqlite3odbc.so
Usagecount=1
cat /etc/odbc.ini
[testsql]
Description=SQLite3 test database
Driver=sqlite3
Database=/home/toto/sql/personnes
accessible via les commandes sqlite3 (recommande) ou via isql (odbc)
isql testsql <<< "select * from pers"
sqlite3 -cmd ".database" -cmd ".tables" -cmd ".fullschema" ~/sql/personnes "select * from pers;"
seq name file
--- --------------- ----------------------------------------------------------
0 main /home/toto/sql/personnes
__gb_metadata_v2 pers
CREATE TABLE "__gb_metadata_v2" ( "sTableName" TEXT NOT NULL , "iType" INT4 NOT NULL , "sKey" TEXT NOT NULL , "sValue" TEXT, PRIMARY KEY ("sTableName","iType","sKey") );
CREATE TABLE "pers" ( "id" INT4 NOT NULL , "ref" VARCHAR(8), "nom" VARCHAR(32), "prenom" VARCHAR(32), "adresse" VARCHAR(64), "code" INT4, "ville" VARCHAR(32), PRIMARY KEY ("id") );
/* No STAT tables available */
1||martin|pierre|1 rue des sables|13|marseille
2||dupont|philippe|place des tulipes|75|paris
3||kernadec|alicia|1024 la corniche|29|brest
4||brisac|patrick|23 allée des platriers|33|bordeaux
5||alister|christophe|52 rue de la république|67|strasbourg
6||coudrain|claude|59 avenue de paris|59|lille
7||boli|françois|lieu dit la montagnette|63|clermont
8||bartoli|laurence|1200 avenue des tournesols|69|lyon
C/ tu peux utiliser gambas3, si tu veux faire une application indépendante de libreoffice. Pratique et bien fait. importer, exporter, créer, editer, ...
Hors ligne
#15 Le 11/12/2021, à 20:16
- Satanas410
Re : LibreOffice Base
Merci pour tout cela.
Je vais regarder de plus près...
Mais je pense ne pas avoir tout compris !
Je vais déjà regarder gambas3
Hors ligne