LibreOffice Base (7+) : Comment copier le record actuel a la fin de la table et l'afficher (par bouton)
Méthode applicable par le biais d'un bouton et d'une macro disposé sur le formulaire de consultation des enregistrements de la table concerné.
1- ajouter une nouvelle macro au sein du document
Code:
1 2 3 4 5 6 7 8 9 10 11
| Sub DUPLIREC_ToLast()
DIM sVal,strSQL as string
Dim oStatement,oForm As Object
oForm = ThisComponent.Drawpage.Forms.getByName("Form_Inventaire")
sVal =oForm.getByName("txtNOM").text
oStatement = ThisDatabaseDocument.CurrentController.ActiveConnection.createStatement()
strSQL ="INSERT INTO TAB_INVENTAIRE(TYPE, SERIEDUTYPE, NOM, DATE_ACHAT, BUDGET_ACHAT, FOURNISSEUR, SERIALNUMBER, MARQUE, SYSTEMES, RAM, SSD, SALLE) SELECT TYPE, SERIEDUTYPE, NOM, DATE_ACHAT, BUDGET_ACHAT, FOURNISSEUR, SERIALNUMBER, MARQUE, SYSTEMES, RAM, SSD, SALLE FROM TAB_INVENTAIRE WHERE NOM='"+sval+"' ;"
oStatement.execute(StrSQL)
oForm.moveToInsertRow
oForm.Last
END SUB |
il est necessaire de changer le nom du formulaire, et celui du controle textbox: "txtNOM" et "Form_Inventaire" en fonction des vôtres.
il est nécéssaire de modifier la commande SQL en foncion du nom de votre table, et de vos champs de données necessaire à la copie: ( NOMS DE CHAMPS ET TABLE EN ITALIQUE )
INSERT INTO TAB_INVENTAIRE(TYPE, SERIEDUTYPE, NOM, DATE_ACHAT, BUDGET_ACHAT, FOURNISSEUR, SERIALNUMBER, MARQUE, SYSTEMES, RAM, SSD, SALLE)
SELECT TYPE, SERIEDUTYPE, NOM, DATE_ACHAT, BUDGET_ACHAT, FOURNISSEUR, SERIALNUMBER, MARQUE, SYSTEMES, RAM, SSD, SALLE FROM TAB_INVENTAIRE
WHERE NOM='"sval+"' ;"
ATTENTION CEPENDANT: IL EST EVIDEMENT IMPOSSIBLE DE COPIER DES CHAMPS DEFINI COMME CLE UNIQUE......., je présupose que vos enregistrements sont basés sur un identifiant unique autoincrémenté.
Citation:
traduction litterale de la commande SQL:
: j'insert dans un nouvel enregistrement les champs listé de la table cité
: je remplis les précédent champs avec une selection de champ a partir de la table cité
: mais seulement a partir de l'enregistrement qui contient la valeur contenu par le textbox actuel "txtNOM" du formulaire 'Form_Inventaire"
2 -poser un bouton sur le formulaire et associez lui sur l'évènement "éxecuter" la marco précédente
l'ajout du nouvel enregistrement se fait à la fin de la table, on fini donc la macro par un déplacement en fin de liste d'enregistrements.
Je vous conseil de lancer un rafraichissement du formulaire avant de pointer vers le dernier enregistrement. ( insérer votre fonction perso juste avant)