Risultati da 1 a 3 di 3

Discussione: Come creare una query da programma



  1. #1
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Come creare una query da programma

    Piccola premessa.
    Quando si creano applicazioni con Access, ma vale anche con Excel, bisogna dare all'utente un prodotto che non gli permetta di interagire con gli strumenti di programmazione. Nel caso di Access sono le tabelle, le query, i moduli, le macro. L'unica cosa su cui potrà agire sono le maschere.

    In questo tutorial inserisco del codice VBA con cui si creano, con un semplice clic su un pulsante, query, e poi cliccando su un pulsante si apre la maschera costruita sulla query, dato che l'utente non deve visualizzare la query con i suoi strumenti, ma solo il risultato della query in una maschera, che in genere sarà impostata con NO su eventuali modifiche ed aggiunte di record.

    Prima inserisco la Function
    Codice: 
     
    Function CreaQueryDefPermanente(strPercorsoDb As String, _    
          strNomeQuery As String, strSQL As String) As Boolean
          Const conObjectExists As Integer = 3012
        ' Crea un oggetto QueryDef permanente.
        ' Argomenti:
        ' strPercorsoDb: Il percorso per il database.
        ' strNomeQuery: Il nome della nuova query.
        ' strSQL: L'enunciato SQL sul quale è basata la query .
        
        ' Restituisce :
        ' Un valore logico (True/False) che indica
        ' se l'operazione è andata a buon fine.
        
        On Error GoTo Err_CreaQuerydefPermanente
        Dim dbs As DAO.Database
        Dim qdf As DAO.QueryDef
        
        Set dbs = OpenDatabase(strPercorsoDb)
        ' Crea l'oggetto QueryDef.
        Set qdf = dbs.CreateQueryDef(strNomeQuery)
        ' Imposta la sua proprietà SQL.
        qdf.SQL = strSQL
        qdf.Close
        CreaQueryDefPermanente = True
    
    
    Exit_CreaQuerydefPermanente:
        On Error Resume Next
        dbs.Close
        Set dbs = Nothing
        Exit Function
    
    
    Err_CreaQuerydefPermanente:
        If Err = conObjectExists Then
        Dim strMsg As String
        strMsg = "La query " & strNomeQuery & " esiste già. " _
            & vbCrLf & "La elimino e la creo di nuovo?"
        If MsgBox(strMsg, vbYesNo) = vbYes Then
            dbs.QueryDefs.Delete strNomeQuery
            Resume
        End If
        Else
            MsgBox "Errore: " & Err & vbCrLf & Err.Description
        End If
        CreaQueryDefPermanente = False
        Resume Exit_CreaQuerydefPermanente
    End Function


    Poi segue la Sub che crea la Query, andando a scegliere i record compresi tra le date dal 01/07/2006 al 31/07/2016

    Codice: 
     
    Private Sub CreaQueryOrdiniLuglio_Click()
    'Crea un oggetto QueryDef permanente che restituisce
    'il totale degli ordini per impiegato nel mese di luglio 2006
    
    
    'Chiama la funzione CreaQueryDefPermanente
    Dim strSQL As String
    Dim strPercorso As String
    Dim strNomeQuery As String
    
    
        strNomeQuery = "Ordini_Luglio2006"
        strPercorso = CurrentDb.Name
        
    'Definisce l'enunciato SQL
        strSQL = "SELECT Ordini.IDImpiegato, " & _
        "Sum((PrezzoUnitario*Quantità)-Sconto) as PrezzoComplessivo " & _
        "FROM Ordini INNER JOIN [Dettagli ordini] ON " & _
        "Ordini.IDOrdine = [Dettagli ordini].IDOrdine " & _
        "WHERE (((Ordini.DataOrdine) " & _
        "Between #01/07/2006# And #31/07/2006#)) " & _
        "GROUP BY Ordini.IDImpiegato;"
        
        If CreaQueryDefPermanente(strPercorso, strNomeQuery, strSQL) Then
            MsgBox "Query creata correttamente"
        End If
    
    
    End Sub

  2. #2
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Re: Come creare una query da programma

    Su una maschera qualsiasi si crea un pulsante che lancia la creazione di CreaQueryOrdiniLuglio.
    L'unico inconveniente di questo codice sono le date di inizio e fine luglio inserite.
    Ogni volta che uno volesse cambiare le date non potrebbe farlo !!!



    Per cui partendo dai due codici VBA, me ne sono ricavati altri due che mi permettono di ottenere una query dove scelgo io le date.

    Primo codice:
    Codice: 
     Function CreaQueryDefPermanente2(strPercorsoDb As String, _    strNomeQuery2 As String, strSQL As String) As Boolean
        Const conObjectExists As Integer = 3012
        ' Crea un oggetto QueryDef permanente.
        ' Argomenti:
        ' strPercorsoDb: Il percorso per il database.
        ' strNomeQuery: Il nome della nuova query.
        ' strSQL: L'enunciato SQL sul quale è basata la query .
        
        ' Restituisce :
        ' Un valore logico (True/False) che indica
        ' se l'operazione è andata a buon fine.
        
        On Error GoTo Err_CreaQuerydefPermanente2
        Dim dbs As DAO.Database
        Dim qdf As DAO.QueryDef
        
        Set dbs = OpenDatabase(strPercorsoDb)
        ' Crea l'oggetto QueryDef.
        Set qdf = dbs.CreateQueryDef(strNomeQuery2)
        ' Imposta la sua proprietà SQL.
        qdf.SQL = strSQL
        qdf.Close
        CreaQueryDefPermanente2 = True
    
    
    Exit_CreaQuerydefPermanente2:
        On Error Resume Next
        dbs.Close
        Set dbs = Nothing
        Exit Function
    
    
    Err_CreaQuerydefPermanente2:
        If Err = conObjectExists Then
        Dim strMsg As String
        strMsg = "La query " & strNomeQuery2 & " esiste già. " _
            & vbCrLf & "La elimino e la creo di nuovo?"
        If MsgBox(strMsg, vbYesNo) = vbYes Then
            dbs.QueryDefs.Delete strNomeQuery2
            Resume
        End If
        Else
            MsgBox "Errore: " & Err & vbCrLf & Err.Description
        End If
        CreaQueryDefPermanente2 = False
        Resume Exit_CreaQuerydefPermanente2
    End Function

    ed il secondo codice:
    Codice: 
    Private Sub CreaQuerySceltaDate_Click()'Crea un oggetto QueryDef permanente che restituisce
    'il totale degli ordini per impiegato potendo scegliere tra una data iniziale ed una data finale
    
    
    'Chiama la funzione CreaQueryDefPermanente
    Dim strSQL As String
    Dim strPercorso As String
    Dim strNomeQuery2 As String
    
    
        strNomeQuery2 = "Ordini2"
        strPercorso = CurrentDb.Name
        
    'Definisce l'enunciato SQL
        strSQL = "SELECT Ordini.IDImpiegato, " & _
        "Sum((PrezzoUnitario*Quantità)-Sconto) as PrezzoComplessivo " & _
        "FROM Ordini INNER JOIN [Dettagli ordini] ON " & _
        "Ordini.IDOrdine = [Dettagli ordini].IDOrdine " & _
        "WHERE (((Ordini.DataOrdine) Between [ INSERIRE LA DATA INIZIALE:  ] And [ INSERIRE LA DATA FINALE:  ])) " & _
        "GROUP BY Ordini.IDImpiegato;"
        
        If CreaQueryDefPermanente2(strPercorso, strNomeQuery2, strSQL) Then
            MsgBox "Query creata correttamente"
        End If
    
    
    End Sub
    Cordiali saluti

  3. I seguenti utenti hanno dato un "Utile"


  4. #3
    L'avatar di CisKo
    Clicca e Apri
    Data Registrazione
    Apr 2016
    Località
    Calabria
    Messaggi
    895
    Versione Office
    2003-2010-2013
    Utile ricevuti
    80
    Utile dati
    41

    Re: Come creare una query da programma

    ciao programmd69
    interessante
    solo su una cosa non mi trovi più d'accordo
    che ormai da anni ho smesso di fare "il blocco dei lavori"
    penso che sia inutile dato che tra strumenti, gente curiosa, bloccare un'applicativo è diventato solo una perdita di tempo.

    Basta dalla visualizzazione opzioni db disabilitare le varie tabelle query ecc in visualizzazione oppure disabilitare il riquadro di spostamento

    almeno ti concentri di più sul lavoro verò e proprio .

    anche perchè ad oggi chi sviluppa in ms access è perchè esegue un lavoro dedicato per qualcuno
    quindi di per se non idoneo per tutti .

    Il mondo è pieno di problemi affascinanti che aspettano di essere risolti - Nessun problema dovrebbe mai essere risolto due volte - Noia e ripetitività sono il male - La libertà è un bene - Pubblica informazioni utili - Aiuta a mantenere l'infrastruttura di lavoro.

Discussioni Simili

  1. Programma a tempo
    Di MABIMABI nel forum Domande su Excel VBA e MACRO
    Risposte: 7
    Ultimo Messaggio: 08/02/17, 10:44
  2. Creare programma per gestione pazienti anamnesi
    Di geometrak nel forum Domande su Excel in generale
    Risposte: 1
    Ultimo Messaggio: 06/01/17, 15:24
  3. velocità del programma
    Di John nel forum Domande su Excel VBA e MACRO
    Risposte: 13
    Ultimo Messaggio: 09/10/16, 01:06
  4. [Risolto] Estrarre un testo da una stringa di una tabella tramite query, e poi creare una nuova tabella
    Di ProgrammD69 nel forum Domande su Microsoft Access
    Risposte: 11
    Ultimo Messaggio: 05/09/16, 08:21
  5. aiuto programma
    Di antonysameli nel forum Domande su Excel VBA e MACRO
    Risposte: 19
    Ultimo Messaggio: 31/10/15, 06:28

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •