Sql

giovedì 15 luglio 2010 - 10.24
Tag Elenco Tags  Access (.mdb)  |  Office 2003

dbarbieri70 Profilo | Newbie

Buongiorno a tutti,
se eseguo la seguente query sql in Access 2003, ottengo sempre risultati corretti:

SELECT Macchina, stato, Count(stato) AS Conteggio
FROM Macchine
WHERE (stato="a" or stato="b") And (data+ora>=[Dal] And data+ora<=[Al])
GROUP BY Macchina, stato

Dal e AL sono parametri inseriti dall'utente.
Se invece eseguo questa, allora i risultati sono corretti solo per alcune date:

SELECT macchina, stato, Count(stato) AS Conteggio
FROM Macchine
WHERE (stato = 'a' or stato='b') And (data+ora>=#30/6/2010 13.45# and data+ora<=#30/6/2010 21.00#)
GROUP BY macchina, stato;

Con questa data dà gli stessi risultati della prima, con date successive non restituisce alcun record... Idee?
Grazie
Davide


dinoxet Profilo | Senior Member

prova a passarci il create e le insert della tabella macchine
così possiamo darti ... qualche idea.


DINOXET
__________________________________________
impossible is only a word

lbenaglia Profilo | Guru

>Se invece eseguo questa, allora i risultati sono corretti solo
>per alcune date:
>
>SELECT macchina, stato, Count(stato) AS Conteggio
>FROM Macchine
>WHERE (stato = 'a' or stato='b') And (data+ora>=#30/6/2010
>13.45# and data+ora<=#30/6/2010 21.00#)
>GROUP BY macchina, stato;
>
>Con questa data dà gli stessi risultati della prima, con date
>successive non restituisce alcun record... Idee?

Ciao Davide,

Le date espresse come literal seguono il formato English US #MM/DD/YYYY# mentre nel tuo esempio le hai specificare nel formato italiano.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dbarbieri70 Profilo | Newbie

Grazie Lorenzo,
in effetti il problema si pone solo quando il giorno del mese è inferiore a 12.
Purtroppo però io uso VBA per eseguire la query:

Set Rs = DB.OpenRecordset("SELECT macchina, stato, count(stato) AS Conteggio FROM Macchine
WHERE (stato = 'a' or stato='b') And data+ora>=#" & Inizio & "# And data+ora<=#" & Fine & "# GROUP BY macchina, stato")

Mentre in SQL il problema si risolve semplicemente dichiarando Dal e Al DateTime, in VBA non riesco a risolvere.
Ho ovviamente dichiarato Inizio e Fine come Date, ma non basta...
Grazie
Davide

lbenaglia Profilo | Guru

>Set Rs = DB.OpenRecordset("SELECT macchina, stato, count(stato)
>AS Conteggio FROM Macchine
>WHERE (stato = 'a' or stato='b') And data+ora>=#" & Inizio
>& "# And data+ora<=#" & Fine & "# GROUP BY macchina, stato")
>
>Mentre in SQL il problema si risolve semplicemente dichiarando
>Dal e Al DateTime, in VBA non riesco a risolvere.
>Ho ovviamente dichiarato Inizio e Fine come Date, ma non basta...

Si ma tu stai costruendo UNA STRINGA con il comando SQL, quindi devi formattare le tue variabili datetime come STRINGA nel formato #MM/DD/YYYY#.
Una soluzione decisamente più elegante ed efficiente consiste nel definire un oggetto querydef (una Quey) parametrico che accetti in input le due variabili datetime. In questo modo non devi preoccuparti del formato di data e ora.
Per un esempio fai riferimento a questo thread:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=6647

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dbarbieri70 Profilo | Newbie

Grazie,
ho adottato la strada più breve di inserire la formattazione format(dal, "mm/dd/yyyy hh:mm:ss")
ma poi ho un errore di conversione dati quando vado ad aggiornare il recordset coi valori ricavati dalla query.
In realtà mi capita solo per alcuni giorni e fasce orarie...
Consigli?
passo a query def + DAO ?
grazie,
Davide

lbenaglia Profilo | Guru

>ho adottato la strada più breve di inserire la formattazione
>format(dal, "mm/dd/yyyy hh:mm:ss")
>ma poi ho un errore di conversione dati quando vado ad aggiornare
>il recordset coi valori ricavati dalla query.
>In realtà mi capita solo per alcuni giorni e fasce orarie...
>Consigli?
Non credo che il problema sia legato al formato delle date, altrimenti avresti subito un errore in fase di SELECT.
Cosa intendi con "vado ad aggiornare il recordset coi valori ricavati dalla query"?

>passo a query def + DAO ?
Io lo farei a prescindere, anche se dubito che questo risolverà il problema in fase di UPDATE dato che probabilmente le cause sono altre.

>grazie,
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dbarbieri70 Profilo | Newbie

Ciao,
questa è la routine, con cui aggiorno la tabella risultato coi dati della select:

While Not Rs.EOF
RsStat.AddNew
RsStat!Dal = Rs!Dal
RsStat!Al = Rs!Al
RsStat.Update
Rs.MoveNext
Wend

l'errore si verifica qui:

RsStat!Dal = Rs!Dal

ma non al primo passaggio e solo per certi valori di data+ora. Idee?
Grazie
Davide

lbenaglia Profilo | Guru

>l'errore si verifica qui:
>
> RsStat!Dal = Rs!Dal
>
>ma non al primo passaggio e solo per certi valori di data+ora.

Quali valori di data e ora generano l'eccezione?
Prova a debuggare il codice...

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

dbarbieri70 Profilo | Newbie

Ciao,
l'errore si verifica quando Rs!Dal è uguale a 01/07/2010 16.32
mi sembra un valore come un altro...
grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5