3075 errore di sintassi operatore mancante in query

di il
15 risposte

3075 errore di sintassi operatore mancante in query

Buongiorno e scusate in anticipo...

sto sbattendo da un po di tempo per far eseguire una query da vba tramite il comando execute...

questo è il debug.print della stringa sql

INSERT INTO TblFoglioUscita1 ( NrFU, DataFU, FKAuto, KmIniziali, KmFinali, FKFullCard ) SELECT 'IW' AS Espr1, [Maschere]![FrmAggiornaKmMensile]![txtdata] AS Espr2, TblKm.Targa, DLast(''[KmFinali]'',''[TblFoglioUscita1]'',''FKAuto=''' & [Targa] & ''''') AS Espr3, TblKm.Totali, 7 AS Espr4 FROM TblKm;

mi restituisce l'errore 3075 errore di sintassi (operatore mancante nell'espressione della query 'DLast(''[KmFinali]'',''[TblFoglioUscita1]'',''FKAuto=''' & [Targa] & ''''')'

inutile dire che se lancio la query di comando funziona tutto...di seguito SQL della query
INSERT INTO TblFoglioUscita1 ( NrFU, DataFU, FKAuto, KmIniziali, KmFinali, FKFullCard )
SELECT "IW" AS Espr1, [Maschere]![FrmAggiornaKmMensile]![txtdata] AS Espr2, TblKm.Targa, DLast("[KmFinali]","[TblFoglioUscita1]","FKAuto='" & [Targa] & "'") AS Espr3, TblKm.Totali, 7 AS Espr4
FROM TblKm;

penso ci sia qlc problema con gli apici nel parametro criteri...

per completezza la query accoda un record nuovo per ogni IDAuto(FKAuto) da una tabella appoggio TblKm importata ad hoc e prende come campo KmIniziali i precedenti ultimi...(da qui il Dlast sulla stessa tabella di accodamento)

l'esigenza nasce dal fatto che sto implementando questi dati da un'altra sorgente per tenere aggiornato il mio db ...

se ci sono soluzioni migliori sono tutto orecchie...

Ciccius

15 Risposte

  • Re: 3075 errore di sintassi operatore mancante in query

    Prova a modificare questo:
    
    [Maschere]![FrmAggiornaKmMensile]![txtdata] ----> [Forms]![FrmAggiornaKmMensile]![txtdata] 
  • Re: 3075 errore di sintassi operatore mancante in query

    Provato a sostituire Forms con Maschere ma niente... gira uguale e rimane l'errore nella parte della funzione...allego immagine
    Cattura.PNG
    Cattura.PNG

    ho anche provato a sostituire la"," con il ";" e rida stesso errore
  • Re: 3075 errore di sintassi operatore mancante in query

    CicciusPrime ha scritto:


    ho anche provato a sostituire la"," con il ";" e rida stesso errore
    confrontando i due predicati SQL che hai pubblicato vedo la differenza nell'uso del doppioapice e dei due apicetti (singoli) consecutivi, oltre alla mancanza dell'alias.
    'Errato
    DLast('' [KmFinali] '', '' [TblFoglioUscita1] '', '' FKAuto = ''' & [Targa] & '''''),
    
    'funzionante
    DLast("[KmFinali]", "[TblFoglioUscita1]", "FKAuto='" & [Targa] & "'") AS Espr3,
    Poi visto che la esegui da vba costruirei la SQL "completa", senza lasciare al suo interno riferimenti a maschere o altro.
    Intanto però guarda se il problema è il doppioapice.
  • Re: 3075 errore di sintassi operatore mancante in query

    Che io sappia (generalmente) il secondo argomento non prevede le parentesi quadre. Sostituisci "[TblFoglioUscita1]" con "TblFoglioUscita1"
  • Re: 3075 errore di sintassi operatore mancante in query

    OsvaldoLaviosa ha scritto:


    Che io sappia (generalmente) il secondo argomento non prevede le parentesi quadre. Sostituisci "[TblFoglioUscita1]" con "TblFoglioUscita1"
    Non sono obbligatorie a meno che non si tratti di tabelle/query che contengono caratteri particolari che ne rendono necessario l'uso. In questa situazione la differenza non dovrebbe essere lì
  • Re: 3075 errore di sintassi operatore mancante in query

    Philcattivocarattere ha scritto:


    CicciusPrime ha scritto:


    ho anche provato a sostituire la"," con il ";" e rida stesso errore
    confrontando i due predicati SQL che hai pubblicato vedo la differenza nell'uso del doppioapice e dei due apicetti (singoli) consecutivi, oltre alla mancanza dell'alias.
    'Errato
    DLast('' [KmFinali] '', '' [TblFoglioUscita1] '', '' FKAuto = ''' & [Targa] & '''''),
    
    'funzionante
    DLast("[KmFinali]", "[TblFoglioUscita1]", "FKAuto='" & [Targa] & "'") AS Espr3,
    Poi visto che la esegui da vba costruirei la SQL "completa", senza lasciare al suo interno riferimenti a maschere o altro.
    Intanto però guarda se il problema è il doppioapice.
    il problema del doppio apice è dato dal fatto che in vba dovrei concatenare tutti i doppiapici per comporre la stringa sql eseguibile... per quello ho rimediato mettendoli singoli in stringa...
  • Re: 3075 errore di sintassi operatore mancante in query

    CicciusPrime ha scritto:


    ...
    il problema del doppio apice è dato dal fatto che in vba dovrei concatenare tutti i doppiapici per comporre la stringa sql eseguibile... per quello ho rimediato mettendoli singoli in stringa...
    Devi costuire una SQL, con le regole di JET. Quello che hai fatto non si risolve con due apici dove c'era il doppioapice o roba del genere.
    Per avere questo
    DLast("[KmFinali]", "[TblFoglioUscita1]", "FKAuto='" & [Targa] & "'") AS Espr3,
    all'interno di una stringa, tra le varie possibilità, c'è quella di raddoppiare il doppio apice, oppure quella di usare Chr$(34) concatenando i vari "pezzi"
  • Re: 3075 errore di sintassi operatore mancante in query

    Sto cominciando a pensare di gestirmela con i DAO... volevo evitare questa soluzione perchè con una query di comando avevo già il risultato che mi serviva...
  • Re: 3075 errore di sintassi operatore mancante in query

    CicciusPrime ha scritto:


    Sto cominciando a pensare di gestirmela con i DAO... volevo evitare questa soluzione perchè con una query di comando avevo già il risultato che mi serviva...
    Cosa intendi dire con "i DAO"? Guarda che costruire la SQL non è difficile, hai già fatto il 75% del lavoro.
  • Re: 3075 errore di sintassi operatore mancante in query

    CicciusPrime ha scritto:


    Sto cominciando a pensare di gestirmela con i DAO... volevo evitare questa soluzione perchè con una query di comando avevo già il risultato che mi serviva...
    Prima meglio studiare un poco... i DAO non è una bacchetta magica che risolve il problema, anzi... ti dirò che il costrutto SQL che hai postato, anche se non lo sai si appoggia a DAO.

    P.S. DAO è una Libreria di Oggetti, per l'accesso ai Dati.
  • Re: 3075 errore di sintassi operatore mancante in query

    Grazie per le bacchettate siete sempre motivo di sprono incentivante.... cmq coi i DAO intendevo la libreria che ha evidenziato giustamente Alex... nel senso che apro il mio recordset sulla tabella importata (TblKm) e scorro fino all'lutimo record... per ogni record vado a scrivere nella tabella esistente i dati che mi servono ....ciclando opportunamente il tutto...è solo complicato spiegarlo a parole...

    tornando all'istruzione SQL il problema che ho ipotizzato si trova nel "passargli" (scrivere la stringa) il campo di confronto (nel mio caso "Targa") all'interno della funzione di aggregazione Dlast che ovviamente non posso costruire fuori dalla stringa perchè ho bisogno che contenga per ogni record il valore di targa relativo...

    ho fatto innumerevoli tentativi sugli apici, le punteggiature, il nome dei campi... ma niente... non riesco a fargliela digerire tramite codice vba...

    nel frattempo, visto che la stringa sql l'ho copiata da una query esistente e funzionante, mi è venuto in mente di eseguire la query con una macro... il che (a mio avviso) non dovrebbe essere tanto diverso dallo scrivere il codice nella routine...mumble mumble...

    si accettano soluzioni diverse...

    il risultato deve essere l'accodamento in una tabella(TblFoglioUscita) di dati presi da una tabella importata(TblKm) e da una ricerca fatta sulla tabella stessa di accodamento (il Dlast per gli ultimi kmfinali che vanno a prendere il posto dei kminiziali)...

    ad maiora
  • Re: 3075 errore di sintassi operatore mancante in query

    La soluzione via macro non ti aiuta...forse non serve proprio.
    Non ho capito se vuoi imparare a tradurre in VBA la sintassi SQL, così è apparso dal primo post...e pertanto gli altri utenti stanno tentando di aiutarti. Altrimenti, se hai solo un problema da risolvere, io quando non mi raccapezzo, creo una query (anche se di solo comando) di sana pianta con tanto di nome proprio e la apro/eseguo.
    Escluderei la via DAO.Recordset.
  • Re: 3075 errore di sintassi operatore mancante in query

    OsvaldoLaviosa ha scritto:


    La soluzione via macro non ti aiuta...forse non serve proprio.
    Non ho capito se vuoi imparare a tradurre in VBA la sintassi SQL, così è apparso dal primo post...e pertanto gli altri utenti stanno tentando di aiutarti. Altrimenti, se hai solo un problema da risolvere, io quando non mi raccapezzo, creo una query (anche se di solo comando) di sana pianta con tanto di nome proprio e la apro/eseguo.
    Escluderei la via DAO.Recordset.
    osvaldo è quello che ho fatto... ho creato la query che fa quello che mi serve... ora da maschera stavo cercando di automatizzare questo processo...qui mi sono impantanato...

    per darVi l'idea... dalla home del db apro una maschera popup per l'aggiornamento dei dati di percorrenza... la maschera contiene una txtbox che compilo con un pulsante a fianco "Sfoglia" usando una finestra di dialogo msofiledialogpicker opportunamente sistemata e un campo data che controllo siano compilati prima di eseguire la query in questione con un altro pulsante "aggiorna".... è questa è la struttura... il problema sta nell'esecuzione della query di comando (accodamento) tramite codice... mi sa che finisco prima con
    Docmd.Openquery [nomemiaquery]
    e mi evito l'execute con i suoi impicci...
  • Re: 3075 errore di sintassi operatore mancante in query

    CicciusPrime ha scritto:


    mi sa che finisco prima con
    Docmd.Openquery [nomemiaquery] 
    e mi evito l'execute con i suoi impicci...
    Esattamente.
Devi accedere o registrarti per scrivere nel forum
15 risposte