Openrecordset con annidato criterio di unione campi

di il
4 risposte

Openrecordset con annidato criterio di unione campi

Sto cercando di utilizzare l'istruzione openrecordset annidando all'interno della condizione where un'istruzione di unione di due campi. Sul risultato di questa unione dovrei porre un criterio di selezione.

L'istruzione che ho strutturato è la seguente:
Set rstcaricascarica = CurrentDb.OpenRecordset("SELECT * FROM storico_files WHERE((((storico_files.dataricarico) & " & "(storico_files.oraricarico)<=now())) AND ((storico_files.consegnato)=False))")
dove:
  • rstcaricascarica è una variabile di tipo recordset
    storico_files.dataricarico è un campo di tipo data/ora
    storico_files.oraricarico è un campo di tipo data/ora
    storico_files.consegnato è un campo Vero/Falso
L'istruzione non genera errori di sintassi ma non funziona in quanto non seleziona i record che rispondono al mio criterio di ricerca.

Qualcuno avrebbe qualche suggerimento da darmi?
Grazie a tutti
Antonio

4 Risposte

  • Re: Openrecordset con annidato criterio di unione campi

    Perchè non hai spiegato quale erano i CRITERI...?
    Quello che hai scritto è chiaramente sbagliato quindi dovresti spiegarci il metodo che vuoi usare...!

    Mi riferisco a questo pezzo:
    
     WHERE((((storico_files.dataricarico) & " & "(storico_files.oraricarico)<=now()))
    A prescindere dalla concatenazione inutile... nel tuo campo DataCarico non hai già anche OrarioCarico...? Perchè hai 2 Campi invece di uno solo...?
    Nel caso siano 2 campi, uno con la Data ed uno conl'orario(da capire...) i confronti sono 2:
    
     WHERE storico_files.dataricarico=Date() AND storico_files.oraricarico<=Format(now(),"hh:mm:ss")
    Attenzione che Now() ogni secondo varia, sarà mai possibile tu sia così svelto a registrare una transazione in Tempo=0...?

    Insomma c'è qualche cosa che non torna...
  • Re: Openrecordset con annidato criterio di unione campi

    Si scusate cerco di essere più chiaro.
    Ho una routine che deve processare i dati contenuti in un file.
    Questa routine deve essere attivata quando la data di sistema supera la data e l'ora di ricarico.
    Data e ora di ricarico sono stati tenuti distinti poichè campi calcolati in base a determinati criteri.
    Applicando la soluzione proposta da Alex si scoprirebbe che non funzionerebbe poichè contiene un errore logico.
    Esempio.
    Data di ricarico 1/1/2015
    Ora di ricarico 16.00

    Se la routine partisse ad esempio il 2/1/2015 alle ore 9.00 il file non verrebbe, erroneamente, processato poichè l'AND logico di data e ora restituirebbe un falso (infatti le ore 16 sono superiori alle ore 9) mentre il file andrebbe processato poichè sono le 9.00 del 2/1/2015.
    Ecco quindi che si rende necessario caricare un recordset concatendando i campi dataricarico e oraricarico e successivamente applicando il criterio di selezione che é: dataricaco&oraricarico < Now().

    Del resto se si prova a generare il codice sql sfruttando il costruttore di query si vedrà che per questa operazione lui crea un campo calcolato sfruttando l'operazione di concatenzazione e successivamente si applica il criterio su questo campo calcolato....e tutto funziona.
    Credo quindi ci sia solo un errore di sintassi nel mio codice e non un errore logico.
    Suggerimenti?
    Grazie
    Saluti
  • Re: Openrecordset con annidato criterio di unione campi

    Forse non sono stato chiaro, visto che non ti ho dato una soluzione ma solo sollevato un dubbio sulla tua ipotesi.

    Cerco di spiegarmi meglio io in modo semplice.
    Il Campo Data di suo può contenere sia la Data che l'Ora... quindi se tu li tieni divisi sei costretto a fare i giochetti per ottenere quello che serve..., per giochetti intendo Concatenare 2 Campi quando con 1 solo facevi... e questo non serve affatto... e non è vero che il QBE li concatena... se il campo è unico non concatena nulla.

    In tutti i casi, non puoi pensare di usare NOW() come confronto avrai sempre un FALSE, e questo ho già cercato di spiegarterlo ma non hai minimamente colto...!!!

    Rifletti meglio sul problema secondo me stai facendo confusione.
  • Re: Openrecordset con annidato criterio di unione campi

    Risolto.
    Funziona perfettamente.
    Lascio il codice qui di seguito.

    Set rstcaricascarica = CurrentDb.OpenRecordset("SELECT * FROM storico_files WHERE((((storico_files.dataricarico)&(storico_files.oraricarico)<=now())) AND ((storico_files.consegnato)=False))")

    Da un punto di vista teorico si tratta di applicare un criterio a un campo calcolato.
Devi accedere o registrarti per scrivere nel forum
4 risposte