[MySQL] problema query con date su server

visualrenzo

Nuovo Utente
1 Feb 2019
6
0
1
Buongiorno, ho scritto un programma in VB.net.


Vado su una tabella su server e leggo i dati ogni 15 secondi.

Creo un Datagrid aggiornato e vorrei filtrarlo per data di scrittura.

Ho il problema che non riesco a scrivere la giusta stringa SQL perchè mi da errore sulle date.


Premesso che per fare le prove in locale ho un tipo di connessione e per quando sono collegato al server ne ho un’ altra gestita così:


PHP:
  If IniLocale = True Then

            IniServer_Locale = My.Computer.FileSystem.CurrentDirectory


‘<!-- <Connessione DB Locale solo per prove "/> -->
   ‘ <add key="IniProvider_Locale" value= "Microsoft.ACE.OLEDB.12.0"/>

            'monto la stringa corretta con dato letto dall' ini
            ProviderVar = "Provider=" & IniProvider_Locale & ";"
            ServerVar = "Data Source=" & IniServer_Locale & ""
            DatabaseVar = IniDatabase_Locale & ";"

 
            dataFileVar = ServerVar & DatabaseVar

        Else
           
‘<add key="IniProvider_Missione" value= "Nome MIO SERVER"/>’
            'monto la stringa corretta con dato letto dall' ini
            ProviderVar = "Provider=" & IniProvider & ";"
            ServerVar = "Server=" & IniServer & ";"
            DatabaseVar = "Database=" & IniDatabase & ";"

            UidVar = "Uid=" & IniUid & ";"      
            PwdVar = "Pwd=" & IniPwd        

            dataFileVar = ServerVar & DatabaseVar & UidVar & PwdVar

        End If
connString = ProviderVar & dataFileVar



Premesso anche che i dati relativi alla data scrittura (campo che vorrei interrogare per la data) che devo leggere nella tabella vengono inseriti nel seguente modo a seconda se sia locale o server

PHP:
Dim Adesso As DateTime = Now

         If IniLocale = True Then
    cmdCommand.Parameters.Add(New OleDbParameter("@HHH", OleDbType.Date)).Value = Adesso '21 gennaio 2019
           Else
cmdCommand.Parameters.Add(New OleDbParameter("@HHH", OleDbType.DBTimeStamp)).Value = Adesso '21 gennaio 2019

      End If

Sul server è settato come campo data/ore e per non avere errore in scrittura (inversione mese con girno) devo scriverlo con questo formato OleDbType.DBTimeStamp rispetto al db locale access che basta un OleDbType.Date


Questo parte fondamentale del mio codice

PHP:
        Dim DataInizio As DateTime = Now
        Dim DataFine As DateTime = Date.Now.AddDays(-1)
         

 strSQL = "SELECT * FROM  " & Tbl_Missione & " WHERE [Data_Scrittura] BETWEEN #" & (DataInizio) & "# AND #" & (DataFine) & "# ORDER BY ID DESC" '
    Dim cmd As OleDbCommand = New OleDbCommand(strSQL, MyConnessione)
   Try
                RsCodice = cmd.ExecuteReader

                While RsCodice.Read '31 gennaio 2019

                    ID_Letto = Trim(RsCodice("ID ").ToString)
  End While

                ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Catch ex As Exception
                FileClose(1)
                FileOpen(1, "LOG Errori" & ".txt", OpenMode.Append, , , )    'Open "ParametriTest.ini" For Input As 1
                PrintLine(1, ex.Message & " Non riesco a leggere la tabella  " & Tbl_Missione & " " & Now)
                FileClose(1)

            End Try

            RsCodice = Nothing ' scarico il record set ''


            MyConnessione.Close()
Per il DB locale funziona correttamente mentre sul server non mi funziona e mi va nell’ eccezione gestita con Catch.

Praticamente mi da errore come se arriva a leggere la data e poi trova il punto delle ore e mi butta fuori.

In locale mi funziona anche questa versione :

PHP:
strSQL_Missione = "SELECT * FROM  " & IniTbl_Missione & " WHERE [Missione_Data_Scrittura] <= # " & DataInizio.Date & "#  ORDER BY ID_Missione DESC" ' remmato il 29 gennaio 2019 vogliono anche lo stato 20
Adesso non ho qui a portata di mano l’ esatto errore ma ho provato in mille modi. Questo mostrato sopra è uno degli ultimi che mi sembra il più logico.
 
Ultima modifica di un moderatore:

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
non ho mysql ma sql server e visto che non hai pubblicato l'errore, ti posto una query simile alla tua,

upload_2019-2-2_13-53-44.png


considera,

l'uso degli apici invece del cancelletto
usando il cancelletto mi segnala un errore nella posizione "00:"

il formato della data "yyyy-mm-dd",
passando la data in formato "dd/mm/yyyy" ricevo un errore di conversione da stringa a data
 

visualrenzo

Nuovo Utente
1 Feb 2019
6
0
1
Grazie

provo a mettere gli apici, ma io ho una variabile nonuna data fissa come messa da te.

PHP:
 Dim DataInizio As DateTime = Now
        Dim DataFine As DateTime = Date.Now.AddDays(-1)
e poi dovrei invertire il senso?
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.280
330
83
@visualrenzo
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
o il tag
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

visualrenzo

Nuovo Utente
1 Feb 2019
6
0
1
ma io avevo incollato il codice dentro la finestrella?!?! come hai fatto vedere tu, starò più attento
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
il formato di scrittura é identico,
BETWEEN '" & DataInizio & "' AND
ovvero apice-virgolette-congiunzione-variabile (magari senza parentesi) -congiunzione-virgolette-apice
per tutti i valori non numeri