Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    10

    codice errore data access

    vi chiedo un aiuto se potete. In una maschera (maschera1) ho inserito una tabella come sottomaschera (SMQuery1). Con i campi prodotto, fornitori, ubicazione e scadenza. Nella maschera ho legato una casella di testo per ricerca veloce dei prodotti con lettere e funziona tutto. Poi ho aggiunto due caselle di testo per ircercadata (ordinedatada) e (ordinedataa) con un pulsante per la ricerca degli intervalli tra date e uno per il clear dei record. Quando eseguo la ricerca mi da errore 2491, azione e metodo non valido la maschera o il report no è associato a tabella o query.
    Il codice da me inserito è quello sotto e il debug mi indica la riga DoCmd.ApplyFilter task
    Mi dareste una mano ? Sareste gentili. Grazie
    Silvio


    Private Sub Comando34_Click()
    ' Search button
    Call Search
    End Sub

    Sub Search()
    Dim strCriteria, task As String

    Me.Refresh
    If IsNull(Me.ordinedatada) Or IsNull(Me.ordinedataa) Then
    MsgBox "Please enter the date range", vbInformation, "Date Range Required"
    Me.ordinedatada.SetFocus

    Else
    strCriteria = "([SCADENZA] >= #" & Me.ordineddatada & "# And [order date] <= #" & Me.ordinedataa & "#)"
    task = "select * from tblAllTransaction where (" & strCriteria & ") order by [SCADENZA]"
    DoCmd.ApplyFilter task

    End If

    End Sub

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,295
    ci sono diversi problemini da mettere a posto ......

    1°)
    Sub Search()
    perche non scrivi Private Sub Search() ??? come la hai scritta te è pubblica quindi impegna piu risorse

    2°)
    Dim strCriteria, task As String
    scritta cosi strCriteria è un Variant mentre invece ti basta una String
    lo devi scrivere cosi:
    Dim strCriteria As String, task As String
    oppure cosi:
    Dim strCriteria As String
    Dim task As String


    3°)
    a cosa ti serve il Me.Refresh ???

    4°)
    If IsNull(Me.ordinedatada) Or IsNull(Me.ordinedataa) Then
    Tu verifichi che non sia nullo, ma se la data è incongrua per esempio 41/08/2018 ??
    consiglio di usare If Not IsDate .......
    poi puoi dirigere il focus direttamente al controllo incriminato evitando di andare genericamente al "Da"

    5°) questo è il vero problema
    a cosa ti serve task = "select * from tblAllTransaction where (" & strCriteria & ") order by [SCADENZA]"
    se devi applicare il filtro ti basta solamente la parte "WHERE" quindi strCriteria

    6°)
    DoCmd.ApplyFilter task
    non devi usare ApplyFilter,
    poi il filtro lo devi applicare alla sottomaschera, perche i tuoi dati sono lì, giusto ??
    Tu non hai fatto riferimento alla sottomaschera ......


    alla fine io lo farei cosi:
    codice:
    Private Sub Comando34_Click()
        'Stop
        Call Search
    End Sub
    
    
    Private Sub Search()
    Dim strCriteria As String
    Dim dtmDa As Date
    Dim dtmAa As Date
    
    
    If Not IsDate(Me.ordinedatada.Value) Then
        Me.ordinedatada.SetFocus
        MsgBox "Please enter the date range 'Dal' ", vbInformation, "Date Range Required"
        Exit Sub    ' questo interrompe il codice
    End If
    
    
    If Not IsDate(Me.ordinedataa.Value) Then
        Me.ordinedataa.SetFocus
        MsgBox "Please enter the date range 'Al' ", vbInformation, "Date Range Required"
        Exit Sub
    End If
    
    
    dtmDa = Format(Me.ordinedatada.Value, "mm/dd/yyyy")  ' questo è fondamentale,  diversamente ti prende il 2/10 per 10/2  (2 Ottobre per 10 Febbraio)
    dtmAa = Format(Me.ordinedataa.Value, "mm/dd/yyyy")
    
    
        strCriteria = "([SCADENZA] >= #" & dtmDa & "# And [order date] <= #" & dtmAa & "#)"
        Me!SMQuery1.Form.Filter = strCriteria  ' Attento,  SMQuery1 è il nome della sottomaschera dato all'interno della Maschera
        Me!SMQuery1.Form.FilterOn = True
    
    
    End Sub

    .
    Ultima modifica di nman; 07-04-2019 a 17:54

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    10
    Innanzitutto grazie per avermi dedicato un pò del tuo tempo. grazie veramente.
    Ho fatto tutto..Ora però quando inserisco i campi nella casella data (che ho messo in formato data in cifra per farmi venire fuori il calendario) ed eseguo con il pulsante cerca mi si apre un popup il quale mi dice di immettere calori parametri con specificato order date
    Che scatole
    Aiutoo
    Quote Originariamente inviata da nman Visualizza il messaggio
    ci sono diversi problemini da mettere a posto ......

    1°)
    Sub Search()
    perche non scrivi Private Sub Search() ??? come la hai scritta te è pubblica quindi impegna piu risorse

    2°)
    Dim strCriteria, task As String
    scritta cosi strCriteria è un Variant mentre invece ti basta una String
    lo devi scrivere cosi:
    Dim strCriteria As String, task As String
    oppure cosi:
    Dim strCriteria As String
    Dim task As String


    3°)
    a cosa ti serve il Me.Refresh ???

    4°)
    If IsNull(Me.ordinedatada) Or IsNull(Me.ordinedataa) Then
    Tu verifichi che non sia nullo, ma se la data è incongrua per esempio 41/08/2018 ??
    consiglio di usare If Not IsDate .......
    poi puoi dirigere il focus direttamente al controllo incriminato evitando di andare genericamente al "Da"

    5°) questo è il vero problema
    a cosa ti serve task = "select * from tblAllTransaction where (" & strCriteria & ") order by [SCADENZA]"
    se devi applicare il filtro ti basta solamente la parte "WHERE" quindi strCriteria

    6°)
    DoCmd.ApplyFilter task
    non devi usare ApplyFilter,
    poi il filtro lo devi applicare alla sottomaschera, perche i tuoi dati sono lì, giusto ??
    Tu non hai fatto riferimento alla sottomaschera ......


    alla fine io lo farei cosi:
    codice:
    Private Sub Comando34_Click()
        'Stop
        Call Search
    End Sub
    
    
    Private Sub Search()
    Dim strCriteria As String
    Dim dtmDa As Date
    Dim dtmAa As Date
    
    
    If Not IsDate(Me.ordinedatada.Value) Then
        Me.ordinedatada.SetFocus
        MsgBox "Please enter the date range 'Dal' ", vbInformation, "Date Range Required"
        Exit Sub    ' questo interrompe il codice
    End If
    
    
    If Not IsDate(Me.ordinedataa.Value) Then
        Me.ordinedataa.SetFocus
        MsgBox "Please enter the date range 'Al' ", vbInformation, "Date Range Required"
        Exit Sub
    End If
    
    
    dtmDa = Format(Me.ordinedatada.Value, "mm/dd/yyyy")  ' questo è fondamentale,  diversamente ti prende il 2/10 per 10/2  (2 Ottobre per 10 Febbraio)
    dtmAa = Format(Me.ordinedataa.Value, "mm/dd/yyyy")
    
    
        strCriteria = "([SCADENZA] >= #" & dtmDa & "# And [order date] <= #" & dtmAa & "#)"
        Me!SMQuery1.Form.Filter = strCriteria  ' Attento,  SMQuery1 è il nome della sottomaschera dato all'interno della Maschera
        Me!SMQuery1.Form.FilterOn = True
    
    
    End Sub

    .

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,295
    Quote Originariamente inviata da silvio75 Visualizza il messaggio
    ........ il quale mi dice di immettere calori parametri con specificato order date ........
    Vediamo se ho capito bene:

    Hai una maschera principale con dentro
    - 2 caselle di testo in formato data ( ordinedatada e ordinedataa )
    - 1 pulsante di comando ( Comando34 )
    - 1 sottomaschera ( SMQuery1 )

    La sottomaschera prende i dati da una query ( Chiamiamola Q01 ))
    tu vuoi filtrare la query ( Q01 )in funzione delle 2 date che scrivi nella maschera principale ( ordinedatada e ordinedataa )

    Fino a qui è tutto esatto ????

    Poi ti chiede di specificare [order date] che è un campo della tabella
    io direi che il problema sta nella query Q01
    - prova ad aprirla direttamente dalla finestra del database
    - verifica che il nome del campo sia scritto correttamente e racchiuso fra parentesi quadre [xxxx xxxx]

    Facci sapere

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    10
    FANTASTICO HA FUNZIONATO. Per� adesso....... Cercavo di inserire altri due comandi..
    IL primo era un clear della data (che potrei farne anche a meno e ho fatto questo:
    Private Sub Comando15_Click()
    Me.ordinedatada = Null
    Me.ordinedataa = ""
    Task = "select" from tbAlltransaction where id is Null"
    DoCmd.ApplyFilter Task

    End Sub
    ed ho un errore di sintassi sulla linea di task...

    Poi ho inserito un pulsante per rivedere tutti i record

    Private Sub Comando16_Click()
    Dim Task As String

    Me.ordinedatada = Null
    Me.ordinedataa = ""
    Task = "select from tbAlltransaction ORDER BY [SCADENZA]"
    Me.RecordSource = Task
    End Sub
    qui mi da un errore di runtime 3141 dove l'istruzione select contiene una parola riservata o scritta in modo errato.




    Sono un rompiscatole?
    Spero di no..ma son sicuro di si
    Grazie ancora
    Silvio

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,295
    Quote Originariamente inviata da silvio75 Visualizza il messaggio
    FANTASTICO HA FUNZIONATO .........
    ma allora consiglio di seguire quella pista per le variazioni

    Quote Originariamente inviata da silvio75 Visualizza il messaggio
    ....... IL primo era un clear della data .........
    poi mi sembra che vuoi anche non vedere nessun record,

    Task = "select" from tbAlltransaction where id is Null"

    ...... quel doppioApice dopo il select è sbagliatissimo

    Imposti una strcriteria impossibile "1 = 0"
    codice:
    Private Sub Comando15_Click()
    Dim strcriteria As String
    
        Me.ordinedatada.Value = vbNullString
        Me.ordinedataa.Value = vbNullString
    
    strcriteria = "1 = 0"
        Me!SMQuery1.Form.Filter = strcriteria
        Me!SMQuery1.Form.FilterOn = True
    
    End Sub


    Quote Originariamente inviata da silvio75 Visualizza il messaggio
    ....... Poi ho inserito un pulsante per rivedere tutti i record .........
    Task = "select from tbAlltransaction ORDER BY [SCADENZA]"
    Dopo il select devi mettere il nome dei campi !!!!!!! ...... ad ogni modo il task non ti serve

    Imposti una strcriteria sempre vera "1 = 1"
    codice:
    Private Sub Comando16_Click()
    Dim strcriteria As String
    
        Me.ordinedatada.Value = vbNullString
        Me.ordinedataa.Value = vbNullString
    
    strcriteria = "1 = 1"
        Me!SMQuery1.Form.Filter = strcriteria
        Me!SMQuery1.Form.FilterOn = True
        
        Me!SMQuery1.Form.OrderBy = "SCADENZA"
        Me!SMQuery1.Form.OrderByOn = True
    
    End Sub
    Ultima modifica di nman; 08-04-2019 a 23:29

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    10
    Che dirti.. un Grazie è dir poco!
    Funziona tutto. Adesso mi dedico un pò alla grafica.
    Buona serata

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2019
    Messaggi
    10
    A rieccomi.........nman se vuoi rispondermi ti ringrazio ma se sono troppo pesante salutami e ti ringrazio lo stesso.
    Ti spiego ho creato una maschera con il tuo aiuto dove ho una serie di prodotti per i quali controllo e scadenze. In questa maschera ho inserito anche una casella di testo con ricerca tramite lettere. Partivo innanzitutto cosi'

    Option Compare Database

    Public myString As String 'destinata al filtro
    Public Function myquery() query fatta su tabella prodotti di magazzino
    myquery = "*" & myString & "*"

    End Function

    Option Compare Database
    Public myStringa As String 'destinata al filtro
    Public Function myqueryf() query fatta su tabella farmaci e inserita come sottomaschera
    myqueryf() = "*" & myStringa & "*"

    End Function

    La prima parte è della ricerca precedente dell'altra maschera, la seconda della nuova.

    Ora sia facendole una in fila all'altra o facendo un altro modulo mi dice che lo spazio nello stack è esaurito ed in più non vedo i datti della sottomaschera.

    Vorrei farle speculari
    Grazie

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 © 2019 vBulletin Solutions, Inc. All rights reserved.