Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65

    VBA/ACCESS Azzeramento Tab_2,query parametrica su Tab_1,inserimento dati in Tab_2

    Ciao a tutti,
    Vi prego di non prendermi per matto, però ho bisogno di capire se con Access si riesce ad impostare una serie di 3 operazioni con lo stesso comando.

    Ho un Db Access 2k con Tabella_1 e Tabella_2 con lo stesso tipo di dati. I dati inseriti tramite maschere sono inseriti in Tabella_1.

    Tramite una maschera di ricerca con 30 parametri dovrei eseguire le seguenti operazioni:
    1)
    libero la Tabella_2 dai dati preesistenti
    2)
    eseguito una query parametrica con 30 variabili sulla Tabella_1 (ho già la funzione che costruisce i parametri della sql)
    3)
    Inserisco il recordset ottenuto dall'operazione 2 in Tabella_2


    E' possibile fare un'operazione del genere in VBA con un unico comando?
    C'è una traccia di codice che io possa seguire?


    grazie a tutti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    potresti creare una query di accodamento dati con fonte la tab 1 e destinazione tab2.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    Sto facendo la query che mi hai suggerito.
    Ora però ho ancora 2 problemi:
    1)
    Svuotare la Tabella_2 dai dati accomodati da precedenti esecuzioni con diversi parametri della query di accomodamento

    2)
    La maschera di ricerca apre dei report (con origine record basati su query statiche) passando i parametri di ricerca costruiti con una funzione con il seguente comando:

    DoCmd.OpenReport stDocName, acPreview, , strSQL

    dove
    stDocName="Nome del report"
    strSQL = Parametri passati alla query statica

    Al posto di aprire i report, il pulsante di ricerca vorrei che eseguisse la query di accomodamento(previo svuotamento della Tabella_2). Però per le query, dovrei usare un comando tipo questo:

    DoCmd.OpenQuery("RICERCA", , acEdit)

    Come faccio a passare alla query di accomodamento i parametri di ricerca?

    grazie per la pazienza

    (PS: i parametri di ricerca non li inserisco direttamente nella query di access per via del problema dell'eventuale ricerca sui campi con valore Null; infatti la funzione Nz(*) l'ho straprovata ma ha sempre il problema di non caricare i valori Null dei campi vuoti. Per questo costruisco i parametri in VBA)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    Ho capito un po poco.
    Nella struttura della query di accodamento c'e' la possibilita' di inserire due criteri:
    1)Criteri e qui puoi inserire il tuo criterio di ricerca per quel campo
    2)Sotto trovi Oppure:qui scrivi Null cosi' il criterio vale anche se quel campo e 'null.

    In questo modo ,senza fare righe di codice ottieni la query di accodamento da una tab all'altra con i criteri di ricerca da te desiderati.

    Crei poi sulla form un bottone con autocomposizione e scegli l'istruzione esegui query
    Dammi risposta se ho capito bene

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    codice:
    Nella struttura della query di accodamento c'e' la possibilita' di inserire due criteri: 
    1)Criteri e qui puoi inserire il tuo criterio di ricerca per quel campo 
    2)Sotto trovi Oppure:qui scrivi Null cosi' il criterio vale anche se quel campo e 'null.
    Quello che dici tu vale per ogni singolo criterio se il criterio viene direttamente inserito nella query di accomodamento.
    Tuttavia è tragicamente noto che access (ho scritto anch'io un thread su questo argomento su più forum) non riesce a gestire i valori Null dei campi lasciati vuoti all'interno di una tabella . Per cui i criteri della query NON si devono mai mettere direttamente nella query ma bisogna passarli via codice altrimenti access canna il recordset.

    Per questo motivo io faccio la seguente query di accomodamento (senza condizioni) come mi hai suggerito tu:

    INSERT INTO Tabella_2
    SELECT Tabella_1.*
    FROM Tabella_1

    Le condizioni WHERE (il numero di condizioni dipende da quello che l'utente cliccherà su una maschera di ricerca che contiene circa 30 criteri diversi) viene costruito con la seguente funzione in VBA:

    Function FNCSearch(ArrSearch, Field, Parametro, strSQL, CondStart, CondEnd)
    If Len(Trim(ArrSearch)) = 10 And InStr(ArrSearch, "/") Then ArrSearch = Format$(ArrSearch, "mm/dd/yyyy")
    ArrSearch = Split(Trim(ArrSearch), ",")
    Field = Split(Trim(Field), ",")
    For k = 0 To UBound(Field)
    For I = 0 To UBound(ArrSearch)
    If k = 0 And I = 0 And Parametro <> 1 Then boleana = " (" Else If k = 0 And I = 0 And Parametro = 1 Then boleana = " AND (" Else boleana = " OR "
    strSQL = strSQL & boleana & Field(k) & CondStart & Trim(ArrSearch(I)) & CondEnd
    Next
    Next
    strSQL = strSQL & ")"
    Parametro = 1
    End Function

    La funzione viene richiamata sul bottone chiamato "CERCA" nella maschera chiamata "RICERCA" che fa ciclare i parametri con il seguente codice:

    For Each ctl In NomeForm.Controls
    If Not IsNull(ctl) Or ctl <> "" Then Call FNCSearch(ctl , [ctl], Parametro, strSQL, " Like '*", "*'")
    Next ctl

    Il risultato delle condizioni può essere (per es) quello che segue:

    (([Tabella_1].[cognome])="Pinco")) AND (([Tabella_1].[nome])="Pallino")) AND .... altri 1, 2 o 30 criteri a seconda di quello che l'utente vuole cercare.


    Per il report il passaggio dei criteri viene fatto con il seguente comando:

    DoCmd.OpenReport stDocName, acPreview, , strSQL

    dove i criteri costruiti in VBA sono la stringa chiamata strSQL

    Il problema è che io vorrei passare strSQL Non al report ma ad una query:
    C'è un comando che mi permette di passare i criteri via codice alla query (Previo comando che ha eliminato tutti i dati precedentemente contenuti nella Tabella_2)?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    potresti usare docmd.runsql,tuo criterio di filtro.
    Altrimenti attraverso la dichiarazione di recorset e altro del Dao.
    Aggiorniamoci

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    Si hai ragione ...
    tuttavia io non sono un informatico e le cose che sto facendo e per le quali mi stai aiutando difficilmente mi serviranno una seconda volta ...

    Del resto i forum servono a chiedere un aiuto per qualche problema da risolvere, altrimenti eviterei di scrivere ...

    Cmq grazie del tempo che hai perso per me e le indicazioni che mi hai dato

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    156
    Anchi'io non sono un proffesionista.
    Se hai bisogno ti posto la sintassi per lavorare con i recordset,non e' poi difficile da capire.
    Ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    65
    Ho trovato su http://www.sitocomune.com/ una quantità di esempi pronto uso


    Già che ci sono, mi chiedevo se esiste da qualche parte una qualche versione di Database administrator Standalone sviluppato in Visual Basic che utilizzasse i metodi ADOX per le connessioni ai vari database simili a quelli sviluppati per il web in Asp di cui qui sotto puoi trovare un link

    http://www.aspcode.it/dbedemo/
    http://demo.stpworks.com/dbadmin20/

    Naturalmente mi chiedevo se c'era una versione scaricabile e adattabile alle proprie esigenze ...

    grazie per la disponibilità

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.