Salut.
J’ai toujours quelques difficultés avec Base ; présentement, je m’emmêle les pinceaux avec « Commit », « Reload » et « Refresh ».
Petite base exemple :
test_base.odb (55.2 KB)
En fonction de ce que j’ai pu trouver, j’ai bricolé cette macro afin qu’à partir d’une table de valeurs par défaut comprenant 2 colonnes et 1 ligne, les 2 valeurs soient copiées dans les cellules correspondantes du formulaire de saisie (champs de table) de factures (afin d’éviter une saisie manuelle qui peut s’avérer vite fastidieuse).
Sub InsertionAnneeMois()
Dim Context As Object
Dim Database As Object
Dim Connection As Object
Dim Statement As Object
Dim strSQL As String
Dim oForm As Object
Dim oDate As Object
Context = CreateUnoService("com.sun.star.sdb.DatabaseContext")
Database = Context.GetByName("test_base")
Connection = Database.GetConnection("","")
Statement = Connection.CreateStatement()
strSQL = "INSERT INTO T_FACTURES (FAC_ANNEE, MOI_ID) SELECT VDE_ANNEE, VDE_MOIS FROM T_VALEURS_DEFAUT"
Statement.ExecuteUpdate(strSQL)
Connection.Close()
oForm = ThisComponent.DrawPage.Forms.GetByName("frmFacturation")
oForm.Reload()
oForm.Last()
End Sub
La macro plante au niveau de Statement.ExecuteUpdate(strSQL), indiquant que je cherche à insérer une valeur NULL dans un champ NOT NULL. Je pense qu’il s’agit d’une question de « rafraîchissement » du formulaire qui s’effectue avant que toutes les données soient saisies.
Mode opératoire actuel :
- Bouton « Nouvel enregistrement » (voir macro correspondante).
- Bouton « Insérer année et mois ».
L’idéal serait d’exécuter les deux macros en un seul bouton.
Je vous remercie par avance.