Query di accodamento

di il
24 risposte

Query di accodamento

Ciao a tutti,

ho un problema con l'esecuzione di una query di accodamento scritta in una routine di vba.
Comincio a spiegarmi:
Ho una maschera in cui sono presenti una casella di riepilogo (nella quale filtro tutte le aziende che non hanno mai fatto un certo tipo di pratica), un pulsante aggiorna (con il quale vorrei appunto attivare la query) ed un pulsante rimuovi selezione

Il codice che utilizzo (e che ovviamente non funziona per la query) è il seguente:
Private Sub AggSel_Click()
Dim strSQL As String
Dim strPRM As String
Dim varItm  As Variant

If Me.E_INA.ItemsSelected.Count < 2 Then
    MsgBox "Selezionare almeno due aziende da aggiornare", vbCritical
    Exit Sub
End If

For Each varItm In E_INA.ItemsSelected
   If E_INA.Selected(varItm) = True Then
     strSQL = strSQL & E_INA.ItemData(varItm) & ","
   End If
 Next
 
Testo7.Value = strSQL
strSQL = Left(strSQL, Len(strSQL) - 2)
strPRM = "ID_FASCICOLO_AZIENDALE IN(" & strSQL & ")"
If MsgBox("Proseguendo inserirai nuove assegnazioni gasolio di tipo " & Me.tipo.Column(1) & " per le aziende selezionate!" & vbNewLine & "Sei Sicuro?", vbYesNo) = vbNo Then
Exit Sub
Else
DoCmd.RunSQL "INSERT INTO tblAssGasolio SELECT CUAA, CAMPAGNA, OPERATORE, ID_FASCICOLO_AZIENDALE, ID_DOMANDA WHERE ID_FASCICOLO_AZIENDALE =" & strPRM
Me.E_INA.Requery
MsgBox "Operazione avvenuta con successo! N.  " & Me.E_INA.ItemsSelected.Count & "   Aziende aggiornate!"
End If
If MsgBox("Vuoi aggiungere altre assegnazioni?", vbYesNo) = vbNo Then
DoCmd.Close acForm, "frmAGGuma"
Else
Exit Sub
End If
End Sub
Preciso che un codice simile lo uso già per fare una query di aggiornamento e in quel caso funziona.

Qualcuno mi può gentilmente indicare la strada giusta da percorrere?

Grazie in anticipo e buona giornata

24 Risposte

  • Re: Query di accodamento

    Io noto che la prima assegnazione che fai a strSQL è questa
    strSQL = strSQL & E_INA.ItemData(varItm) & ","
    ma la prima volta strSQL non sarà mica vuota?
  • Re: Query di accodamento

    No perchè poi gli metto questo codice qui:
    strSQL = Left(strSQL, Len(strSQL) - 2)
  • Re: Query di accodamento

    Lo testo proprio mettendo il valore di strSQL in una casella di testo
  • Re: Query di accodamento

    Che vuol dire "non funziona"? Non parte o ti dà errore? Se è errore, quale?
  • Re: Query di accodamento

    Marcdreamer ha scritto:


    
    DoCmd.RunSQL "INSERT INTO tblAssGasolio SELECT CUAA, CAMPAGNA, OPERATORE, ID_FASCICOLO_AZIENDALE, ID_DOMANDA WHERE ID_FASCICOLO_AZIENDALE =" & strPRM
    
    Sei sicuro che la sintassi SQL sia corretta?
    Crea una stringa che contiene l'SQL completo e la passi al DoCmd.
    Se non funziona, tramite debug, prendi l'SQL completo (il valore della stringa precedente) e lo provi nel QBE.
    Vai avanti nel QBE fino a quando trovi la sintassi corretta della query.

    Nel frattempo cerchi la sintassi dell'INSERT INTO e la ocnfronti con quella che hai scritto .....
  • Re: Query di accodamento

    Scritta così:
    DoCmd.RunSQL "INSERT INTO tblAssGasolio SELECT CUAA, CAMPAGNA, OPERATORE, ID_FASCICOLO_AZIENDALE, ID_DOMANDA WHERE ID_FASCICOLO_AZIENDALE =" & strPRM
    mi genera un errore di run time che dice che manca un operatore

    Se invece, dovessi scrivere in questa maniera:
    DoCmd.RunSQL "INSERT INTO tblAssGasolio SELECT * FROM tblAssGasolio WHERE ID_FASCICOLO_AZIENDALE =" & Replace(strSQL, ",", ";")
    mi riporta un differente errore "Caratteri non previsti dopo la fine dell'istruzione"
  • Re: Query di accodamento

    max.riservo ha scritto:


    Marcdreamer ha scritto:


    
    DoCmd.RunSQL "INSERT INTO tblAssGasolio SELECT CUAA, CAMPAGNA, OPERATORE, ID_FASCICOLO_AZIENDALE, ID_DOMANDA WHERE ID_FASCICOLO_AZIENDALE =" & strPRM
    
    Sei sicuro che la sintassi SQL sia corretta?
    Crea una stringa che contiene l'SQL completo e la passi al DoCmd.
    Se non funziona, tramite debug, prendi l'SQL completo (il valore della stringa precedente) e lo provi nel QBE.
    Vai avanti nel QBE fino a quando trovi la sintassi corretta della query.

    Nel frattempo cerchi la sintassi dell'INSERT INTO e la ocnfronti con quella che hai scritto .....
    Ok ci provo
  • Re: Query di accodamento

    
    LaMiaStringaCheVoglioImparareADebuggare = "INSERT INTO tblAssGasolio SELECT CUAA, CAMPAGNA, OPERATORE, ID_FASCICOLO_AZIENDALE, ID_DOMANDA WHERE ID_FASCICOLO_AZIENDALE =" & strPRM
    
    DoCmd.RunSQL LaMiaStringaCheVoglioImparareADebuggare 
    
    Inzia così .... poi se vuoi ci mostri cosa contiene LaTuaStringaCheVorrestiTantoMaTantoImparareADebuggare ......
  • Re: Query di accodamento

    max.riservo ha scritto:


    Sei sicuro che la sintassi SQL sia corretta?
    Crea una stringa che contiene l'SQL completo e la passi al DoCmd.
    Se non funziona, tramite debug, prendi l'SQL completo (il valore della stringa precedente) e lo provi nel QBE.
    Vai avanti nel QBE fino a quando trovi la sintassi corretta della query.
    Concordo molto favorevolmente. Questa tattica la uso spesso anch'io quando non mi raccapezzo con la sintassi SQL da dare in pasto al VBA. E funziona quasi sempre.
  • Re: Query di accodamento

    Fai debug r metti un Debug.Print prima di eseguire il Runsql e stampa in finestra immediata il costrutto SQL completo e pubblicalo se non trovi già così il problema.
  • Re: Query di accodamento

    @Alex ha scritto:


    Fai debug r metti un Debug.Print prima di eseguire il Runsql e stampa in finestra immediata il costrutto SQL completo e pubblicalo se non trovi già così il problema.
    Ciao Alex

    Ho provato in mille maniere diverse, ma il debug.print mi riporta sempre falso

    Al momento, ho modificato la stringa SQL in questa maniera:
    Debug.Print a = "INSERT INTO tblAssGasolio " _
            & "(CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) " _
            & "SELECT (" & Me.Testo7 & ") AS ID_FASCICOLO_AZIENDALE, ID_REC, " _
            & "CAMPAGNA, OPERATORE," & Me.tipo.Value & " AS ID_DOMANDA" _
            & "FROM frmAGGuma WHERE ID_FASCICOLO_AZIENDALE in (" & Me.Testo7 & ")"
            DoCmd.RunSQL a
    Non so più che fare

    Per scrivere il codice modificato, ho preso spunto da un altro sito ma in quel caso l'utente prima sceglieva un'azienda e poi una o più pratiche.

    Io invece vorrei scegliere prima tutte le aziende (che mi servono) e poi il tipo di pratica.

    In ogni caso se non sarò in grado di capire i vostri suggerimenti, continuerò come ho sempre fatto. Cioè aggiungere manualmente

    grazie e buona serata
  • Re: Query di accodamento

    Marcdreamer ha scritto:


    Debug.Print a = "INSERT INTO tblAssGasolio " _
            & "(CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) " _
            & "SELECT (" & Me.Testo7 & ") AS ID_FASCICOLO_AZIENDALE, ID_REC, " _
            & "CAMPAGNA, OPERATORE," & Me.tipo.Value & " AS ID_DOMANDA" _
            & "FROM frmAGGuma WHERE ID_FASCICOLO_AZIENDALE in (" & Me.Testo7 & ")"
            DoCmd.RunSQL a
    
    a = "INSERT INTO tblAssGasolio " _
            & "(CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) " _
            & "SELECT (" & Me.Testo7 & ") AS ID_FASCICOLO_AZIENDALE, ID_REC, " _
            & "CAMPAGNA, OPERATORE," & Me.tipo.Value & " AS ID_DOMANDA" _
            & "FROM frmAGGuma WHERE ID_FASCICOLO_AZIENDALE in (" & Me.Testo7 & ")"
    debug.print a
    DoCmd.RunSQL a
    
    Mostraci il contenuto di a (quello che viene scritto nella finestra immediata dopo che viene eseguita l'istruzione debug.print a)
  • Re: Query di accodamento

    Secondo me non sai come si fa debug...
    
    a = "INSERT INTO tblAssGasolio " _
            & "(CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) " _
            & "SELECT (" & Me.Testo7 & ") AS ID_FASCICOLO_AZIENDALE, ID_REC, " _
            & "CAMPAGNA, OPERATORE," & Me.tipo.Value & " AS ID_DOMANDA" _
            & "FROM frmAGGuma WHERE ID_FASCICOLO_AZIENDALE in (" & Me.Testo7 & ")"
            
            Debug.Print a
    
    Il RunSQL poi lo si vede... intanto stampa e pubblica...
  • Re: Query di accodamento

    @Alex ha scritto:


    Secondo me non sai come si fa debug...
    +1
Devi accedere o registrarti per scrivere nel forum
24 risposte