Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    74
    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:

    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"
    ma continuo ad ottenere "Errore di sintassi nell'espressione JOIN"


    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

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da karug64 Visualizza il messaggio
    Ok.
    Mi scuso anticipatamente per le continue domande, ma per me è una materia nuova e quindi mi trovo in difficolta'.
    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'.

    Quote Originariamente inviata da karug64 Visualizza il messaggio
    Ho modificato in questo modo:
    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"
    ma continuo ad ottenere "Errore di sintassi nell'espressione JOIN"
    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.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    74
    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':

    codice:
    Dim td As String
            td = datavi.Text.Substring(3, 2) + "/" + Microsoft.VisualBasic.Left(datavi.Text, 2) + "/" + Microsoft.VisualBasic.Right(datavi.Text, 4)
    ed ho ottenuto la data invertita che ho inserito nella sql cosi'

    codice:
    sql = sql + "     AND RG.RGdatad >= #" & td & "#"
    ma mi estrae record che non soddisfano la condizione:
    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

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Invece è corretto, dato che tu hai messo la condizione

    >=

    e il 01/10/2011 è maggiore del 29/07/2011

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    74
    Ciao.

    Ma se traduco la linea di codice :

    codice:
    sql = sql +"     AND RG.RGdatad >= #"& td &"#"
    con

    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.