Vb6+parcours

Résolu
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007 - 27 nov. 2006 à 18:53
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007 - 29 nov. 2006 à 11:02
Salut,
voila mon code
-----------------------------------------
Private Sub Next_Click()
    Dim Fso
    Dim sQuery, sLogFile, sDate As String
    Dim oConn As New ADODB.Connection
    Dim oRs As New ADODB.Recordset
   
        sDate = Format(Date, "yyyymmdd")
        sLogFile = SourceDir + "LOG_" + sDate + ".dbf"
        oConn.open "provider=vfpoledb;data source=C:\;"
        sQuery = "Select file from " + sLogFile + " where status<>'o'"
        oRs.open sQuery, oConn
'        oRs.MoveNext
'        Browser1.Navigate oRs!file
        Do
        oRs.MoveNext
        Browser1.Navigate oRs!file
        Loop Until oRs.EOF = True
       
    oRs.Close
    oConn.Close
    Set oRs = Nothing
    Set oConn = Nothing
End Sub
------------------------------------------------
mais il ne fait pas la boucle comme il faut.
Pourriez vous m'aider.
Merci.

10 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 nov. 2006 à 20:19
Salut
Le problème, c'est que tu recherches les résultats à chaque fois que tu cliques sur Next, donc, c'est normal qu'il ne t'affiche que le premier enregistrement.
Il faut questionner la DB dans une procédure distincte qui ne sera exécutée qu'une seule fois, et ne garder que ces lignes dans ton Next_Click :
        oRs.MoveNext
        Browser1.Navigate oRs!file
Ce n'est pas le programme qui boucle, c'est toi en cliquant sur Next, donc pas de boucle.

Pour que cela marche, il faut bien sûr que 'oRs' soit accessible de n'importe où dans le code, donc il faut le dimensionner dans la partie déclaration de ta forme et penser à faire un oRs.Close avant de le réutiliser plus tard.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
28 nov. 2006 à 23:40
Je ne referai pas le programme, mais pour te donner une idée, voici comment je ferais, en espérant que je comprenne ton programme un peu...

Function LoadList() As Integer
    Dim Fso
    Dim sUrl$
    Dim i, iRec As Integer
    Dim sVal, sSheet, sQuery, sLogFile, sDate, sPath, first As String
'Mettre cette ligne en commentaire
'elle est déjà déclarée en entête de feuille
'    Dim oConn As New ADODB.Connection
  ' Dim oRs As New ADODB.Recordset
     sDate = Format(Date, "yyyymmdd")
     sLogFile = SourceDir + "LOG_" + sDate + ".dbf"
     Set Fso = CreateObject("Scripting.FileSystemObject")
     If Fso.fileexists(sLogFile) Then
        oConn.open "provider=vfpoledb;data source=C:\;"
        sQuery = "Select file from " + sLogFile + " where status<>'o'"
        oRs.open sQuery, oConn
        While oRs.EOF = False
        List1.AddItem oRs!file
        oRs.MoveNext
        Wend
        oRs.MoveFirst
        Browser1.Navigate oRs!file
'    oRs.Close
'Mettre la ligne suivante en commentaire pour garder la base active
  '  oConn.Close
    End If
'    Set Fso = Nothing
'    Set oRs = Nothing
'Mettre la ligne suivante en commentaire 
 ' Set oConn = Nothing
   
End Function Private Sub Next_Click()
    'Dim Fso
    'Dim sQuery,  sFile, si, sPath As String
    Dim sLogFile, sDate
'Mettre la ligne suivante en commentaire... déjà déclarée en entête de feuille
   ' Dim oConn As New ADODB.Connection
    'Dim oRs As New ADODB.Recordset
        sDate = Format(Date, "yyyymmdd")
        sLogFile = SourceDir + "LOG_" + sDate + ".dbf"
'Ces lignes sont déjà déclarées dans la procédure LoadList()
       ' oConn.open "provider=vfpoledb;data source=C:\;"
       ' sQuery = "Select file from " + sLogFile + " where status<>'o'"
       ' oRs.open sQuery, oConn
        If not oRs.EOF then ' à ajouter
            oRs.MoveNext
            Browser1.Navigate oRs!file
       End If  'à ajouter
'    oRs.Close
'    oConn.Close
'    Set oRs = Nothing
'    Set oConn = Nothing
'       i = 1
'        si = Str(i)
'        si = Format(si, "000000")
'        sDate = Format(Date, "yyyymmdd")
'        sPath = "D:\fdcTreat\EBP\Source\20061127"
'        sFile = sPath & "" & sDate & si & incremente & ".html"
      
      
End Sub

Ça donnerait quelque chose comme ça

Et lorsque tu termines le programme ou quand tu n'as plus besoin d'utiliser la base de données, tu mets ces lignes
    oRs.Close
    oConn.Close
    Set oRs = Nothing
    Set oConn = Nothing

MPi
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 nov. 2006 à 19:56
Salut
Ok, c'est du code ...
Mais qu'est-il sensé faire ?
C'est pas à ton gout Ok, mais dis nous ce qu'il devrait faire, ce qu'il fait, ce qui ne te plait pas ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
0
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007
27 nov. 2006 à 20:03
Salut,
Je veux à chaque fois que je clic sur le bouton next,le browser1 affiche la page html suivante et ainsi de suite jusqu'a la fin des pages existant dans la base de données.
Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007
28 nov. 2006 à 09:23
Salut,
voila mon code:
--------------------------------------
Const SourceDir = "d:\fdcTreat\EBP\Source"
Const ParamFile = "d:\fdcTreat\EBP\Parametres\EBP_PARAM.dbf"
Const LogFile = "d:\fdcTreat\EBP\Parametres\EBP_LOG.dbf"
Dim i As Integer
Dim oConn As New ADODB.Connection
Dim oRs As New ADODB.Recordset


 


Private Sub Browser1_StatusTextChange(ByVal Text As String)
'    Dim oConn As New ADODB.Connection
'    Dim oRs As New ADODB.Recordset
    sDate = Format(Date, "yyyymmdd")
    sLogFile = SourceDir + "LOG_" + sDate
    'Browser1.Navigate "D:\fdcTreat\EBP\Source\20061127\20061127000001.html"
End Sub


Private Sub Combo1_Change()
Dim sDate As String
sDate = Format(Date, "YYYYMMDD")
Combo1.AddItem sDate
End Sub


Private Sub Form_Resize()
    Browser1.Left = 0
    Browser1.Top = Combo1.Top + Combo1.Height
    Browser1.Width = Width * 1 / 3
    Browser1.Height = Height * 3 / 5
    Browser1.Width = 2 * Width / 3
    Browser1.Height = 4 * Height / 5
    List1.Top = Browser1.Top + Browser1.Height + 250
    List1.Left = 0
    List1.Height = Height / 12
    List1.Width = Width - 750


End Sub


Private Sub Load_Click()
    LoadList
End Sub
Function LoadList() As Integer
    Dim Fso
    Dim sUrl$
    Dim i, iRec As Integer
    Dim sVal, sSheet, sQuery, sLogFile, sDate, sPath, first As String
    Dim oConn As New ADODB.Connection
   ' Dim oRs As New ADODB.Recordset
     sDate = Format(Date, "yyyymmdd")
     sLogFile = SourceDir + "LOG_" + sDate + ".dbf"
     Set Fso = CreateObject("Scripting.FileSystemObject")
     If Fso.fileexists(sLogFile) Then
        oConn.open "provider=vfpoledb;data source=C:\;"
        sQuery = "Select file from " + sLogFile + " where status<>'o'"
        oRs.open sQuery, oConn
        While oRs.EOF = False
        List1.AddItem oRs!file
        oRs.MoveNext
        Wend
        oRs.MoveFirst
        Browser1.Navigate oRs!file
'    oRs.Close
    oConn.Close
    End If
'    Set Fso = Nothing
'    Set oRs = Nothing
    Set oConn = Nothing
   
End Function


Private Sub Next_Click()
    Dim Fso
    Dim sQuery, sLogFile, sDate, sFile, si, sPath As String
    Dim oConn As New ADODB.Connection
    'Dim oRs As New ADODB.Recordset
        sDate = Format(Date, "yyyymmdd")
        sLogFile = SourceDir + "LOG_" + sDate + ".dbf"
        oConn.open "provider=vfpoledb;data source=C:\;"
        sQuery = "Select file from " + sLogFile + " where status<>'o'"
        oRs.open sQuery, oConn
        oRs.MoveNext
        Browser1.Navigate oRs!file
'    oRs.Close
'    oConn.Close
'    Set oRs = Nothing
'    Set oConn = Nothing
'       i = 1
'        si = Str(i)
'        si = Format(si, "000000")
'        sDate = Format(Date, "yyyymmdd")
'        sPath = "D:\fdcTreat\EBP\Source\20061127"
'        sFile = sPath & "" & sDate & si & incremente & ".html"
      
      
End Sub
------------------------------------------
à l'execution l'application passe au deuxieme enregistrement, puis le troisieme clic genere une erreur de type:
Erreur '3705' la methode open de l'objet '_Connection' a echoué.
SVP pourriez vous me dire ou est l'erreur?
merci d'avance.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 22
28 nov. 2006 à 10:53
oConn ne devrait être utilisé qu'une seule fois et demeurer ouvert le temps de la session.
Si tu tentes de le rouvrir sans l'avoir fermé, ça générera une erreur.

Pour pouvoir utiliser un bouton Suivant, Précédent,... il faut que oRs soit déclaré à l'ouverture de la connexion et demeure ouvert le temps de la session.

Bouton Suivant:
If Not oRs.EOF then oRs.Movenext

Bouton Précédent:

If Not oRs.BOF then oRs.Moveprevious

Il ne faut pas utiliser de boucle du genre Do Until...Movenext...Loop
sinon, tu seras toujours au dernier ou au premier enregistrement sans pouvoir lire les autres.

MPi
0
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007
28 nov. 2006 à 11:37
Salut,
SVP pourriez vous me rectifier le programme parceque j'ai essayé de declarer oConn et oRs comme variable globale mais ça marche pas.il rsete toujours le même probleme.
Je serai très reconnaissant.
0
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007
28 nov. 2006 à 11:38
Salut,
SVP pourriez vous me rectifier le programme parceque j'ai essayé de declarer oConn et oRs comme variable globale mais ça marche pas.il rsete toujours le même probleme.
Je serai très reconnaissant.
0
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007
29 nov. 2006 à 11:01
Salut,
merci Jack ça marche très bien.
Merci.
0
didmousta Messages postés 27 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 14 novembre 2007
29 nov. 2006 à 11:02
Salut,
merci à toi aussi MPi, ça marche aussi comme il faut
Merci.
0