Manuel NAUDIN a écrit :
est-ce tu exécutes ta requête sur un RowSet du formulaire ? Dans ce
cas, les données ne sont pas vraiment écrites dans la base, mais
localement. Ce n'est qu'après avoir validé la saisie (bouton
enregistrer dans la barre de navigation formulaire) que les données
sont inscrites dans la base. je ne connais pas l'équivalent macro,
mais Xray sur le formulaire ou le rowset devrait aider.
Manuel
ben en fait, ma macro contient une ligne oconnexion.executequery(SQL1)
dans laquelle SQL1 est la requête qui convient.
le texte de la macro est en fin de mail.
voici les extraits qui me tracassent : le premier est la source de
données, le deuxième est la première requête (on efface les résultats
précédents pour les remplacer par d'autres), le troisième est la seconde
requête (on met les nouveaux résultats dans la base) le dernier est la
clotûre de connexion.les deux requêtes sont incluses dans une boucle, ce
qui fait qu'à chaque lancement de la macro, il y a potentiellement 30
requêtes delete suivies de 30 requêtes insert.
oContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oSource=oContext.GetByName("escape5")
oConnexion=oSource.getconnection("","")
oStatement = oConnexion.CreateStatement()
SQL1 = "DELETE FROM ""resultats"" WHERE ""res_eleve_id""
=" & "'" & a & "'" & " AND ""res_evaluation"" =" & b & " AND
""res_numero"" =" & c
effacement=oStatement.executeQuery(SQL1)
g = "INSERT INTO
""resultats""(""res_eleve_id"",""res_evaluation"",""res_appreciation"",""res_numero"",""res_repere"")
VALUES("
SQL2 = g & "'" & a & "'" & "," & b & "," & d & "," &
c & "," & "'" & ores_repere & "'" & ")"
phrase ="les instructions" & SQL1 & " et " & SQL2 &
" sont effectuées."
resultat=oStatement.executeQuery(SQL2)
subsubsubsubform.Reload
oConnexion.close
oConnexion.dispose
comme les requêtes existent (voir la variable texte "phrase" du
troisième extrait) il est facile de faire une sauvegarde texte. mais il
devrait y avoir plus simple non?
oContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oSource=oContext.GetByName("escape5")
oConnexion=oSource.getconnection("","")
oStatement = oConnexion.CreateStatement()
'contenu de la boucle
for i = 1 to 30
ocolonne = 1+i
ocase = feuille.getCellByPosition(ocolonne, 4)
ores = ocase.Value
a = oeleveid
b = oevaluid
d = ores
e = otrimestre
f = oindice
h = omatiere
n = left(oannee,4)
if i < 10 then
c ="0"&i
Else
c=i
End if
if f < 10 then
l ="0"&f
Else
l=f
End if
if h < 10 then
k ="0"
m = k & h
Else
m=h
End if
ores_repere = "m" & m & "r" & n & e & "i" & l & "n" & c
'si il n'y a pas de nouvelle saisie on ne fait rien, sinon
if ores <> 0 Then
'on supprime l'enregistrement existant s'il existe
SQL1 = "DELETE FROM ""resultats"" WHERE ""res_eleve_id""
=" & "'" & a & "'" & " AND ""res_evaluation"" =" & b & " AND
""res_numero"" =" & c
effacement=oStatement.executeQuery(SQL1)
'si la saisie est s comme effacer, on ne fait plus rien,
pas besoin de le remplacer, sinon
if ores<>21 Then
'on néglige les s, et on insère les nouveaux résultats
g = "INSERT INTO
""resultats""(""res_eleve_id"",""res_evaluation"",""res_appreciation"",""res_numero"",""res_repere"")
VALUES("
SQL2 = g & "'" & a & "'" & "," & b & "," & d & "," &
c & "," & "'" & ores_repere & "'" & ")"
phrase ="les instructions" & SQL1 & " et " & SQL2 &
" sont effectuées."
resultat=oStatement.executeQuery(SQL2)
subsubsubsubform.Reload
End if
End if
Next i
'fin de la boucle
subsubsubform.next
mazone = feuille.getCellRangebyName("C4:AF4")
gomme = com.sun.star.sheet.CellFlags.STRING
mazone.clearContents(gomme)
ocasedebut = feuille.getCellByPosition(2, 3)
doc.currentController.Select(ocasedebut)
oConnexion.close
oConnexion.dispose
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]