Integrazione codice SQL in VBA

Anonimo
2024-11-12T12:00:31+00:00

Buongiorno a tutti, una domanda, utilizzo abitualmente SQL tramite VBA per estrarre i dati, ora però sono ore che non riesco a far digerire a VBA questo codice in SQl (funzionate in Access) il problema è la parte relativa al DLookUp (infatti senza questa parte funziona) e credo di non riuscire a integrare il carattere "&" potreste aiutarmi ?

Ecco il codice completo come viene generato da Access, ho provato in mille modi ma non viene eseguito, grazie per l'attenzione

Qry = "SELECT Count(DB.Ordine) AS ConteggioDiOrdine, Interni_Esterni.Interno_Esterno, IIf([DB].[Durata_avviso]*60 Between 0 And 15,'0-15 minuti',IIf([DB].[Durata_avviso]*60>15 " & _

"And [DB].[Durata_avviso]*60<=30,'16-30 minuti',IIf([DB].[Durata_avviso]*60>30 And [DB].[Durata_avviso]*60<=60,'31-60 minuti',IIf([DB].[Durata_avviso]*60>60 " & _

"And [DB].[Durata_avviso]*60<=120,'61-120 minuti',IIf([DB].[Durata_avviso]*60>120 And [DB].[Durata_avviso]*60<=480,'121-480 minuti',IIf([DB].[Durata_avviso]*60>480 " & _

"And [DB].[Durata_avviso]*60<=960,'481-960 minuti',IIf([DB].[Durata_avviso]*60>960,'oltre 960 minuti','Aperti'))))))) AS Range_Durata " & _

"FROM DB INNER JOIN Interni_Esterni ON DB.[CdL operativo] = Interni_Esterni.CdL_operativo " & _

"WHERE (((DB.[Tipo Oggetto]) In ('Y_DST','Y_PRE','Y_GOT','Y_PNT','Y_RA4H','Y_RMAC','Y_GB400HZ','Y_PIT4H','Y_CDZP','Y_PITAC','Y_SCV')) " & _

"AND ((DB.[Data creazione ordine])>=#11/1/2024# " & _

"And (DB.[Data creazione ordine])<=#11/30/2024#+1)) " & _

"GROUP BY Interni_Esterni.Interno_Esterno, IIf([DB].[Durata_avviso]*60 Between 0 And 15,'0-15 minuti',IIf([DB].[Durata_avviso]*60>15 And [DB].[Durata_avviso]*60<=30,'16-30 minuti', " & _

"IIf([DB].[Durata_avviso]*60>30 And [DB].[Durata_avviso]*60<=60,'31-60 minuti',IIf([DB].[Durata_avviso]*60>60 And [DB].[Durata_avviso]*60<=120,'61-120 minuti', " & _

"IIf([DB].[Durata_avviso]*60>120 And [DB].[Durata_avviso]*60<=480,'121-480 minuti',IIf([DB].[Durata_avviso]*60>480 And [DB].[Durata_avviso]*60<=960,'481-960 minuti', " & _

"IIf([DB].[Durata_avviso]*60>960,'oltre 960 minuti','Aperti'))))))) " & _

"ORDER BY DLookUp('Ordinamento','Ordine_RangeDurata','Range_Durata = '" & IIf([DB].[Durata_avviso]*60 Between 0 And 15,'0-15 minuti',IIf([DB].[Durata_avviso]*60>15 " & _

"And [DB].[Durata_avviso]*60<=30,'16-30 minuti',IIf([DB].[Durata_avviso]*60>30 And [DB].[Durata_avviso]*60<=60,'31-60 minuti',IIf([DB].[Durata_avviso]*60>60 " & _

"And [DB].[Durata_avviso]*60<=120,'61-120 minuti',IIf([DB].[Durata_avviso]*60>120 And [DB].[Durata_avviso]*60<=480,'121-480 minuti',IIf([DB].[Durata_avviso]*60>480 " & _

"And [DB].[Durata_avviso]*60<=960,'481-960 minuti',IIf([DB].[Durata_avviso]*60>960,'oltre 960 minuti','Aperti'))))))) & "'");"

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

2 risposte

Ordina per: Più utili
  1. Anonimo
    2024-11-13T09:54:25+00:00

    Non c'è necessità di inserire l'ordinamento in quanto già l'istruzione GROUP BY lo effettua.

    L'istruzione consiglierei di scriverla così :

    **Qry ="SELECT Count(DB.Ordine) AS ConteggioDiOrdine, Interni_Esterni.Interno_Esterno, " & _"IIf([DB].[Durata_avviso]*60 Between 0 And 15,'0-15 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 16 And 30,'16-30 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 31 And 60,'31-60 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 61 And 120,'61-120 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 121 And 480,'121-480 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 481 And 960,'481-960 minuti', " & _"IIf([DB].[Durata_avviso]*60>960,'oltre 960 minuti','Aperti'))))))) AS Range_Durata " & _ "FROM DB INNER JOIN Interni_Esterni ON DB.[CdL operativo] = Interni_Esterni.CdL_operativo " & _ "WHERE (((DB.[Tipo Oggetto]) In ('Y_DST','Y_PRE','Y_GOT','Y_PNT','Y_RA4H','Y_RMAC','Y_GB400HZ','Y_PIT4H','Y_CDZP','Y_PITAC','Y_SCV')) " & _ "AND ((DB.[Data creazione ordine])>=#11/1/2024# " & _ "And (DB.[Data creazione ordine])<=#11/30/2024#+1)) " & _ "GROUP BY Interni_Esterni.Interno_Esterno, "IIf([DB].[Durata_avviso]*60 Between 0 And 15,'0-15 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 16 And 30,'16-30 minuti', " & _ " & _ "IIf([DB].[Durata_avviso]*60 Between 31 And 60,'31-60 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 61 And 120,'61-120 minuti', " & _ " & _ "IIf([DB].[Durata_avviso]*60 Between 121 And 480,'121-480 minuti', " & _"IIf([DB].[Durata_avviso]*60 Between 481 And 960,'481-960 minuti', " & _ " & _ "IIf([DB].[Durata_avviso]*60>960,'oltre 960 minuti','Aperti')))))))"**per rendere più semplice la sua gestione.

    Per il filtro ((DB.[Data creazione ordine])>=#11/1/2024# And (DB.[Data creazione ordine])<=#11/30/2024#+1)) consiglio di usare una maschera con due controlli di testo, impostati con formato data, dove poter inserire le date e rendere la query dinamica senza doverla aprire per inserirle, esempio:

    (DB.[Data creazione ordine]) Between Clng(Maschera!Ricerca!txtInizio) And Clng(Maschera!Ricerca!txtFine))

    Non capisco a cosa serve il + 1 nella parte (DB.[Data creazione ordine])<=#11/30/2024#+1)

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2024-11-13T00:30:18+00:00

    La risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o parole insolite.

    Cara Patacchiola Paolo,

    Buona giornata! Grazie per aver postato la tua richiesta nella nostra community.

    Poiché ci concentriamo principalmente sulle query di funzionalità generali e integrate nell'applicazione Access, la tua domanda riguarda gli script SQL in Access. Ti consiglio sinceramente di pubblicare la tua preoccupazione nella Microsoft Tech Community: Benvenuto nel gruppo Access. (microsoft.com). I membri e gli ingegneri laggiù sono esperti nella conoscenza di questo tipo di query. Si concentreranno sulla situazione specifica dalla tua parte e forniranno suggerimenti specifici per te.

    Allo stesso tempo, manterremo aperto anche questo filo. Diamo il benvenuto ai membri della community e agli MVP che hanno esperienze simili per condividere approfondimenti e suggerimenti qui.

    Grazie per la vostra comprensione.

    Sinceramente

    Sophia

    La risposta è stata utile?

    0 commenti Nessun commento