Utilizzo corretto di next record.

di il
44 risposte

44 Risposte - Pagina 3

  • Re: Utilizzo corretto di next record.

    05/07/2024 - Ciccio_54 ha scritto:


    SELECT Fornitori.[Cognome e nome o ragione sociale], IIf([Effettuata 1ª]=True And [Chiusa 1ª]=False,Date()-[1ª sorv],IIf([Effettuata 2ª]=True And [Chiusa 2ª]=False,Date()-[2ª sorv],0)) AS Giorni, Anagrafica.[Rag Sociale], IIf([Giorni]>179,"Scaduto",IIf([Giorni]>89,"Sospeso")) AS Stato, Fornitori.[E-Mail], Mid$([Raggrupp],10,255) AS Norme
    FROM ((Contratti INNER JOIN Fornitori ON Contratti.Intermediario = Fornitori.ID) INNER JOIN [Norme raggruppate] ON Contratti.[Norme totali] = [Norme raggruppate].ID_Raggrupp) INNER JOIN Anagrafica ON Contratti.Cliente = Anagrafica.ID
    WHERE (((IIf([Effettuata 1ª]=True And [Chiusa 1ª]=False,Date()-[1ª sorv],IIf([Effettuata 2ª]=True And [Chiusa 2ª]=False,Date()-[2ª sorv],0)))>89) AND ((Contratti.Validità)="In corso") AND (([Emissione LL-C]+[Emissione Global]+[1ª LL-C]+[1ª Global]+[2ª LL-C]+[2ª Global])>1) AND ((Contratti.Ente)="LL-C" Or (Contratti.Ente)="Global Italy") AND ((IIf([Chiusa 1ª]=True And [Chiusa 2ª]=True,1,2))>1))
    ORDER BY Fornitori.[Cognome e nome o ragione sociale], IIf([Effettuata 1ª]=True And [Chiusa 1ª]=False,Date()-[1ª sorv],IIf([Effettuata 2ª]=True And [Chiusa 2ª]=False,Date()-[2ª sorv],0)) DESC;

    Non entro nel dettaglio della query…

    Se aggiungi un parametro relativo ai destinatari del file di testo da inviare via mail esporti il risultato della query direttamente su file txt

    La lezione è qui.

    https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://m.youtube.com/watch%3Fv%3DlXoiHlBKgFc&ved=2ahUKEwj07tvt45GHAxXP_7sIHTMWAxoQwqsBegQIDxAE&usg=AOvVaw2WCk1wVbD5yMVy03etfUIX

    Buona visione.

  • Re: Utilizzo corretto di next record.

    Amici, io non capisco il desiderio di entrare nella struttura della Query, o di sapere quali dati vanno presi o come vadano gestiti o come voglio chiamare le e-mail che intendo creare.

    A me basta solo sapere qual è la procedura per prendere una qualsiasi Query con qualsiasi contenuto e passarla record per record, cominciando dal primo e finendo con l'ultimo.

    Non intestarditevi sullo SQL, o sulla e-mail o sulla Query, io ho solo bisogno di prendere una qualsiasi Query, prendere il primo campo del primo record e memorizzarlo, passare al secondo record, prendere il primo campo e memorizzarlo, passare al terzo e così via, fino alla fine.

    Non ha alcuna importanza sapere questi campi cosa sono, a cosa servono, se sono testo, data o valuta, e che fine faranno: io desidero solo una semplicissima procedura che mi permetta di usare un comando tipo “NextRecord” (che non so gestire) per poter operare una qualsiasi cosa un record alla volta, iniziando dal primo e procedendo un record alla volta fino alla fine.

    Comunque grazie mille a tutti e, con un po' di anticipo, buon weekend.

  • Re: Utilizzo corretto di next record.

    Ciccio per la questione ti avevano già risposto, attendevamo un tuo riscontro, notizie sulla soluzione, ma tu non hai fatto sapere nulla

  • Re: Utilizzo corretto di next record.

    Hai ragione, Oregon, ma purtroppo la settimana scorsa mia suocera, che da più di venti anni viveva con noi, è peggiorata e sabato ci ha lasciati, così io non ho ancora letto tutti i messaggi.

    Oggi è il primo giorno che abbiamo ripreso una parvenza di normalità e nel fine settimana rivedrò tutto quello che mi avete scritto.

    Vi ringrazio ancora tutti.

  • Re: Utilizzo corretto di next record.

    Bastava che dicessi che avevi avuto altri impegni.

    Mi spiace per il lutto, ma dato che adesso avevi risposto, mi è parso corretto chiederti notizie.

  • Re: Utilizzo corretto di next record.

    Ciao a tutti, con tanta pazienza sono riuscito a risolvere il mio problema.
    Ovviamente, non essendo un programmatore aggiornato da almeno 30 anni, mi sono rifatto ai miei ricordi di GWBasic.
    Non riuscendo a capire come si fa per prendere i dati direttamente dalla Query "Scaduti", l'ho esportata nel file "Scaduti.txt" e ho lavorato su quello:


    Private Sub Form_Load()

    Dim OutApp As Object
    Dim OutMail As Object

    Close

    Dim Cons$(1000), Stato$(1000), Cli$(1000), Mail$(1000), Gio$(1000), Norma$(1000)

    Open "C:\Users\Francesco\Documents\Scaduti.txt" For Input As #1

    w = 0

    100:
    '--------------------------------------------------Acquisizione e memorizzazione dati
    If EOF(1) Then t = 0: GoTo 1000

    w = w + 1: Cons$(w) = "": Stato$(w) = "": Cli$(w) = "": Mail$(w) = "": Gio$(w) = "": Norma$(w) = ""

    Input #1, a$: t = 0

    110: t = t + 1: b$ = Mid$(a$, t, 1): If b$ <> ";" Then Cons$(w) = Cons$(w) + b$: GoTo 110

    120: t = t + 1: b$ = Mid$(a$, t, 1): If b$ <> ";" Then Gio$(w) = Gio$(w) + b$: GoTo 120

    130: t = t + 1: b$ = Mid$(a$, t, 1): If b$ <> ";" Then Stato$(w) = Stato$(w) + b$: GoTo 130

    140: t = t + 1: b$ = Mid$(a$, t, 1): If b$ <> ";" Then Cli$(w) = Cli$(w) + b$: GoTo 140
       
    150: t = t + 1: b$ = Mid$(a$, t, 1): If b$ <> ";" Then Norma$(w) = Norma$(w) + b$: GoTo 150

    160: t = t + 1: b$ = Mid$(a$, t, 1): If b$ <> "#" Then Mail$(w) = Mail$(w) + b$: GoTo 160

    170: GoTo 100

    1000:

    '-----------------------------Attribuzione degli scaduti ai vari consulenti (e memorizzazione destinatario ed e-mail)

    t = t + 1: If t > w Then GoTo 1100

    If Cons$(t) <> Cons$(t - 1) Then
       Completa$ = "": Destinatario$ = Cons$(t): Indirizzo$ = Mail$(t)
       Completa$ = Stato$(t) + Chr$(9) + " - Cliente: " + Cli$(t) + " - Norma/e: " + Norma$(t) + " - Giorni: " + Gio(t) + "<BR>"
       GoTo 1000
    End If

    If Cons$(t) = Cons$(t - 1) Then
       Completa$ = Completa$ + Stato$(t) + Chr$(9) + "   -   Cliente: " + Cli$(t) + " - Norma/e: " + Norma$(t) + " - Giorni: " + Gio(t) + "<BR>"
       If Cons$(t) <> Cons$(t + 1) Then GoTo 1050
       GoTo 1000
    End If

    1050:

    '--------------------------------------------------------------- Creazione testo e-mail

    Testo$ = "Alla c.a. di " + Destinatario$ + ".<BR><BR>" + "Questa è l'attuale situazione dei contratti annullati, sospesi o in pericolo:<BR><BR>" + Completa$
    Testo$ = Testo$ + "<BR>Questa e-mail è stata generata e inviata automaticamente: se contiene errori si prega di segnalarli, grazie.<BR>"
    Testo$ = Testo$ + "<BR>Cordiali saluti."

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    '--------------------------------------------------------------- Invio e-mail

       With OutMail
           .To = Indirizzo$
           .cc = ""
           .bcc = ""
           .subject = "Situazione contratti."
           .HTMLBody = Testo$
           .display
           .Send
       End With
       
    Set OutMail = Nothing
    Set OutApp = Nothing

    GoTo 1000

    1100:

    End Sub

  • Re: Utilizzo corretto di next record.

    Scrivere codice gwbasic (pieno di goto…) al posto di usare il vba e la query attraverso il recordset è assurdo.

    Fra l'altro avevi avuto la risposta su come fare.

    A che serve fare una domanda, avere una risposta valida e poi fare tutt'altro?

    P.S. devi sempre postare il codice formattato sul forum… ti è stato ricordato più volte. È una forma di rispetto per chi legge.

  • Re: Utilizzo corretto di next record.

    Oregon hai ragione: rivedendo tutte le risposte con calma (che non ho avuto nelle scorse settimane) mi sono accorto che Ettore56 mi aveva indicato la strada da seguire, anche se mi ero lasciato fuorviare dal fatto che la procedura era finalizzata ad aggiungere i dati in una tabella, cosa che non riguardava il mio caso, ma ovviamente la dovevo adattare alle mie esigenze.

    Per quanto riguarda il codice formattato, devo ammettere che non so come sia e come si faccia, il che mi conferma che sono solo un pasticcione.

    Ancora grazie a tutti.

  • Re: Utilizzo corretto di next record.

    Ti basta leggere una volta il regolamento per imparare a formattare il codice

  • Re: Utilizzo corretto di next record.

    Ricapitolando:

    1. Hai dei dati su un database
    2. Estrapoli i dati con una query
    3. Dalla query esporti i dati in un file di testo
    4. Apri il file di testo e lo vuoi scorrere per estrapolare i dati contenuti in base ad un criterio tipo “destinatario” e per muoverti dentro il file di testo vorresti usare nextrecord (dal quale deriva il titolo del 3d). 
    5. Dal file di terto tiri fuori un txt da usare come allegato alla mail del destinatario.

    Hai provato ad aggiungere alla query il filtro per destinatario, salvare i risultati come destinatarioxy.txt e inviarlo via mail?

    Esegui n query tante quante i destinatari cambiando di volta in volta l'id del destinatario.

    Oppure ho capito male

  • Re: Utilizzo corretto di next record.

    05/07/2024 - ettore56 ha scritto:


    05/07/2024 - Ciccio_54 ha scritto:


    Comunque non ha importanza quale sia la Query, io chiedo solo di poter aprire una qualsiasi Query e di importare alcuni campi record per record.

    Per prima cosa definisci i tuoi recordset.

    Il primo sarà la tua query, mentre il secondo sarà la tabella dove inserire i campi da importare

    Per esempio:

    Dim strSql As String
    
    StrSql = TuaQuery
    
    Dim Rs1 As DAO.Recordset, Rs2 As DAO.Recordset
    
    Set Rs1 = db.OpenRecordset(StrSql, dbOpenDynaset)
    Set Rs2 = db.OpenRecordset(“TuaTabellaDove Importare”, dbOpenDynaset)
    

    Successivamente inserisci le istruzioni per importare I campi desiderati:

    Rs1.MoveFirst
    Do While Not Rs1.EOF
    	Rs2.AddNew
    	Rs2!TuoCampo = Rs1!CampoDaCopiare
    	…..ecc. per altri campi
    	Rs2.Update
        Rs1.MoveNext
    ……
    

    Partendo da queste semplici righe di codice puoi poi eventualmente implementare la funzione secondo le tue necessità.

    Ciao Oregon, ho copiato pari pari il tuo schema, e ho rinominato la Query “TuaQuery” e ho creato una tabella “TuaTabella” che comunque non mi serve, perché io i dati poi li devo mandare per e-mail (già pronta la procedura), ma mi dà ""Errore di runtime 424 necessario oggetto" sulla riga -Set Rs1 = db.OpenRecordset(strSql, dbOpenDynaset)-.

    Ti copio la procedura (spero dia formattata, perché io non so come si fa):

    Private Sub Form_Load()

    Dim strSql As String

    strSql = TuaQuery

    Dim Rs1 As DAO.Recordset, Rs2 As DAO.Recordset

    Set Rs1 = db.OpenRecordset(strSql, dbOpenDynaset)
    Set Rs2 = db.OpenRecordset(“TuaTabella”, dbOpenDynaset)
    '-----Successivamente inserisci le istruzioni per importare I campi desiderati:

    Rs1.MoveFirst
    Do While Not Rs1.EOF
       Rs2.AddNew
       Rs2!TuoCampo = Rs1!CampoDaCopiare
       '…..ecc. per altri campi
       Rs2.Update
       Rs1.MoveNext
    Loop

    End Sub

    Nel rigo -strSql = TuaQuery- la parola TuaQuery ho provato a metterla sia così che fra le virgolette.

    Mi dici dove sbaglio per favore?

    Grazie mille.

  • Re: Utilizzo corretto di next record.

    Risolto ! ! ! ! !

    Dovevo mettere “CurrentDb.OpenRecordset” e non solo “db.OpenRecordset”

    Ora funziona. Grazie ancora di cuore, alla prossima.

  • Re: Utilizzo corretto di next record.

    22/07/2024 - Ciccio_54 ha scritto:


    Ciao Oregon, ho copiato pari pari il tuo schema

    Ciao. Sono Ettore, non Oregon.

    L'esempio di codice che ti avevo postato era solo un esempio che doveva poi essere personalizzato.

    Ovviamente se utilizzi la tua query dovrai omettere

    Dim strSql As String
    strSql = TuaQuery

    ma dovrai scrivere solamente

    Set Rs1 = db.OpenRecordset("TuaQuery", dbOpenDynaset)

    dove “TuaQuery”, inserito tra i doppi apici, è il nome della query memorizzata.

    Se invece vuoi inserire il codice Sql nell'istruzione VBA, l'istruzione sarà:

    Dim strSql As String
    
    strSql = CodiceSqlTuaQuery
    
    
    
    Set Rs1 = db.OpenRecordset(strSql, dbOpenDynaset)

    dove strSql non sarà inserito tra gli apici.

    Per quanto riguarda la dichiarazione della variabile “db”, è utile per specificare il database di origine, inserendo la seguente istruzione

    Dim db      As DAO.DataBase
    Set db = CurrentDb()	'se si tratta del corrente database
    
    'oppure
    Set db = PercorsoTuoDataBase	'se si tratta di altro database

    Se ometti quella dichiarazione, l'istruzione sarà:

    Set Rs1 = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)

    e farà riferimento esclusivamente al corrente database.

  • Re: Utilizzo corretto di next record.

    Fatto!

    Grazie ancora.

  • Re: Utilizzo corretto di next record.

    22/07/2024 - ettore56 ha scritto:


    22/07/2024 - Ciccio_54 ha scritto:


    Ciao Oregon, ho copiato pari pari il tuo schema

    Ciao. Sono Ettore, non Oregon.

    Dim db      As DAO.DataBase
    Set db = CurrentDb()	'se si tratta del corrente database
    
    'oppure
    Set db = PercorsoTuoDataBase	'se si tratta di altro database

    Decisamente fantasiosa e simpatica l'assegnazione dell'oggetto Database semplicemente passando il percorso, magari fosse cosi intelligente, ma purtroppo è errata… parlo di questa:

    'oppure
    Set db = PercorsoTuoDataBase	'se si tratta di altro database

    Forse si deve usare il metodo [OpenDatabase]…?

    Set db=OpenDatabase(PercorsoTuoDataBase)
Devi accedere o registrarti per scrivere nel forum
44 risposte