Prima di tutto devi indicare i campi includendo il nome delle tabelle (o alias che usi), ovvero non RGcod, ma T1.RGcod, e così via...
Seconda cosa, con Access in un enunciato SQL devi sempre formattare le date nel formato americano: MM/DD/YYYY.
Prima di tutto devi indicare i campi includendo il nome delle tabelle (o alias che usi), ovvero non RGcod, ma T1.RGcod, e così via...
Seconda cosa, con Access in un enunciato SQL devi sempre formattare le date nel formato americano: MM/DD/YYYY.
Ok.
Mi scuso anticipatamente per le continue domande, ma per me è una materia nuova e quindi mi trovo in difficolta'.
Ho modificato in questo modo:
ma continuo ad ottenere "Errore di sintassi nell'espressione JOIN"codice:Dim td As Date = CDate(datavi.Text) td = Format(td, "dd/MM/yyyy") sql = "SELECT RG.RGcdg, Count(RG.RGcdg) AS Qta FROM RG As T1 INNER JOIN FI As t2 ON RG.RGcdg = FI.FIcdg where RG.RGimp >= " & limite & " and RG.RGcat <> 550 and RG.RGcat <> 399 and RG.RGdatad >= " & td & " GROUP BY RG.RGcdg"
Non è che per caso occorre che le tabelle siano indicizzate sul capo di join ?
Le mie, essendo temporanee (le cancello e le ricarico ad ogni elaborazione) non hanno campi chiave...
Grazie
Ultima modifica di karug64; 25-05-2014 a 13:22
Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET
I tuoi errori sono grossolani ed indicano una scarsa conoscenza delle basi del linguaggio SQL.
Te lo dico non per polemica o per accusarti, ma solo per farti prendere atto che prima di 'scrivere' bisogna 'studiare'.
Ovviamente, dato che stai usando gli alias nelle tabelle ma non nei nomi dei campi.
Comunque, facciamo così: dalla tua query togli As T1 e As t2 e dovrebbe funzionare (vedi sotto).
Un suggerimento: abituati a non scrivere l'enunciato SQL in una sola riga, ma suddividerlo su più righe, così:
codice:sql = "SELECT RG.RGcdg, Count(RG.RGcdg) AS Qta " sql = sql + " FROM RG INNER JOIN FI ON RG.RGcdg = FI.FIcdg " sql = sql + " WHERE RG.RGimp >= " + limite sql = sql + " AND RG.RGcat <> 550 " sql = sql + " AND RG.RGcat <> 399 " sql = sql + " AND RG.RGdatad >= " + td sql = sql + " GROUP BY RG.RGcdg "
Nota gli spazi aggiunti volutamente all'inizio ed alla fine di ogni riga.
Ne guadagnerai in leggibilità e di conseguenza in manutenzione.
Per finire, le interrogazioni ad una base dati si effettuano usando Command + Parametri che risolvono e prevengono un sacco di problemi (vedi esempi nella mia firma sia per NET che per VB6.0).
Ad esempio, se tu avessi usato un Command, il problema della formattazione della data non l'avresti avuto.![]()
Ok. Grazie infinite.
(Ho provveduto a registrarmi sul sito in firma ed a scaricare il progetto che studiero' con attenzione).
L'ultimo problema è dato dalla condizione sulla data....
ho fatto cosi':
ed ho ottenuto la data invertita che ho inserito nella sql cosi'codice:Dim td As String td = datavi.Text.Substring(3, 2) + "/" + Microsoft.VisualBasic.Left(datavi.Text, 2) + "/" + Microsoft.VisualBasic.Right(datavi.Text, 4)
ma mi estrae record che non soddisfano la condizione:codice:sql = sql + " AND RG.RGdatad >= #" & td & "#"
per esempio
RG.RGdatad = #7/29/2011# (ossia 29/07/2011)
td = #10/1/2011# (ossia 01/10/2011)
questa riga non dovrebbe essere estratta, ma viene estratta ugualmente ....
Grazie.
P.S. chiedo al moderatore se si puo' modificare il testo della discussione dall'attuale a
vb2010: contare i record di table2 su table1 e condizione su data
Grazie
Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET
Invece è corretto, dato che tu hai messo la condizione
>=
e il 01/10/2011 è maggiore del 29/07/2011
Ciao.
Ma se traduco la linea di codice :
concodice:sql = sql +" AND RG.RGdatad >= #"& td &"#"
RG.RGdatad = #7/29/2011# (ossia 29/07/2011)
td = #10/1/2011# (ossia 01/10/2011)
cosi':
e 29/07/2011 >= 01/10/2011
la condizione non dovrebbe essere rispettata e quindi non dovrebbe estrarre la riga, ed invece la trovo tra quelle estratte. ( o mi metto davanti al pc troppo tardi ....)
Ciao.
Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET