Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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