Query di accodamento

di il
24 risposte

24 Risposte - Pagina 2

  • Re: Query di accodamento

    @Alex ha scritto:


    Secondo me non sai come si fa debug...
    Non posso non darti ragione!

    max.riservo ha scritto:


    Mostraci il contenuto di a (quello che viene scritto nella finestra immediata dopo che viene eseguita l'istruzione debug.print a)
    INSERT INTO tblAssGasolio (CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) SELECT (5,17) AS ID_FASCICOLO_AZIENDALE, ID_REC, CAMPAGNA, OPERATORE, 1 AS ID_DOMANDAFROM frmAGGuma WHERE ID_FASCICOLO_AZIENDALE in (5,17)
    Questo è quello che mi viene fuori scegliendo il codice pratica numero 1 e due aziende
  • Re: Query di accodamento

    Marcdreamer ha scritto:


    INSERT INTO tblAssGasolio (CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) SELECT (5,17) AS ID_FASCICOLO_AZIENDALE, ID_REC, CAMPAGNA, OPERATORE, 1 AS ID_DOMANDAFROM frmAGGuma WHERE ID_FASCICOLO_AZIENDALE in (5,17)
    ID_DOMANDAFROM
    MANCA LO SPAZIO !!!!
    
    INSERT INTO tblAssGasolio
           (CUAA,
            CAMPAGNA,
            OPERATORE,
            ID_REC,
            ID_FASCICOLO_AZIENDALE,
            ID_DOMANDA)
    SELECT (5,17) AS ID_FASCICOLO_AZIENDALE,
          ID_REC,
          CAMPAGNA,
          OPERATORE,
          1 AS ID_DOMANDA
    FROM frmAGGuma 
    WHERE ID_FASCICOLO_AZIENDALE in (5,17)
    Questa query FA SCHIFO !!!!
    - Hai 6 campi da riempire (insert into) ma ne estrai SOLO 5 dalla Select -> sintax error
    - manca lo spazio tra id_domanda e FROM -> sintax error
    - select (5,17) ???? sei sicuro
    Cerca di trovare la giusta sintassi tramite il QBE, poi ne riparliamo !
  • Re: Query di accodamento

    max.riservo ha scritto:


    Marcdreamer ha scritto:


    INSERT INTO tblAssGasolio (CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) SELECT (5,17) AS ID_FASCICOLO_AZIENDALE, ID_REC, CAMPAGNA, OPERATORE, 1 AS ID_DOMANDAFROM frmAGGuma WHERE ID_FASCICOLO_AZIENDALE in (5,17)
    ID_DOMANDAFROM
    MANCA LO SPAZIO !!!!
    Questa query FA SCHIFO !!!!
    - Hai 6 campi da riempire (insert into) ma ne estrai SOLO 5 dalla Select -> sintax error
    - manca lo spazio tra id_domanda e FROM -> sintax error
    - select (5,17) ???? sei sicuro
    Cerca di trovare la giusta sintassi tramite il QBE, poi ne riparliamo !
    Nel mentre che facevo altre prove, mi sono accorto dell'assenza di spazio.

    Adesso (poi, magari domani farò altre prove) ho modificato così:
     For Each varItm In E_INA.ItemsSelected
                strSQL = strSQL & "," & E_INA.ItemData(varItm)
                Next varItm
                
                strSQL = Right(strSQL, Len(strSQL) - 1)
                Testo7 = strSQL
            a = "INSERT INTO tblAssGasolio " _
            & "(CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) " _
            & "SELECT " & E_INA.ItemData(varItm) & " AS ID_FASCICOLO_AZIENDALE, ID_REC, " _
            & "CAMPAGNA, OPERATORE, " & Me.tipo.Value & " AS ID_DOMANDA, CUAA " _
            & "FROM Q_InadempientiUMAAGG WHERE ID_FASCICOLO_AZIENDALE in (" & (strSQL) & ")"
            Debug.Print a
    Q_InadempientiUMAAGG è la query della casella di riepilogo

    e il debug.print è:
    INSERT INTO tblAssGasolio (CUAA, CAMPAGNA, OPERATORE, ID_REC, ID_FASCICOLO_AZIENDALE, ID_DOMANDA) SELECT ID AS ID_FASCICOLO_AZIENDALE, ID_REC, CAMPAGNA, OPERATORE, 1 AS ID_DOMANDA, CUAA FROM Q_InadempientiUMAAGG WHERE ID_FASCICOLO_AZIENDALE in (5,17)
    Adesso non mi riporta alcun errore, ma non funziona comunque
  • Re: Query di accodamento

    Marcdreamer ha scritto:


    
    INSERT INTO tblAssGasolio 
        (CUAA,
         CAMPAGNA, 
         OPERATORE, 
         ID_REC, 
         ID_FASCICOLO_AZIENDALE, 
         ID_DOMANDA)
    SELECT 
         ID AS ID_FASCICOLO_AZIENDALE, 
         ID_REC, 
         CAMPAGNA, 
         OPERATORE, 
         1 AS ID_DOMANDA, 
         CUAA 
    FROM Q_InadempientiUMAAGG 
    WHERE ID_FASCICOLO_AZIENDALE in (5,17)
    
    Procedi per gradi. La query di selezione funziona ? La provi direttamente nel QBE : estrae dei record ?
    
    SELECT 
         ID AS ID_FASCICOLO_AZIENDALE, 
         ID_REC, 
         CAMPAGNA, 
         OPERATORE, 
         1 AS ID_DOMANDA, 
         CUAA 
    FROM Q_InadempientiUMAAGG 
    WHERE ID_FASCICOLO_AZIENDALE in (5,17)
    Se si procedi, se no è sbagliata la select (o non esistono dei dati).

    Se la query di selezione produce dei risultati, ti consiglio di rispettare l'ordine dei campi della select e quelli della insert to (parti dall'ordine della select e adegui la insert to).
    Altra considerazione importante : tra i vari campi che estrai dalla select c'è per caso un campo con ID automatico (autoincrement) ?
    Se sì c'è anche autoincrement nella tabella di destinazione ?
    Se sì NON si può fare (l'estrazione SI, l'inserimento NO, è il motore del Db che assegna il valore i campi autoincrement).
  • Re: Query di accodamento

    max.riservo ha scritto:



    Se si procedi, se no è sbagliata la select (o non esistono dei dati).

    Se la query di selezione produce dei risultati, ti consiglio di rispettare l'ordine dei campi della select e quelli della insert to (parti dall'ordine della select e adegui la insert to).
    Altra considerazione importante : tra i vari campi che estrai dalla select c'è per caso un campo con ID automatico (autoincrement) ?
    Se sì c'è anche autoincrement nella tabella di destinazione ?
    Se sì NON si può fare (l'estrazione SI, l'inserimento NO, è il motore del Db che assegna il valore i campi autoincrement).
    Ciao Max,

    ho modificato la query di insert into in questa maniera in QBE:
    INSERT INTO tblAssGasolio 
    ( ID_FASCICOLO_AZIENDALE, 
    Campagna, 
    OPERATORE, 
    ID_DOMANDA, 
    CUAA )
    SELECT 
    Q_InadempientiUMAAGG.ID AS ID_FASCICOLO_AZIENDALE, 
    Date() AS CAMPAGNA, 
    [MASCHERE]![FRMSCHEDAAZIENDALE]![UTENTE] AS OPERATORE, 
    [MASCHERE]![FRMAGGUMA]![TIPO] AS ID_DOMANDA, 
    Q_InadempientiUMAAGG.CUAA
    FROM Q_InadempientiUMAAGG
    WHERE (((Q_InadempientiUMAAGG.ID) In (5,17)));
    
    Qui, la query funziona.

    Da VBA, invece continua a non funzionare ... mi riporta sempre errore di sintassi. Riposto la stringa SQL:
    a = "INSERT tblAssGasolio " _
            & "(ID_FASCICOLO_AZIENDALE, CAMPAGNA, OPERATORE, ID_DOMANDA, CUAA) " _
            & "SELECT " & E_INA.ItemData(varItm) & " AS ID_FASCICOLO_AZIENDALE, ID_REC, " _
            & Date & " AS CAMPAGNA, " & Forms("frmSchedaAziendale")!utente & " as OPERATORE, " & Me.tipo.Value & " _
            & "AS ID_DOMANDA, CUAA " & "FROM Q_InadempientiUMAAGG WHERE ID in (" & (strSQL) & ")"
    Il debug.print mi riporta questo:
    INSERT tblAssGasolio 
    (ID_FASCICOLO_AZIENDALE, 
    CAMPAGNA, 
    OPERATORE, 
    ID_DOMANDA, 
    CUAA) 
    SELECT 
    ID AS ID_FASCICOLO_AZIENDALE, 
    ID_REC, 
    18/04/2020 AS CAMPAGNA, 
    xxxxxx yyyyyy as OPERATORE, 
    1 AS ID_DOMANDA, 
    CUAA 
    FROM Q_InadempientiUMAAGG WHERE ID in (5,17)
    Ho provato a fare un replace della strSQL in modo da avere il punto e virgola e non la semplice in virgola, ma mi da sempre errore (e quindi non credo sia quello il problema)
  • Re: Query di accodamento

    Marcdreamer ha scritto:


    
    INSERT INTO tblAssGasolio 
        ( ID_FASCICOLO_AZIENDALE, 
          Campagna, 
          OPERATORE, 
          ID_DOMANDA, 
          CUAA )
    SELECT 
        Q_InadempientiUMAAGG.ID AS ID_FASCICOLO_AZIENDALE, 
        Date() AS CAMPAGNA, 
        [MASCHERE]![FRMSCHEDAAZIENDALE]![UTENTE] AS OPERATORE, 
        [MASCHERE]![FRMAGGUMA]![TIPO] AS ID_DOMANDA, 
        Q_InadempientiUMAAGG.CUAA
    FROM Q_InadempientiUMAAGG
    WHERE (((Q_InadempientiUMAAGG.ID) In (5,17)));
    
    Quindi, finalmente hai la query che funziona.
    
    INSERT tblAssGasolio 
        (ID_FASCICOLO_AZIENDALE, 
        CAMPAGNA, 
        OPERATORE, 
        ID_DOMANDA, 
        CUAA) 
    SELECT 
        ID AS ID_FASCICOLO_AZIENDALE, 
        ID_REC, 
     [b]   18/04/2020 AS CAMPAGNA, [/b]
     [b]   xxxxxx yyyyyy as OPERATORE, [/b]
     [b]   1 AS ID_DOMANDA, [/b]
        CUAA 
    FROM Q_InadempientiUMAAGG WHERE ID in (5,17)
    
    I campi evidenziati a me sembra che debbano essere dei criteri di ricerca (quindi debbano rientrare nella Where).
    Se invece devono essere dei valori fissi allora, quelli alfanumerici (stringa) devono essere racchiusi tra apici o doppi apici.
    Supponendo che Campagna sia di tipo Data, Operatore sia di tipo Stringa e ID_Domanda sia di tipo numerico :
    
     [b]   cvdate('18/04/2020') AS CAMPAGNA, [/b]
     [b]   'xxxxxx yyyyyy' as OPERATORE, [/b]
     [b]   1 AS ID_DOMANDA, [/b]
     
    Comunque DEVI sempre esercitarti con il debug e quanto ti ho suggerito lo puoi provare direttamente nel QBE fino a quando NON trovi la sintassi corretta.
    Ti ricordo che quando utilizzi le funzioni nel QBE i parametri DEVONO essere separati dal ; (punto e virgola) mentre nel VBA DEVONO essere separati dal , (virgola). Questa nota si riferisce ai parametri delle funzioni e non alla sintassi SQL.
  • Re: Query di accodamento

    max.riservo ha scritto:



    I campi evidenziati a me sembra che debbano essere dei criteri di ricerca (quindi debbano rientrare nella Where).
    Se invece devono essere dei valori fissi allora, quelli alfanumerici (stringa) devono essere racchiusi tra apici o doppi apici.
    Supponendo che Campagna sia di tipo Data, Operatore sia di tipo Stringa e ID_Domanda sia di tipo numerico :
    
     [b]   cvdate('18/04/2020') AS CAMPAGNA, [/b]
     [b]   'xxxxxx yyyyyy' as OPERATORE, [/b]
     [b]   1 AS ID_DOMANDA, [/b]
     
    Ciao Max.

    Scusa se rispondo solo ora.
    Quei campi devono essere dei valori fissi, ne ero quasi certo che mancavano degli apici.
    Il problema è che spesso mi dava l'errore "tipo di dati non consentito" o una roba del genere.
    Con l'esempio che hai fatto ho capito dove sbagliavo ed ho corretto!

    Ora la query è perfettamente funzionante! e l'ho già riciclata per farne delle altre
    Grazie mille!
  • Re: Query di accodamento

    Molto bene, alla fine sei arrivato al risultato. Spero che tu abbia imparato un pò dell'arte del debug.

    max.riservo ha scritto:


    
    INSERT tblAssGasolio 
        (ID_FASCICOLO_AZIENDALE, 
       cvdate('18/04/2020') AS CAMPAGNA, 
       'xxxxxx yyyyyy' as OPERATORE, 
       1 AS ID_DOMANDA, 
        CUAA) 
    SELECT 
        ID AS ID_FASCICOLO_AZIENDALE, 
         CUAA 
    FROM Q_InadempientiUMAAGG WHERE ID in (5,17)
    
    Probabilmente questa query è quella più corretta (o quantomeno più compatta).
    Se hai dei valori fissi tanto vale metterli direttamente nella Insert ...
  • Re: Query di accodamento

    max.riservo ha scritto:


    Molto bene, alla fine sei arrivato al risultato. Spero che tu abbia imparato un pò dell'arte del debug.
    
    INSERT tblAssGasolio 
        (ID_FASCICOLO_AZIENDALE, 
       cvdate('18/04/2020') AS CAMPAGNA, 
       'xxxxxx yyyyyy' as OPERATORE, 
       1 AS ID_DOMANDA, 
        CUAA) 
    SELECT 
        ID AS ID_FASCICOLO_AZIENDALE, 
         CUAA 
    FROM Q_InadempientiUMAAGG WHERE ID in (5,17)
    
    Probabilmente questa query è quella più corretta (o quantomeno più compatta).
    Se hai dei valori fissi tanto vale metterli direttamente nella Insert ...
  • Re: Query di accodamento

    Molto bene, alla fine sei arrivato al risultato. Spero che tu abbia imparato un pò dell'arte del debug.
    
    INSERT tblAssGasolio 
        (ID_FASCICOLO_AZIENDALE, 
       cvdate('18/04/2020') AS CAMPAGNA, 
       'xxxxxx yyyyyy' as OPERATORE, 
       1 AS ID_DOMANDA, 
        CUAA) 
    SELECT 
        ID AS ID_FASCICOLO_AZIENDALE, 
         CUAA 
    FROM Q_InadempientiUMAAGG WHERE ID in (5,17)
    
    Probabilmente questa query è quella più corretta (o quantomeno più compatta).
    Se hai dei valori fissi tanto vale metterli direttamente nella Insert ...
Devi accedere o registrarti per scrivere nel forum
24 risposte