Query Access che segnala errore - via db manager funziona

di il
31 risposte

Query Access che segnala errore - via db manager funziona

Dispongo di un db su Firebird che viene acceduto da procedure Access via odbc

Il problema e' trovare le righe fatture ricevute che sono senza indicazioni delle righe pagamento 

Sto tentando di capire come mai questa query non mi funziona

SELECT F.*, C.*
FROM FERICEVUTE F
LEFT JOIN (
    FERICEVUTEBODY B 
    LEFT JOIN FERICEVUTEDATIPAG D 
    ON B.ID_FERICEVUTEBODY = D.ID_FERICEVUTEBODY
) ON F.ID_FERICEVUTE = B.ID_FERICEVUTE
LEFT JOIN (
    FERICEVUTEHEADER H 
    LEFT JOIN FERICEVUTECEDENTE C 
    ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER
) ON F.ID_FERICEVUTE = H.ID_FERICEVUTE
WHERE D.ID_FERICEVUTEBODY IS NULL;

Verificato piu' volte che nomi tabelle e campi siano corretti, e lo sono

Prova ne sia il fatto che se la stessa identica query la lancio da un db manager qualsiasi, nel mio caso uso FlameBird, restituisce le righe richieste correttamente

Evidentemente Access ci mette qualcosa di suo prima di andare ad interrogare i dati

E quindi la domanda e':  vedete qualcosa di strano sulla query indicata sopra?

31 Risposte

  • Re: Query Access che segnala errore - via db manager funziona

    L'errore lo segnala qui

    28/03/2025 - amorosik ha scritto:

    F.ID_FERICEVUTE = B.ID_FERICEVUTE 

    LEFT JOIN ( FERICEVUTEHEADER H 

                       LEFT JOIN FERICEVUTECEDENTE C ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER )

     ON F.ID_FERICEVUTE = H.ID_FERICEVUTE WHERE D.ID_FERICEVUTEBODY IS NULL;

    FERICEVUTECEDENTE C

    non vedo la tabella FERICEVUTECEDENTE

    mostra tutte le tabelle. dalle relazioni sarebbe:

    SELECT *  
    FROM FERICEVUTE A
    LEFT JOIN FERICEVUTEHEADER B ON A.ID_FERICEVUTE=B.ID_FERICEVUTE
    LEFT JOIN
             (SELECT * 
              FROM FERICEVUTEBODY C
              LEFT JOIN FERICEVUTEDATIPAG D ON C.ID_FERICEVUTEBODY=D.ID_FERICEVUTEBODY) F ON A.ID_FERICEVUTE=F.ID_FERICEVUTE
    WHERE B.ID_FERICEVUTEBODY IS NULL

    l'altra tabella (FERICEVUTECEDENTE) che relazione ha?

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - amorosik ha scritto:

    E quindi la domanda e':  vedete qualcosa di strano sulla query indicata sopra?

    FERICEVUTEHEADER  e FERICEVUTEBODY sembrano avere gli stessi campi: errato progettualmente. Da FERICEVUTE partono 2 linee di join...!!!???

    28/03/2025 - amorosik ha scritto:

    Il problema e' trovare le righe fatture ricevute che sono senza indicazioni delle righe pagamento 

    Potresti spiegarlo meglio indicando esattamente tabelle e campi di riferimento?

  • Re: Query Access che segnala errore - via db manager funziona

    Il messaggio dice

    "ON F.ID_FERICEVUTE = H.ID_FERICEVUT"

    magari devi scrivere

    ON F.ID_FERICEVUTE = H.ID_FERICEVUTE con la e finale

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - amorosik ha scritto:

    Il problema e' trovare le righe fatture ricevute che sono senza indicazioni delle righe pagamento 

    Questa non la capisco..

    Devi gestire il partitario (mastrino) inserendo in dare o avere l'importo col riferimento alla fattura (acconto o saldo) indipendentemente dalle righe.

    La fattura attiva ti genera un credito v/clienti

    All'incasso 

    Banca in dare (entrata)

    Cliente in avere (diminuizione credito)

    La causale indica le fatture che vai a chiudere in toto o in parte.

    Su fatture metti l'importo incassato

    Per vedere le partite aperte 

    Incassato<totale fattura as daincassare

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - sihsandrea ha scritto:

    l messaggio dice

    "ON F.ID_FERICEVUTE = H.ID_FERICEVUT"

    magari devi scrivere

    ON F.ID_FERICEVUTE = H.ID_FERICEVUTE con la e finale

    Se leggi bene, il codice e' scritto correttamente; e' il messaggio di errore che tronca parte della stringa.

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - amorosik ha scritto:

    SELECT F.*, C.*
    FROM FERICEVUTE F
    LEFT JOIN (
        FERICEVUTEBODY B 
        LEFT JOIN FERICEVUTEDATIPAG D 
        ON B.ID_FERICEVUTEBODY = D.ID_FERICEVUTEBODY
    ) ON F.ID_FERICEVUTE = B.ID_FERICEVUTE
    LEFT JOIN (
        FERICEVUTEHEADER H 
        LEFT JOIN FERICEVUTECEDENTE C 
        ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER
    ) ON F.ID_FERICEVUTE = H.ID_FERICEVUTE
    WHERE D.ID_FERICEVUTEBODY IS NULL;

    Che io sappia con Access NON riesci a fare Left join di Left join (almeno io non ci sono riuscito) ... Non ci sono riuscito neanche trasformando :

        FERICEVUTEHEADER H 
        LEFT JOIN FERICEVUTECEDENTE C 
        ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER

    in una query a sé stante (con la sintassi sql corretta ovviamente) inserita nella query principale. Se ci riesci e se vuoi, fai sapere come ingannare Access.

    Credo che l'unica soluzione sia fare una query PT (almeno io l'ho risolta così).

  • Re: Query Access che segnala errore - via db manager funziona

    Questo è il pezzo di query incriminato (purtroppo l'editor permette di evidenziare parti di testo che però poi non vengono mostrate) :

    LEFT JOIN (
        FERICEVUTEHEADER H 
        LEFT JOIN FERICEVUTECEDENTE C 
        ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER
    ) ON F.ID_FERICEVUTE = H.ID_FERICEVUTE
  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - sihsandrea ha scritto:

    L'errore lo segnala qui

    28/03/2025 - amorosik ha scritto:

    F.ID_FERICEVUTE = B.ID_FERICEVUTE 

    LEFT JOIN ( FERICEVUTEHEADER H 

                       LEFT JOIN FERICEVUTECEDENTE C ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER )

     ON F.ID_FERICEVUTE = H.ID_FERICEVUTE WHERE D.ID_FERICEVUTEBODY IS NULL;

    FERICEVUTECEDENTE C

    non vedo la tabella FERICEVUTECEDENTE

    mostra tutte le tabelle. dalle relazioni sarebbe:

    SELECT *  
    FROM FERICEVUTE A
    LEFT JOIN FERICEVUTEHEADER B ON A.ID_FERICEVUTE=B.ID_FERICEVUTE
    LEFT JOIN
             (SELECT * 
              FROM FERICEVUTEBODY C
              LEFT JOIN FERICEVUTEDATIPAG D ON C.ID_FERICEVUTEBODY=D.ID_FERICEVUTEBODY) F ON A.ID_FERICEVUTE=F.ID_FERICEVUTE
    WHERE B.ID_FERICEVUTEBODY IS NULL

    l'altra tabella (FERICEVUTECEDENTE) che relazione ha?

    Hai ragione, ho modificato l'immagine aggiungendo la tabella FECEDENTE

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - OsvaldoLaviosa ha scritto:

    28/03/2025 - amorosik ha scritto:

    E quindi la domanda e':  vedete qualcosa di strano sulla query indicata sopra?

    FERICEVUTEHEADER  e FERICEVUTEBODY sembrano avere gli stessi campi: errato progettualmente. Da FERICEVUTE partono 2 linee di join...!!!???

    28/03/2025 - amorosik ha scritto:

    Il problema e' trovare le righe fatture ricevute che sono senza indicazioni delle righe pagamento 

    Potresti spiegarlo meglio indicando esattamente tabelle e campi di riferimento?

    Le due tabelle che menzioni dispongono del campo ID_FERICEVUTE che consente loro di collegarsi alla riga FERICEVUTE corretta

    "..Potresti spiegarlo meglio .."  certamente, la sostanza della richiesta sta nel fatto che per ogni documento ricevuto esiste una riga in FERICEVUTE, a loro volta ogni documento ricevuto puo' avere indicate delle scadenze, inserite in FERIECVUTEDATIPAG, ma potrebbe anche non avere indicata nessuna scadenza

    Ecco, vorrei visualizzare solamente i documenti che NON hanno nessuna riga collegata in FERICEVUTEDATIPAG

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - sihsandrea ha scritto:

    Il messaggio dice

    "ON F.ID_FERICEVUTE = H.ID_FERICEVUT"

    magari devi scrivere

    ON F.ID_FERICEVUTE = H.ID_FERICEVUTE con la e finale

    Se ti riferisci alla penultima riga che appare nella query, non vedo nessuna lettera mancante, la   e   finale e' presente

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - sihsandrea ha scritto:

    28/03/2025 - amorosik ha scritto:

    Il problema e' trovare le righe fatture ricevute che sono senza indicazioni delle righe pagamento 

    Questa non la capisco..

    Devi gestire il partitario (mastrino) inserendo in dare o avere l'importo col riferimento alla fattura (acconto o saldo) indipendentemente dalle righe.

    La fattura attiva ti genera un credito v/clienti

    All'incasso 

    Banca in dare (entrata)

    Cliente in avere (diminuizione credito)

    La causale indica le fatture che vai a chiudere in toto o in parte.

    Su fatture metti l'importo incassato

    Per vedere le partite aperte 

    Incassato<totale fattura as daincassare

    Lascia stare tutte le tue ipotesi, non e' importante cosa voglio fare io

    L'importante e' capire il motivo per cui sta query dentro Access non funziona, se la copio paro/paro su un db manager funziona correttamente

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - max.riservo ha scritto:

    28/03/2025 - amorosik ha scritto:

    SELECT F.*, C.*
    FROM FERICEVUTE F
    LEFT JOIN (
        FERICEVUTEBODY B 
        LEFT JOIN FERICEVUTEDATIPAG D 
        ON B.ID_FERICEVUTEBODY = D.ID_FERICEVUTEBODY
    ) ON F.ID_FERICEVUTE = B.ID_FERICEVUTE
    LEFT JOIN (
        FERICEVUTEHEADER H 
        LEFT JOIN FERICEVUTECEDENTE C 
        ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER
    ) ON F.ID_FERICEVUTE = H.ID_FERICEVUTE
    WHERE D.ID_FERICEVUTEBODY IS NULL;

    Che io sappia con Access NON riesci a fare Left join di Left join (almeno io non ci sono riuscito) ... Non ci sono riuscito neanche trasformando :

        FERICEVUTEHEADER H 
        LEFT JOIN FERICEVUTECEDENTE C 
        ON H.ID_FERICEVUTEHEADER = C.ID_FERICEVUTEHEADER

    in una query a sé stante (con la sintassi sql corretta ovviamente) inserita nella query principale. Se ci riesci e se vuoi, fai sapere come ingannare Access.

    Credo che l'unica soluzione sia fare una query PT (almeno io l'ho risolta così).

    Ah, dici che non si possa fare una left join di una left join?  Eh questa mi mancava

    Qualcuno dei presenti (o degli assenti) puo' confermare che non si possa fare?

  • Re: Query Access che segnala errore - via db manager funziona

    La query l'hai costruita con il wizard di Access o gli hai passato la stringa SQL? 

    Mi sa che Max abbia ragione, hai provato a fare una prima query risolvendo parte della stringa e poi filtrare ulteriormente con una seconda query?

  • Re: Query Access che segnala errore - via db manager funziona

    28/03/2025 - Mailman ha scritto:

    La query l'hai costruita con il wizard di Access o gli hai passato la stringa SQL? 

    Mi sa che Max abbia ragione, hai provato a fare una prima query risolvendo parte della stringa e poi filtrare ulteriormente con una seconda query?

    No l'ho fatta a colpi di tentativi dentro FlameRobin che e' il db manager che uso

    Quando e' partita su FlameRobin l'ho copiata dentro Access, ma li non va come speravo

    Gia' adesso provo a mettere la subquery dentro una query a se stante e poi richiamarla nella query principale

Devi accedere o registrarti per scrivere nel forum
31 risposte