Errore di sintassi in una query

di il
8 risposte

Errore di sintassi in una query

Prima di tutto mi presento,sono un non giovane amante di VB6,ma come autodidatta poco esperto.

Ho questo errore che non riesco a risolvere,indico il mio codice :

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim database As String
'CorpoMessaggio = Text2.Text
database = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
database = database & App.Path & "\" & "ospiti.mdb"

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

cn.Open database

rs.Open "Select * from ANAGRAFICA where CHECKIN > # '" & DTPicker1 & "' And CHECKOUT < # '" & DTPicker2 & "'", cn, 3, 3

MI da errore di sintassi (operatore mancante) nell'espressione della query.

8 Risposte

  • Re: Errore di sintassi in una query

    Devi racchiudere le date tra # e #
    Tu invece usi solo # all'inizio non alla fine
    Inoltre non ci devono essere spazi né virgolette semplici.

    E il formato deve essere mm/dd/yyyy

    Ovvero

    #08/05/2021#
  • Re: Errore di sintassi in una query

    Ti ringrazio molto,con il tuo aiuto ho risolto un problema che mi aveva inchiodato per un po di tempo.
    Riscrivo le linee di programma corrette, potrebbero essere utili ad altri:
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    pathmdb = "C:\Users\Agenzia\Desktop\ARCHIVIO VB\prova\ospiti.mdb"


    cn.CursorLocation = adUseClient
    cn.Open "data Provider=Microsoft.Jet.OLEDB.4.0;Provider=MSDataShape.1;" & _
    "Data Source=" & pathmdb


    Selezione = "Select * from ANAGRAFICA where CHECKIN >#" & DTPicker1 & "# And CHECKOUT < # " & DTPicker2 & "#"
    rs.Open "" & Selezione & "", cn, adOpenStatic, adLockOptimistic
    Set DataGrid1.DataSource = rs
  • Re: Errore di sintassi in una query

    gaerix ha scritto:


    ...
    rs.Open "" & Selezione & "", cn, adOpenStatic, adLockOptimistic
    ...
    Questa riga non è precisa. La concatenazione non ha senso... È sufficiente:
    rs.Open Selezione, cn, adOpenStatic, adLockOptimistic
    P.S: usa i tag CODE per il codice, come da regolamento.
  • Re: Errore di sintassi in una query

    Il programma non funziona,come avevi anticipato mi vede le date nel formato mm/dd/yyyy ;nei due DTPicker e nel db access 97
    sono nel formato dd/mm/yyyy.Ho letto molti post ma,sicuramente per mia colpa,non sono riuscito a risolvere.
    P.S. Come faccio ad usare i CODE per il codice
  • Re: Errore di sintassi in una query

    Un' opzione é usare la funzione Format per ottenere la in formato stringa per come ti serve.
  • Re: Errore di sintassi in una query

    Ho tentato con Format,in varie maniere ,ma niente da fare. Leggendo su internet,hocapito che access memorizza le date nel formato "mm/dd/yyyy",e poichè le date si devono confrontare con lo stesso formato,ho pensato di assegnare ai DTPicker lo stesso formato.Il risultato è che il prpgramma vede i giorni da 13 a 31 come sono,mentre i giorni da 1 a 12 come mesi (giustamente!!!!).Ho tentato anche di non assegnare alcun formato ai DTPicker,ma tutto è uguale.Allego il mio codice per un aiuto.
    
    Private Sub Command4_Click()
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    Set rs1 = New ADODB.Recordset
    
    DTPicker1.CustomFormat = "mm/dd/yyyy"
    DTPicker2.CustomFormat = "mm/dd/yyyy"
    
    'Connessione
    '---------------------
    cn.CursorLocation = adUseClient
    cn.Open "data Provider=Microsoft.Jet.OLEDB.4.0;Provider=MSDataShape.1;" & _
                "Data Source=" & App.Path & "\" & "ospiti.mdb"
    
    'definizione del Recordset
    '---------------------
    Selezione = "Select * from ANAGRAFICA where CHECKIN  >#" & DTPicker1 & "# And CHECKOUT < # " & DTPicker2 & "#"
    rs.Open Selezione, cn, adOpenStatic, adLockOptimistic
    Set DataGrid1.DataSource = rs
    End Sub
    
  • Re: Errore di sintassi in una query

    gaerix ha scritto:


    ...Leggendo su internet,hocapito che access memorizza le date nel formato "mm/dd/yyyy"...
    No, access memorizza le date come fossero dei numeri...

    Il CustomFormat del controllo, non c'entra nulla con il valore dello stesso. Tu, per creare la query, utilizzi il valore del controllo, quindi devi formattare quello.
    Selezione = "Select * from ANAGRAFICA where CHECKIN  >#" & Format(DTPicker1,  "mm/dd/yyyy") & "# And CHECKOUT < # " & Format(DTPicker2,  "mm/dd/yyyy")& "#"
  • Re: Errore di sintassi in una query

    Grazie al tuo aiuto sono riuscito a risolvere,allego il codice sperando possa essere utile ad altri
    
    Private Sub Command4_Click()
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    
    
    'Connessione
    '---------------------
    cn.CursorLocation = adUseClient
    cn.Open "data Provider=Microsoft.Jet.OLEDB.4.0;Provider=MSDataShape.1;" & _
                "Data Source=" & App.Path & "\" & "ospiti.mdb"
    
    'definizione del Recordset
    '---------------------
    
    ' selezione degli ospiti totali nel periodo
    
    Selezione = "Select * from ANAGRAFICA where CHECKIN  >=  #" & Format$(DTPicker1, "mm/dd/yyyy") & "# And  CHECKOUT <=  #" & Format$(DTPicker2, "mm/dd/yyyy") & "#"
    rs.Open Selezione, cn, adOpenStatic, adLockOptimistic
    'Set DataGrid1.DataSource = rs
    
    rs.MoveLast
    NUM = rs.RecordCount
    Text2.Text = NUM
    
    End sub
    
    
    
    Grazie ancora

    P.S. vorrei inserire "risolto" nel titolo ma non so come fare
Devi accedere o registrarti per scrivere nel forum
8 risposte