SQL e Operatori logici con Stringhe

martedì 09 gennaio 2007 - 12.05

Dav-ide Profilo | Junior Member

Ciao a tutti... ho il seguente problema:
utilizzo VB2005 e database di access. Nel mio database alcune tabelle hanno la data memorizzata in formato string (non chiedetemi perchè era fatto così!!!) io avrei la necessità di fare ricerche tra date ma gli operatori logici non funzionano su questo tipo di campo.
Ho provato con:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma niente....
Lavoro con il dataset e non so se è possibile cambiare solo nel dataset il formato.... Non vorrei aggiungere una colonna nella tabella, ma aihmè, ad ora mi sembra l'unica strada fattibile!!!

Qualcuno ha qualche idea???
Grazie

amelix Profilo | Expert

Una domanda....
In che formato sono le stringhe delle date?
Andrea
http://amelix.blogspot.com/index.html

Dav-ide Profilo | Junior Member

gg/mm/aaaa.....
Intendi questo per formato???

amelix Profilo | Expert

>gg/mm/aaaa.....
>Intendi questo per formato???
Si.
Io userei la funzione DateSerial(anno, mese, giorno).
Con la funzione Mid separi i pezzi di data:
DateSerial(Mid(colData, 7, 4), Mid(colData, 4, 2), Mid(colData, 1, 2))
(controlla i numeri del mid)
Andrea
http://amelix.blogspot.com/index.html

Dav-ide Profilo | Junior Member

Ci avevo già pensato, ma il mio codice è il seguente e non so come implementare la tua idea nel dataset:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

amelix Profilo | Expert

>Ci avevo già pensato, ma il mio codice è il seguente e non so
>come implementare la tua idea nel dataset:
>
>
>PercorsoDB = "\\192.168.1.100\d\FTP\Davide\DBase.mdb"
> NomeTabella = "Tab_ATM900_1"
>Query = "SELECT * FROM " & NomeTabella & " WHERE Data Between #" & DaData & "# And #" & AData & "#"
Prova cosí:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Cosí c`é anche nel dataset
>
>sApp = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PercorsoDB
>& ";"
> conn.ConnectionString = sApp
> conn.Open()
>
>Dim da As New OleDb.OleDbDataAdapter(Query, conn)
> da.Fill(ds, NomeTabella)

Andrea
http://amelix.blogspot.com/index.html

Dav-ide Profilo | Junior Member

Ti posto pari pari la query copiata da debug perchè non funziona....

SELECT *, DateSerial(Mid(Data, 7, 4), Mid(Data, 4, 2), Mid(Data, 1, 2)) AS Data2 FROM(Tab_ATM900_1) WHERE DateSerial(Mid(Data, 7, 4), Mid(Data, 4, 2), Mid(Data, 1, 2)) Between #06/01/2007# And #08/01/2007#

...che palle!

Dav-ide Profilo | Junior Member

Penso di avere già capito: la data dev'essere formattata così "MM/dd/yyyy"....
A quanto pare funziona......

amelix Profilo | Expert

Ma perchè non la fai parametrica?
Qui trovi anche la soluzione ad un piccolo problemino:
http://amelix.blogspot.com/2006/12/gestione-datetime-con-oledb-data.html
Andrea
http://amelix.blogspot.com/index.html

Dav-ide Profilo | Junior Member

Parametrica???
Ti chiedo scusa ma in questo campo sono proprio alle prime armi!
Sono riuscito a far girare con la tua soluzione.... una cosa sola: se il campo data è vuoto mi torna errore....

amelix Profilo | Expert

Se non ricordo male access dovrebbe essere "sequenziale".
Cioè se la prima condizione di un AND è false non esegue le condizioni successive non vengono controllate (tanto il risultato è scontato!)
Nel caso degli OR se la prima è true... etc..

Quindi se, prima del controllo della data, fai il controllo di nullabilitá dovresti risolvere il problema.
Andrea
http://amelix.blogspot.com/index.html

Dav-ide Profilo | Junior Member

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