Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    8

    Funzione Loop e Counter

    Buongiorno a tutti e ringrazio sin da ora chi interverrà in questa discussione!!!!
    Ho un problema con il codice VB 6 ed è da giorni che spremo le meningi per cercare di risolverlo.
    In pratica ho creato un file bat in dos che esegue la copia di alcuni file ed una funzione loop e counter (impostato manualmente) in una routine che eseguono l' operazione fino al termine della copia eseguita dal bat.
    Ora vorrei che la funzione loop e counter terminino in automatico anziche in manuale sapete dirmi come fare???

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Facci vedere il codice (e indica nel titolo il linguaggio) e spiega la situazione descrivendo quello che hai gia' scritto ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    8

    VB6 LOOP E COUNTER

    VI POSTO LA PARTE DEL CODICE CHE MI INTERESSA MODIFICARE
    codice:
    Private Sub IT30_Click()
    Dim Copia, Counter, Topo, Conta, Archimede, Minni, Pluto, Pippo
    Dim dbs As Database, rst As Recordset, rst1 As Recordset, rst2 As Recordset, SMS1, SMS2
    
        SMS1 = MsgBox("Vuoi che aggiorni il file XXXXXX.XLS???", vbYesNo, "CONFERMA AGGIORNAMENTO")
        If SMS1 = 6 Then
            Copia = Shell("PERCORSO\Torneria.bat", vbNormalFocus)
            Do While Counter < 30000000       ' Ciclo interno.
                Counter = Counter + 1   ' Incrementa il contatore.
            Loop
    
            Set dbs = CurrentDb ' Restituisce il riferimento al database corrente.
            Set rst = dbs.OpenRecordset("SELECT * FROM ;") ' Apre il recordset sulla tabella
            Do Until rst.EOF    ' Esegue fino alla fine del file.
                rst.Delete  ' Edita il record corrente lo salva nel file TXT ed elimina il record
                rst.MoveNext    ' Si sposta al record successivo.
            Loop
            rst.Close
    
            Set rst = dbs.OpenRecordset("SELECT * from Carico_torneria;")
            Set rst1 = dbs.OpenRecordset("SELECT Transfer1.Materiale1, Transfer1.[Dt#in#al+presto], Transfer1.[Qtà confermata], Transfer1.[Quantità operazioni], Transfer1.[Giacenza Grezzo] FROM Transfer1 WHERE (((Transfer1.[Dt#in#al+presto]) Is Not Null));")
            Do Until rst1.EOF
                rst.AddNew
                rst!Materiale = rst1!Materiale1
                rst!Data_inizio = rst1![Dt#in#al+presto]
                rst!qt_conf = rst1![Qtà confermata]
                rst!qt_operazione = rst1![Quantità operazioni]
                rst!giacenza = rst1![Giacenza Grezzo]
                rst!foglio = "Transfer1"
                rst.Update
                rst1.MoveNext    ' Si sposta al record successivo.
            Loop
            rst1.Close
            
            Set rst1 = dbs.OpenRecordset("SELECT Transfer2.Materiale1, Transfer2.[Dt#in#al+presto], Transfer2.[Qtà confermata], Transfer2.[Quantità operazioni], Transfer2.[Giacenza Grezzo] FROM Transfer2 WHERE (((Transfer2.[Dt#in#al+presto]) Is Not Null));")
            Do Until rst1.EOF
                rst.AddNew
                rst!Materiale = rst1!Materiale1
                rst!Data_inizio = rst1![Dt#in#al+presto]
                rst!qt_conf = rst1![Qtà confermata]
                rst!qt_operazione = rst1![Quantità operazioni]
                rst!giacenza = rst1![Giacenza Grezzo]
                rst!foglio = "Transfer2"
                rst.Update
                rst1.MoveNext    ' Si sposta al record successivo.
            Loop
            rst1.Close
    
            Set rst1 = dbs.OpenRecordset("SELECT Transfer3.Materiale1, Transfer3.[Dt#in#al+presto], Transfer3.[Qtà confermata], Transfer3.[Quantità operazioni], Transfer3.[Giacenza Grezzo] FROM Transfer3 WHERE (((Transfer3.[Dt#in#al+presto]) Is Not Null));")
            Do Until rst1.EOF
                rst.AddNew
                rst!Materiale = rst1!Materiale1
                rst!Data_inizio = rst1![Dt#in#al+presto]
                rst!qt_conf = rst1![Qtà confermata]
                rst!qt_operazione = rst1![Quantità operazioni]
                rst!giacenza = rst1![Giacenza Grezzo]
                rst!foglio = "Transfer3"
                rst.Update
                rst1.MoveNext    ' Si sposta al record successivo.
            Loop
            rst1.Close
            
            Set rst1 = dbs.OpenRecordset("SELECT Transfer4.Materiale1, Transfer4.[Dt#in#al+presto], Transfer4.[Qtà confermata], Transfer4.[Quantità operazioni], Transfer4.[Giacenza Grezzo] FROM Transfer4 WHERE (((Transfer4.[Dt#in#al+presto]) Is Not Null));")
            Do Until rst1.EOF
                rst.AddNew
                rst!Materiale = rst1!Materiale1
                rst!Data_inizio = rst1![Dt#in#al+presto]
                rst!qt_conf = rst1![Qtà confermata]
                rst!qt_operazione = rst1![Quantità operazioni]
                rst!giacenza = rst1![Giacenza Grezzo]
                rst!foglio = "Transfer4"
                rst.Update
                rst1.MoveNext    ' Si sposta al record successivo.
            Loop
            rst1.Close
            
            Set rst1 = dbs.OpenRecordset("SELECT Transfer5.Materiale1, Transfer5.[Dt#in#al+presto], Transfer5.[Qtà confermata], Transfer5.[Quantità operazioni], Transfer5.[Giacenza Grezzo] FROM Transfer5 WHERE (((Transfer5.[Dt#in#al+presto]) Is Not Null));")
            Do Until rst1.EOF
                rst.AddNew
                rst!Materiale = rst1!Materiale1
                rst!Data_inizio = rst1![Dt#in#al+presto]
                rst!qt_conf = rst1![Qtà confermata]
                rst!qt_operazione = rst1![Quantità operazioni]
                rst!giacenza = rst1![Giacenza Grezzo]
                rst!foglio = "Transfer5"
                rst.Update
                rst1.MoveNext    ' Si sposta al record successivo.
            Loop
            rst1.Close
            rst.Close
            
            Set rst = dbs.OpenRecordset("SELECT * FROM dbo_DATE_TORNERIA;") ' Apre il recordset sulla tabella
            Do Until rst.EOF    ' Esegue fino alla fine del file.
                rst.Delete  ' Edita il record corrente lo salva nel file TXT ed elimina il record
                rst.MoveNext    ' Si sposta al record successivo.
            Loop
            rst.Close
            
            'Set rst = dbs.OpenRecordset("SELECT * from IT30;")
            Set rst = dbs.OpenRecordset("SELECT codice from IT30 group by codice;")
            Set rst1 = dbs.OpenRecordset("SELECT * from dbo_DATE_TORNERIA;")
            Do Until rst.EOF
                Archimede = rst!CODICE
                Set rst2 = dbs.OpenRecordset("SELECT Carico_torneria.*, Carico_torneria.Materiale FROM Carico_torneria WHERE (((Carico_torneria.Materiale)=" & Chr(34) & Archimede & Chr(34) & "))ORDER BY Carico_torneria.Data_inizio;")
                Topo = 0
                Conta = 0
                Do Until rst2.EOF
                    Minni = 0
                    Pippo = 0
                    Pluto = 0
                    Minni = Val(rst2!qt_conf)
                    Pippo = Val(rst2!qt_operazione)
                    If Conta = 0 Then
                        Pluto = rst2!giacenza
                        If IsNull(Pluto) Then Pluto = 0
                        Pluto = Val(Pluto)
                        Topo = Pluto
                    End If
                    If Pippo - Minni > Topo Then
                        rst1.AddNew
                        rst1!CODICE = Archimede
                        rst1!Data = rst2!Data_inizio
                        rst1!foglio = rst2!foglio
                        rst1!data_import = Date
                        rst1.Update
                        rst2.MoveLast
                        Topo = 0
                    End If
                    Topo = Topo - Pippo
                    Conta = Conta + 1
                    rst2.MoveNext
                Loop
                rst.MoveNext
            Loop
            rst.Close
            rst1.Close
            rst2.Close
            dbs.Close
            SMS2 = MsgBox("Importazione conclusa.", vbOKOnly, "IMPORTAZIONE DATE DA ORDINI TORNERIA")
        End If
        
        DoCmd.OpenReport "Report_Magazzino_IT30_data", acViewPreview
    
    End Sub
    COME VEDETE IL CONTATORE E' IMPOSTATO MANUALMENTE A 30000000 MILLISECONDI IO LO VORREI IMPOSTARE IN MANIERA AUTOMATICA CIOE' CHE SI INTERROMPA QUANDO IL FILE BAT HA CONCLUSO LA COPIA.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intanto chi ti dice che quelli siano millisecondi (?) ... un contatore e' un semplice valore numerico che aumenta in base all'esecuzione di un numero di istruzioni la cui durata non e' determinabile e dipenda comunque dal clock della CPU ...

    A parte questo, la sincronizzazione con un processo esterno si fa facendo controllare l'handle del processo alla API WaitForSingleObject (di cui abbiamo parlato nel forum).

    Ma, meglio di tutto, dovresti cercare di scrivere nel codice quello che fai nel .bat ... se si tratta di semplici copie, puoi scrivere semplice codice VB ... cosa contiene il .bat?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    8

    VB6

    SI ECCOTI IL TXT DEL BAT:

    PRINT SI> C:\LOG.TXT
    COPY TORN.XLS C:\XLS> C:\LOG.TXT
    PRINT NO> C:\LOG.TXT

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Per le prossime volte, utilizza i tag [*CODE] e [*/CODE] (senza l'asterisco rosso) per la scrittura del codice. Così rimane l'indentazione ed è più facilmente leggibile.

    PS: Li ho aggiunti io nei tuoi post.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Nel bat mi sembra che stampi un file chiamato

    SI

    (cosa contiene)

    poi copi un file e poi stampi un file chiamato

    NO

    (anche questo cosa contiene?)

    Metti il risultato in un file log.txt ma dato che usi il > hai soltanto l'ultimo risultato ...

    Insomma il batch sembra "fatto male" e soprattutto non si capisce a cosa serva ...

    Bisogna che tu spieghi cosa stampi con quei due file perche' la copia del file la puo' fare VB ...


    P.S. Non si scrive in maiuscolo in un forum ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    8
    ALLORA TI SPIEGO COME HO PENSATO DI RISOLVERE IL PROBLEMA DELLA SINCRONIZZAZIONE MA SE TU SUGGERISCI UN ALTERNATIVA DIMMELO.

    QUESTO BAT OLTRE ALL' OPERAZIONE DI COPIA-SOVRASCRITTURA DI QUESTO FILE XLS CREA UN FILE LOG COMPOSTO DI 3 RIGHE:

    PRIMA RIGA STAMPA UN "SI"
    SECONDA RIGA STAMPA L' ESITO DELLA COPIATURA (TIPO 1 FILE COPIATO/I)
    TERZA RIGA STAMPA UN "NO"

    ORA SE IO IN VB FACCIO IN MANIERA CHE MI VADA A LEGGERE QUESTO FILE LOG.TXT ED IN PARTICOLARE LA TERZA RIGA E GLI DICO DI BLOCCARE IL COUNTER HO RISOLTO IL MIO PROBLEMA IN TEORIA

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Meno male che ti ho detto che in un forum non si scrive in maiuscolo !

    Ma devo pensare che non hai letto il mio messaggio ...

    Originariamente inviato da MALAXX
    ... SE TU SUGGERISCI UN ALTERNATIVA DIMMELO.
    Infatti ... lascia perdere questo accrocchio e copia il file con l'istruzione

    FileCopy

    del VB che ci sta proprio per queste operazioni ...

    Quindi, cancella la Shell e la For e usa la FileCopy ...

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    8
    Sai a me piace molto URLARE comunque ascolta il comando filecopy non lo conosco mi potresti scrivere la correzione nel codice????

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.