Query pass through native di Access

di il
27 risposte

27 Risposte - Pagina 2

  • Re: Query pass through native di Access

    Si' ho gia' provato e da'  sempre lo stesso errore alla riga evidenziata, quindi prima di arrivare ai parametri delle date. Sembra non "riconoscere" myq.Parameters("intmacchina")   

  • Re: Query pass through native di Access

    Prova a salvare la Query, fai il Debug.Priunt della stringa SQL e salvi la query, poi invece di testare i parametri sulla Query Temporanea, la riferisci alla Query Salvata...

    	Dim myq	As DAO.QueryDef	' Questo spero ci sia non lo vedo da te...!
    	
    	Set myq = CurrentDb.CreateQueryDef("NomeDellaQuerySalvata")
    
        myq.Parameters("intmacchina") = Me.frmGMOPselezionemacchina.Value
        myq.Parameters("dateinizio") = Me.frmGMctrtxtdatainizioperiodo.Value
        myq.Parameters("datefine") = Me.frmGMctrtxtdatafineperiodo.Value
    
        myq.ReturnsRecords = True
        Set rst = myq.OpenRecordset
        rst.Close
        Set myq = Nothing
  • Re: Query pass through native di Access

    Ho creato una nuova query con la stringa SQL (AQueryProva), il risultato e' il seguente :

    PARAMETERS [intmacchina] Text ( 255 ), [dateinizio] DateTime, [datefine] DateTime;
    SELECT public.events.id, public.events.machine_id, public.events.order, to_char(public.events.start_time,'DD/MM/YYYY') AS datainizio, SUM(public.events.duration) AS durata, public.events.value, public.events.program
    FROM [public].events
    WHERE public.events.machine_id=[intmacchina] and public.events.start_time>=[dateinizio] and public.events.start_time<([datefine]+1)
    GROUP BY public.events.id, public.events.machine_id, public.events.value, to_char(public.events.start_time,'DD/MM/YYYY'), public.events.order, public.events.program
    ORDER BY public.events.id DESC;
    

    Se metto:

    Set myq = CurrentDb.CreateQueryDef("AQueryProva")

    Da' errore perche' la query esiste gia'...

  • Re: Query pass through native di Access

    Scusa ovviamente non devi crearla... basta accedere alla collection Querydefs... non serviva molta fantasia però...

    Set myq = CurrentDb.QueryDefs("NomeDellaQuerySalvata")
  • Re: Query pass through native di Access

    10/12/2024 - @Alex ha scritto:

    Scusa ovviamente non devi crearla... basta accedere alla collection Querydefs... non serviva molta fantasia però...

    Infatti avevo gia' provato ma dava l'errore seguente: "3024 Impossibile trovare il file "C:\User\...\public.mdb", sempre nello stesso punto, quando devo passare il primo parametro ("intmacchina").

  • Re: Query pass through native di Access

    Ma hai messo la StringConnection nella query che hai creato...? Altrimenti non è una PassTrought ma una Local...!!!!!!!!!!

    Dai queste cose anche fatte a mano sono basilari....

  • Re: Query pass through native di Access

    Ins

    11/12/2024 - @Alex ha scritto:

    Dai queste cose anche fatte a mano sono basilari....

    Sicuramente sono basilari per te che lo fai di mestiere, per me che sono "gnubbo" lo sono un po' meno... altrimenti non sarei qui a chiedere aiuto. 

    Comunque, creata la query PT con la stringa di connessione, si ritorna al punto di partenza con lo stesso errore nello stesso punto "Elemento non trovato in questa raccolta".

  • Re: Query pass through native di Access

    Se hai difficoltà inizia con una query semplice... e rispetta le sintassi... ho il sospetto dipenda dal nome della tabella con il PUNTO e Parole riservate, non si usano MAI caratteri speciali ne parole riservate e tu hai fatto tutto quello che non andava fatto..!

    Elenco le cose da evitare:

    1. PUNTO nei nomi
    2. Parole riservate
      1. PUBLIC
      2. EVENTS

    Ms ha pubblicato tutte le parole riservate da evitare.

    Prova questa query rendila PT, passa o valorizza il parametro e vedi se funziona.

    PARAMETERS Chiave as Long;
    SELECT machine_id, order, start_time, duration, program FROM [public.events] where machine_id=[Chiave]

    Se funziona... abbiamo trovato l'inghippo penso..

    Se non funziona cambia quel nome di tabella.

  • Re: Query pass through native di Access

    Buongiorno @Alex,

    premesso che il DB PostgreSQL non e' stato fatto da me ma acquistato da una softwarehouse ("a scatola chiusa..."), ho testato la tua soluzione ma l'errore e' sempre lo stesso.

    Di seguito posto il codice VBA del pulsante che dovrebbe eseguire la query (ho evidenziato la riga di errore del debug):

    Private Sub frmGMcmdesegui1_Click()
    On Error GoTo Err_frmGMcmdesegui1_Click
    
    Dim myq As DAO.QueryDef
    Dim rst As Recordset
    
    
        Set myq = CurrentDb.QueryDefs("ABQueryProva")
    
        myq.Parameters("chiave") = Me.frmGMOPselezionemacchina.Value
    
        myq.ReturnsRecords = True
        Set rst = myq.OpenRecordset
        rst.Close
        Set myq = Nothing
        
    Exit_frmGMcmdesegui1_Click:
        Exit Sub
    
    Err_frmGMcmdesegui1_Click:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_frmGMcmdesegui1_Click
        
    End Sub
    

    Siccome nel DB Postgre c'e' un'altra tabella che si chiama acquisitions e che contiene campi analoghi alla tabella events, ho fatto lo stesso test su quella tabella con la seguente query PT:

    PARAMETERS Chiave as Long;
    SELECT machine_id, order, program FROM [public.acquisitions] where machine_id=[Chiave]

    Ma da' lo stesso errore della query precedente nello stesso punto.

    Ho inoltre testato la query da te suggerita pero' senza il parametro (giusto per verificare se la stringa di connessione funzionava):

    SELECT machine_id, order, start_time, duration, program FROM [public.events] where machine_id='1'

    E' mi da' errore: ODBC: chiamata non riuscita. Errore di sintassi a o presso "order". Error  while executing the query (#1)

    Mentre se la stringa SQL la scrivo nel modo seguente viene eseguita correttamente:

    SELECT public.events.machine_id, public.events.order, public.events.program FROM public.events where public.events.machine_id='1'

    Quindi ipotizzo che public.events non possa essere il problema...

    Anche la query eseguita sull'altra tabella con la seguente stringa SQL funziona correttamente:

    SELECT public.acquisitions.machine_id, public.acquisitions.order, public.acquisitions.program FROM public.acquisitions where public.acquisitions.machine_id='1'

    Ma se metto il parametro da' sempre l'errore: "Elemento non trovato in questa raccolta"

  • Re: Query pass through native di Access

    Prova a leggere questo Post:

    https://www.postgresql.org/message-id/002b01c562e2$3bbfbe80$218b1dc3@zlatkovyfkpgz6

  • Re: Query pass through native di Access

    Avevo gia' letto quel post;  anche se non espone la stringa SQL della query, mi sembrava comunque molto simile al metodo che ho adottato io come soluzione funzionante.

    Mi sembra che faccia "un gran giro" per poi arrivare a modificare la stringa SQL e sostituire il nome delle variabili con il loro valore per poi inviarla al server. 

    O mi sbaglio?

  • Re: Query pass through native di Access

    12/12/2024 - Mailman ha scritto:

    Avevo gia' letto quel post;  anche se non espone la stringa SQL della query, mi sembrava comunque molto simile al metodo che ho adottato io come soluzione funzionante.

    Mi sembra che faccia "un gran giro" per poi arrivare a modificare la stringa SQL e sostituire il nome delle variabili con il loro valore per poi inviarla al server. 

    O mi sbaglio?

    Ma hai letto l'articolo...?
    Dice esattamente che da VBA non riesce a passare i Parametri ad Database, sicchè è stato costretto a scrivere quel codice per ricreare lo STATEMENT SQL che verrà eseguito ServerSide.

    L'autore in questo caso credo sfrutti Parameters Unnamed... ma dovrei fare prove e non ho il Server.

    Ho il sospetto tuttavia, che ci sia un costrutto SQL non conforme, tuttavia nell'impossibilità di provare di persona mi fermo, l'ultima cosa che mi viene in mente da provare è usare la sintassi di "Named parameters" ovvero inserire [@] come pare indicato nella documentazione di PostGre... per la connessione con ODBC

    Parameters [@IdValue] As Long;	' Non so se usando i [@] sotto il server già li identifica come Parameter quindi questa riga può essere omessa
    SELECT * FROM Tabella
    WHERE CampoId = @IdValue

    Questo LINK spiega come, in base all'oggetto usato per la connessione l'uso dei Parametri va adeguato:

    https://help.grapecity.com/activereports/webhelp/AR13/webframe.html#Parameters.html

  • Re: Query pass through native di Access

    Ci studio un po' sopra e provo a fare qualche test per vedere se ne vengo a capo. Intanto grazie per l'aiuto

Devi accedere o registrarti per scrivere nel forum
27 risposte