Sqlexecute in loop, but execute just once...

Bonjour tout le monde,

(je ne sais pas si il y a une section presentation, mais sinon moi c’est Thibault :slight_smile: )

je fais quelques petit dveloppement mais l j’ai un probleme que je n’arrive pas rsoudre, du coup je me permet de me tourner vers la communaut pour tenter de trouver un nouvelle approche ma problmatique.

[code]
try
selectedArticle= Sage.SQLSelect("SELECT F_ARTICLE.AR_REF as ref FROM F_ARTICLE LEFT OUTER JOIN F_ARTSTOCK ON F_ARTICLE.AR_REF=F_ARTSTOCK.AR_Ref WHERE AR_Sommeil=0 AND F_ARTSTOCK.AS_QteSto=0 AND F_ARTSTOCK.DE_NO=1 ")

if selectedArticle<>NIL then

while not selectedArticle.EOF
  Dim ref as string= selectedArticle.Field("ref").StringValue
  
  dim selectedCommand as Recordset= Sage.SQLSelect("SELECT Count(DO_DATE) as compteur FROM F_DOCLIGNE WHERE AR_REF='"+ref+"' AND DO_DATE>{d '"+SelectedDate+"'} AND DO_DOMAINE=0 ")
  
  if selectedCommand <>NIL then
    
    dim compteur as Integer= selectedCommand.Field("compteur").IntegerValue
    if compteur=0 then
      try
        
        dim UpdateSommeil as string="UPDATE F_ARTICLE SET AR_SOMMEIL=1 WHERE AR_REF='"+ref+"' "
        Sage.SQLExecute(UpdateSommeil)    //---> Ligne 1
        
        app.mCompteur=app.mCompteur+1
        MessageBox(ref+" "+compteur.ToString+EndOfLine+EndOfLine+UpdateSommeil) //--> ligne 2
      Catch error As DatabaseException
        MessageBox("DB Error: " + error.Message)
      catch errnil as NilObjectException
        MessageBox("Nil2: " + errnil.Message)
      end try
      
    end if
    
  end if
  selectedArticle.movenext
  
wend
MessageBox("Mise  jour termine"+EndOfLine+EndOfLine+app.mCompteur.ToString+" article(s) mis en sommeil")

end if

selectedArticle.close

Catch error As DatabaseException
MessageBox("DB Error: " + error.Message)

catch errnil as NilObjectException
MessageBox("Nil Error: " + errnil.Message)

end try[/code]
Les messageBox sont l pour m’aider trouver mon probleme et ne font pas parti du code final prvu hein :slight_smile:
J’ai une RecordSet qui me renvoie 13 enregistrement dans mes tests. J’ai la meme problmatique avec RowSet et une boucle “for each … as …”, j’ai essay.
Quand je commente la ligne 1, la ligne 2 est bien excut 13 fois (au passage avec la bonne requte SQL qui s’affiche)
Par contre si je laisse la ligne 1 et que le SQLexecute se lance, il s’arrte 1 et ne fais pas les 13 enregistrements qui seraient censer passer dans ma boucle…

N’essayez pas de retarder la boucle en utilisant le sommeil. Au lieu de cela, excutez la requte l’aide d’un minuteur qui effectue la requte une fois par vnement.
Vous pouvez compter le nombre de fois qu’il s’est excut si vous le souhaitez, en utilisant peut-tre une variable statique.

Je pense qu’il faut que tu remette le Recordset au dbut aprs la premire boucle, en utilisant la fonction MoveFirst, ou MoveToFirstRow si tu utilise l’API 2.
Boucle 1
selectedArticle.MoveFirst
Boucle 2

attention movefirst ne marche qu’avec certaines databases (et pas beaucoup !)

C’est bon savoir.
a fonctionne avec SqLite et MySQL.

Ha oui petite prcision, et j’aurais du le faire ds le debut

Base SQLServer, connect par driver ODBC.

Je vais essayer de regarder ca et je vous dit :slight_smile: