Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    Progress Bar : Urgente!!

    Ho un pulsant (commandbutton): clicco e mi fa una ricerca in db Access:

    codice:
    Do While Not rs.EOF
    bla bla bla bla
    bla bla bla bla
    bla bla bla bla
    rs.movenext
    Loop

    ecco mentre è in Loop in quanto sta concludendo di terminare, vorrei che ci fosse una progress bar e che vada avanti fino al termine dei record in db.
    Quindi una volta finito il loop il progress bar = 100%

    Aiuto. vi prego con codice sorgente.

  2. #2
    codice:
    pro1.min = 0
    pro1.max = rs.recordcount - 1
    for i = 0 to rs.recordcount -1
       pro1.value = i
       pro1.refresh
    next
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    aiuto

    sul form1 metto la progress bar con un commandbutton che contiene:

    codice:
    Private Sub cmdXML_Click()
    If txtnome.Text <> "" Then
     If Right(txtnome.Text, 4) <> ".xml" Then
      txtnome.Text = txtnome.Text + ".xml"
     Else
     End If
    Else
     MsgBox "Specificare un nome!!", vbCritical, "AlphaTeam - XML"
     Exit Sub
    End If
    If Len(MaskEdBox1.Text) = 10 And Len(MaskEdBox1.Text) = 10 And MaskEdBox1.Text < MaskEdBox2.Text Then
    txt1.Text = Trim$(Mid$(MaskEdBox1.Text, 7, 4)) & Trim$(Mid$(MaskEdBox1.Text, 4, 2)) & Trim$(Mid$(MaskEdBox1.Text, 1, 2))
    txt2.Text = Trim$(Mid$(MaskEdBox2.Text, 7, 4)) & Trim$(Mid$(MaskEdBox2.Text, 4, 2)) & Trim$(Mid$(MaskEdBox2.Text, 1, 2))
    Else
    MsgBox "Selezionare un corretto intervallo di date!", vbCritical, "XML - AlphaTeam S.r.l."
    Exit Sub
    End If
    Xml.Show
    End Sub
    ed è proprio su questo form che ho messo la progress bar, ma ....
    MA questa progress bar deve caricarsi in base al numero dei record che vengono processati nella Loop:

    Questa loop si avvia quando dal cmdXML_CLick si avvia l'istruzione xml.show

    nell'xml o meglio nell'evento Form_Load c'è:
    un semplice
    codice:
     Do While Not rs.EOF
    ..............
     rs.movenext
     LOOP
    ecco come fare a far muovere la progress bar sul form1 ossia dove ho cliccato il pulsante XML_CLICK.

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    RecordSet e Pbar

    Form1: Inizio
    Form2: XML

    Sul form1 ho un commandbutton chiamato OK
    al cliccare di OK, c'è l'istruzione xml.show

    Nel Form_Load di XML - c'è l'accesso con un ciclo ad un database - ecco vorrei che ci fosse una progress bar che coincida con l'apertura del Form XML.

    Ora cosa succede:

    Clicco su OK - processa l'istruzione XML.show e prima di comparire il form ci vogliono 20 secondi perchè deve processare tutti i record.
    Ora vorrei una progress bar, però non a tempo , ossia non con un timer ma bensì quando termina di caricare i record, il pbar è al 100%.

    Vi prego di aiutarmi!!.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    271
    rs.movelast
    progbar.max=rs.recordount-1
    progbar.min =0
    do while not rs.eof
    progbar.value = rs.absoluteposition
    .....
    .....
    rs.movenext
    loop

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    ..niente

    Vi ringrazio ma niente, non funziona, la progress bar non si incrementa sul Form1, rimane vuota.
    Uffa.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    271
    Se hai provato con il mio codice, ho dimenticato una cosa:
    Prima di entrare nel ciclo devi fare un rs.movefirst altrimenti non entra e la ProgBar non si muove.
    In alternativa potresti usare una variabile contatore invece dell'absoluteposition


    Così dovrebbe funzionare

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    AIUTOOOOO

    ti metto il codice della form1, dove ho posto la progress bar:

    codice:
    Option Explicit
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
            (ByVal hWnd As Long, ByVal lpOperation As String, _
            ByVal lpFile As String, ByVal lpParameters As String, _
            ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Sub cmdAgg_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = OpenDatabase(App.Path & "\XML.mdb")
    Dim msg, SQL As String
    If ValidateEmail(txtDest.Text) = False Then
    MsgBox "Indirizzo Email inserito non corretto!", vbCritical, "XML - AlphaTeam S.r.l."
    Exit Sub
    Else
    msg = MsgBox("Desideri Aggiungere il seguente: " & txtDest.Text & " indirizzo di posta elettronica?", vbYesNo + vbQuestion, "XML - AlphaTeam S.r.l.")
    If msg = vbYes Then
    SQL = "INSERT INTO Email(Email) VALUES ('" & txtDest.Text & "')"
    db.Execute (SQL)
    MsgBox "Indirizzo Email: " & txtDest.Text & vbCrLf & " ... inserito correttamente. ", vbInformation, "XML - AlphaTeam S.r.l."
    Else
    MsgBox "Indirizzo Email: " & txtDest.Text & vbCrLf & " non inserito.", vbInformation, "XML - AlphaTeam S.r.l."
    Exit Sub
    End If
    End If
    End Sub
    Private Sub cmdEmail_Click()
    Dim msg, dest, ogg, ogg2, file As String, Ret As Long
    If ValidateEmail(txtDest.Text) = False Then
    Exit Sub
    End If
    If txtOgg.Text = "" Then
    msg = MsgBox("Soggetto non Inserito in Email!!" & vbCrLf & "Desideri continuare comunque?", vbCritical + vbYesNo, "XML - AlphaTeam S.r.l.")
    If msg = vbNo Then
    Exit Sub
    Else
    txtOgg.Text = "-"
    End If
    End If
    dest = txtDest.Text
    ogg = txtOgg.Text
    ogg2 = txtOgg2.Text
    If txtnome.Text <> "" Then
     If Right(txtnome.Text, 4) <> ".xml" Then
      txtnome.Text = txtnome.Text + ".xml"
     Else
     End If
    Else
     MsgBox "Specificare un nome!!", vbCritical, "AlphaTeam - XML"
     Exit Sub
    End If
      If chk1.Value = False Then
      ShellExecute Me.hWnd, "Open", "mailto:" & dest & "?subject=" & ogg & "&body=" & ogg2, vbNullString, vbNullString, vbNormalFocus
      Else
      file = App.Path & "\" & txtnome.Text
      ShellExecute Me.hWnd, "Open", "mailto:" & dest & "?subject=" & ogg & "&body=" & ogg2, vbNullString, vbNullString, vbNormalFocus
      While Ret = 0
         DoEvents
         Ret = FindWindow(vbNullString, ogg)
      Wend
      SendKeys "%ia" & file & "{TAB}{TAB}{ENTER}"
      End If
    End Sub
    Private Sub cmdXML_Click()
    If txtnome.Text <> "" Then
     If Right(txtnome.Text, 4) <> ".xml" Then
      txtnome.Text = txtnome.Text + ".xml"
     Else
     End If
    Else
     MsgBox "Specificare un nome!!", vbCritical, "AlphaTeam - XML"
     Exit Sub
    End If
    If Len(MaskEdBox1.Text) = 10 And Len(MaskEdBox1.Text) = 10 And MaskEdBox1.Text < MaskEdBox2.Text Then
    txt1.Text = Trim$(Mid$(MaskEdBox1.Text, 7, 4)) & Trim$(Mid$(MaskEdBox1.Text, 4, 2)) & Trim$(Mid$(MaskEdBox1.Text, 1, 2))
    txt2.Text = Trim$(Mid$(MaskEdBox2.Text, 7, 4)) & Trim$(Mid$(MaskEdBox2.Text, 4, 2)) & Trim$(Mid$(MaskEdBox2.Text, 1, 2))
    Else
    MsgBox "Selezionare un corretto intervallo di date!", vbCritical, "XML - AlphaTeam S.r.l."
    Exit Sub
    End If
    Xml.Show
    End Sub
    e ora la form dove c'è il ciclo db che a seconda del numero dei record dovrebbe incrementare la progress bar posta nella form1, ecco il codice:

    codice:
    Private Sub Form_Load()
    Centra Me
    Dim xmldocument As DOMDocument
    Dim rst As Recordset
    Dim sellout As IXMLDOMElement
    Dim vendita As IXMLDOMElement
    Dim prodotto As IXMLDOMElement
    Dim numero As IXMLDOMElement
    Dim codpunto As IXMLDOMElement
    Dim data As IXMLDOMElement
    Dim codean As IXMLDOMElement
    Dim coddpl As IXMLDOMElement
    Dim quantita As IXMLDOMElement
    Dim descrizione As IXMLDOMElement
    Dim radice As String
    Set xmldocument = New DOMDocument
    
     Dim StrDSN As String
     Dim rs As ADODB.Recordset
     Dim StrQuery As Variant
      Dim cn As ADODB.Connection
     Set cn = New ADODB.Connection
     StrDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\XML.mdb;Mode=Read;Persist Security Info=False"
     StrQuery = "SELECT * FROM XML WHERE DATA_DOCUMENTO BETWEEN " & Inizio.txt1.Text & " AND " & Inizio.txt2.Text & ""
     cn.Open StrDSN
     Set rs = cn.Execute(StrQuery)
     
    If rs.RecordCount = 0 Then
    MsgBox "Intervallo di date non corrispondenti in archivio!", vbCritical, "XML - AlphaTeam S.r.l."
    Exit Sub
    Else
    xmldocument.async = False
    radice = "SELL_OUT_GM"
    Set sellout = xmldocument.createElement(radice)
    xmldocument.appendChild sellout
    Do While Not rs.EOF
        Set vendita = xmldocument.createNode("element", "VENDITA", "")
        Set numero = xmldocument.createElement("NUMERO")
        Set codpunto = xmldocument.createElement("CODICE_PUNTO_VENDITA")
        Set data = xmldocument.createElement("DATA")
            vendita.appendChild numero
            numero.Text = rs!A1_NUMERO_DOCUMENTO
            vendita.appendChild codpunto
            codpunto.Text = rs!A1_DEPOSITO_CODICE
            vendita.appendChild data
            data.Text = rs!DATA_DOCUMENTO
            data.Text = Trim$(Mid$(data.Text, 7, 2)) & "/" & Trim$(Mid$(data.Text, 5, 2)) & "/" & Trim$(Mid$(data.Text, 1, 4))
            Set prodotto = xmldocument.createNode("element", "PRODOTTO", "")
            Set codean = xmldocument.createElement("CODICE_EAN")
            Set quantita = xmldocument.createElement("QUANTITA")
            Set descrizione = xmldocument.createElement("DESCRIZIONE")
            vendita.appendChild prodotto
            prodotto.appendChild codean
            codean.Text = rs!A1_ARTICOLO_FORNITORE
            prodotto.appendChild quantita
            quantita.Text = rs!quantita
            prodotto.appendChild descrizione
            descrizione.Text = rs!descrizione
            xmldocument.documentElement.appendChild vendita
            Set vendita = Nothing
    rs.MoveNext
    Loop
    xmldocument.save (App.Path + "\" + Inizio.txtnome)
    WebBrowser1.Navigate App.Path + "\" + Inizio.txtnome
    Set figlio = Nothing
    Set xmldocument = Nothing
    rs.Close
    End If
    End Sub
    ORA TUTTO FUNZIONA BENE, SOLO CHE DAL FORM1 QUANDO ESEGUO L'ISTRUZIONE XML.SHOW ACCADE CHE CI STA 30 SECONDI O PIU, QUINDI VOLEVO CHE SULLA FORM1 DOVE RICHIAMO LA FORM2 CI SIA UN PROGRESS BAR, CHE UNA VOLTA ARRIVATA AL 100% SI APRA LA FORM2, MA NON VA DI PARI PASSO CON IL TEMPO, MA CON IL NUMERO DEI RECORD PROCESSATI NELLA FORM2.

    AIUTO A TUTTI..

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    271
    - Metti la ProgressBar sul FORM1 da dove chiami Xml.Show

    - Sul FORM2 mentre esegui il ciclo scrivi le righe di codice che ho postato prima con l'accortenza di scrivere FORM1.ProgressBar quando devi utilizare la ProgressBar

    Io però non farei tutto quel lavoro sul Form_Load, potrebbe anche essere questo il tuo problema

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    rs.MoveLast

    Errore:
    quando mi processa:
    rs.Movelast

    ci pensa un po ... e poi fa:
    Errore di Runtime '-2147217884 (80040e24)':
    Il set di righe non supporta operazioni di recupero all'indietro.


    Aiutoooo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.