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]

Répondre à