Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

[Access] Come passare parametri alle query da vba

  1. #1
    matnet2007 non è in linea Novello
    salve sono matnet, neofita ovviamente
    (quindi necessito di vostro aiuto....)

    cioè ho creato nel mio database, tante query che mi aprono altrettanti report (prima facevo di peggio: per ogni tabella, una maschera, .....).

    ma esaminando queste query, è venuto fuori che sostanzialmente è sempre la stessa eseguita con parametri diversi alla pressione di un tasto.

    allora questo è il codice che ho inserito al click in un pulsante:

    Private Sub Comando39_Click()
    On Error GoTo Err_Comando39_Click
    DoCmd.OpenQuery "Q_Elimina", acViewNormal, acEdit
    Exit_Comando39_Click:
    Exit Sub
    Err_Comando39_Click:
    MsgBox "Operazione Annullata!"
    End Sub

    la query è formata da questi campi:
    T_MOVIMENTI* , elimino tutti i movimenti dalla relativa tabella se:
    ID_MOTIVO , (variabile che nel mio caso determina ben 4 query diverse)
    ID_IMPIEGATO, (altra variabile controllata tramite una casella combinata)
    DATA_INIZIO , (altra variabile controllata tramite casella di testo)
    avevo pensato di sostituire anche per ID_MOTIVO una casella combinata, ma, guardando il risultato, verrebbe una cosa troppo dettagliata e parliamo di parecchi campi.
    A me serve che di un impiegato si possano eliminare
    sostanzialmente questi quattro parametri:
    5 (identificativo recupero, elimino assenza espressa in ore);
    14 (identificativo straordinario, elimino presenza espressa in ore);
    <>5 And <>14 (cioè voglio eliminare tutte le assenze espresse in giorni);
    <>14 (cioè voglio eliminare tutte le assenze, sia in giorni che in ore, ma non
    le presenze orarie);

    ho provato cercando di risolvere creando un gruppo di opzioni, ma ad ogni opzione posso associare un numero e uno solo, se provo a scrivergli "<>5" oppure "like....qualcosa" mi dice che devo inserire un valore numerico.
    ho anche provato a copiare la stringa sql dalla query e sostituendo docmd.openquery con docmd.runsql, ma la sintassi sembra diversa,
    come posso risolvere ????
    grazie in anticipo per l'aiuto
    by matnet

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Come nuovo arrivato ti consiglio di leggere il Regolamento è utile a tutti.

    Ad esempio il subject anche se spiritoso DEVE essere pertinente, e la prima parte non mi pare lo sia.

    La richiesta è assolutamente non chiara...!
    Riassumi semplicemente con 3 esempi che forse dissipano meglio la nebbia....
    Ultima modifica di @Alex; 29-07-2007 23:12 
    ℹ️ Leggi di più su @Alex ...

  3. #3
    matnet2007 non è in linea Novello
    momentaneamente, come ti ho già detto ho quattro query, che eseguono la medesima ricerca, tutte variano semplicemente per un parametro (a causa di questo ho create le 4....).
    il codice sql di una delle quattro è il seguente:

    DELETE T_Movimenti.*, T_Movimenti.ID_MOT, T_Movimenti.ID_IMP, T_Movimenti.DATAFI
    FROM T_Movimenti
    WHERE (((T_Movimenti.ID_MOT)<>5 And (T_Movimenti.ID_MOT)<>14) AND ((T_Movimenti.ID_IMP) Like [forms]![M_Attila]![CasellaCombinata29] & "*") AND ((T_Movimenti.DATAFI) Between [forms]![M_Attila]![testo18] And [forms]![M_Attila]![testo20]));


    è proprio quel WHERE che cambia, ed il cambiamento è fisso, per il primo parametro (T_Movimenti.ID_MOT)<>5 And (T_Movimenti.ID_MOT)<>14) che può essere cioè:
    1. è 5
    2. è 14
    3. è <>14
    4. è <>5 and <>14 (come la stringa sopra)
    a questo punto le query non le voglio più.
    alla pressine del pulsante su click, anzichè delle query vorrei eseguisse direttamene il codice sql con le varie opzioni.
    le altre opzioni (casellacombinata etc...), sarebbero già attive in quanto i pulsanti sono nella medesima maschera, alla fine, in modo da inserire ovviamente tutti gli altri parametri prima di quello determinante: 5, 14, <>14, <>5 and <>14....)

    spero di essere riuscito ad esprimermi con maggior chiarezza.
    il codice, copiato e con il comando docmd.runsql anzichè DoCmd.OpenQuery non funziona (il primo errore che mi da è in corripsondenza dell' * al DELETE T_Movimenti.* dice che è previsto fine istruzione....
    by matnet

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Io proporrei le 4 opzioni sfruttando un OptionGroup, e su evento AfterUpdate compili in modo corretto il predicato SQL così non serve nessuna Query, l'esecuzione la deleghi ad un CommandButton:
    Private Sub cmdButton_Click()
         Dim strSQL as String
         Select Case me!OptSelezione
               Case 1
                     strSQL="DELETE * FROM T_Movimenti WHERE ID_MOT=5;"
               Case 2
                     strSQL="DELETE * FROM T_Movimenti WHERE ID_MOT=14;"
               Case 3
                     strSQL="DELETE * FROM T_Movimenti WHERE ID_MOT<>14;"
               Case 4
                     strSQL="DELETE * FROM T_Movimenti WHERE ID_MOT<>5 AND ID_MOT<>14;"
                     ' questa può anche essere scritta così:
                     'strSQL="DELETE * FROM T_Movimenti WHERE ID_MOT NOT IN(5,14);"
         End Select
         CurrentDb.Execute strSQL, dbFailOnError
    End Sub
    
    Prevedi magari una conferma dell'operazione trattandosi di un DELETE
    Saluti
    Ultima modifica di @Alex; 30-07-2007 11:32 
    ℹ️ Leggi di più su @Alex ...

  5. #5
    matnet2007 non è in linea Novello
    mi.....ttttt......tttii.......kkkoooo!!!! aleeeeexxx

    aspita i miei complimenti, sei davvero all'altezza della tua fama.

    hai davvero centrato in pieno il problema....

    proprio quello che non riuscivo a fare:
    inserire in un gruppo di opzioni dei valori diversi dai soliti numeri
    che mi permettessero di mantenere il database cosi' com'e', senza stravolgerlo troppo.

    io, bovinamente ricopiavo la sintassi sql dalle query e dicevo al vba di applicarlo.......
    non mi sarei comunque mai aspettato una cosa del genere pero':
    entrambi all'interno di access, che utilizza una sintassi sql diversa a seconda dell'occasione ????
    come mai ????
    sono due sql diversi ???.......

    grazie comunque dell'aiuto, ho riapplicato lo stesso principio ad altre query, per altre funzioni diverse dalla eliminazione, ed il risultato e' che il database ora si e' praticamente dimezzato.
    non saresti cosi' gentile da indicarmi una guida nella rete specifica all'sql di access ??? ne esiste una ????

    volevo inoltre porti anche un altro quesito, nella query originale esistevano altri due parametri:

    like [forms]![m_attila]![casellacombinata29] & "*" per selezionare il dipendente, e

    (t_movimenti.datafi) between [forms]![m_attila]![testo18] and [forms]![m_attila]![testo20] per restringere la distruzione (in quel caso) ad un periodo temporale ben preciso.

    siccome, ripeto applico gli stessi principi per fare altre cose, non ci sarebbe la possibilità di mantenere tali scelte all'interno del codice sql, magari impostando quei parametri dalla stessa maschera (notoriamente chiamata attila, originale vero ????), prima di visualizzare il gruppo di opzioni e fare la scelta definitiva??


    grazie comunque dell'aiuto che mi hai dato e che mi vorrai dare e ripeto:
    mmmmmiiiiiii...............tttttttttttttiiii...... ...kkkkkkkkkkkkkk000000!!!!!

    by matnet
    .........corretto
    Ultima modifica di matnet2007; 31-07-2007 15:49 

  6. #6
    matnet2007 non è in linea Novello
    scusa alex e scusate tutti,

    per la voce grossa che ho fatto prima, non intendevo urlare....

    emhhh le mie umilissime scuse, mi sono distratto con il mio bimbo di 6 mesi circa e

    non mi sono proprio accorto della emhhh ehmmmhh voce grossa.....

    comunque voglio fare i miei complimenti a tutti, vi vedo sempre imperterriti e pronti
    a dare consiglio a chiunque sacrificando il vostro tempo libero.......

    grazie......

    by matnet
    Ultima modifica di matnet2007; 31-07-2007 15:46 

  7. #7
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Non sò consigliarti testi in quanto sono fermo ad A97.. circa 10 anni fà, poi ho sempr eusato l'Help in linea.

    Il quesito attuale ricade nella casistica della gestione flessibile dei criteri ed è ovviamente fattibile, ma è decisamente più elaborato.

    In pratica dovresti creare una possibilità di scelta del criterio e validarne i parametri... cosa non banale.

    Nel demo che ho pubblicato nella sezione OpenSource c'è un concetto di questo tipo molto avanzato che serve per una query di SELEZIONE...

    http://forum.masterdrive.it/area-bet...runtime-17431/

    Se hai voglia di perderci qualche gg a capirlo troverai moltissimi spunti utili.
    ℹ️ Leggi di più su @Alex ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risolto: Passare parametri a più query
    Da CC88 nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 21-12-2020, 11:00
  2. Risposte: 3
    Ultimo Post: 09-03-2012, 17:55
  3. Risposte: 0
    Ultimo Post: 10-11-2010, 17:59
  4. Passare parametri alla query
    Da seamission nel forum Microsoft Word
    Risposte: 11
    Ultimo Post: 17-01-2010, 17:11
  5. [ASP.Net]Passare dei parametri ad una query
    Da BrandonHeat nel forum ASP 3, ASP .Net
    Risposte: 3
    Ultimo Post: 11-04-2006, 10:06