Access verificare numero records presenti in query di accodamento

Anonimo
2016-06-19T08:20:17+00:00

Buongiorno.

Da una maschera lancio una Query di accodamento la quale verifica che i records da accodare non siano già presenti nella tabella di destinazione (i records della query potrebbero perciò essere pari a zero).

Prima di lanciare l'accodamento vorrei poter contare i records da accodare, perché se sono > 0 allora accodo, altrimenti apro una yes no msgbox, con la domanda del tipo: "i records selezionati sono già presenti, vuoi aggiornare quelli esistenti ?". Rispondendo NO annullo il comando, rispondendo SI lancio una Query di aggiornamento.

Tutto bene ma non sono in grado di verificare se la Query di accodamento è vuota; ho provato con dcount ma non funziona, potrei utilizzare una tabella temporanea di appoggio, ma ritengo che sia troppo macchinoso.

Confido nel vostro aiuto.

Buona giornata

Andrea

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2016-07-03T14:37:56+00:00

    Bua domenica Sandro e grazie per la risposta, esaudiente. Scusa il ritardo ma, sommerso dal lavoro, non avevo avuto tempo di mettere in pratica i tuoi suggerimenti.

    Sono riuscito a farli funzionare nel mio database grazie ! Ottima l'idea del campo "status" che permette di avere sotto controllo cosa è stato fatto: da utilizzare anche in altre situazioni.

    Grazie e buona domenica.

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-06-20T20:28:21+00:00

    ciao Andrea,

    [...]

    Non vorrei però che tu ammattissi più di tanto, per cui non è necessario che tu prepari Demo o simili, davvero, per favore, altrimenti mi fai sentire in colpa.

    [...]

    nessun problema, provo a dare il mio contributo come meglio posso....a volte va bene altre volte meno bene....

    finchè mi diverto procedo e partecipo in questo modo :-)

    una bozza da cui partire.

    SourceTable=impiegati, TargetTable=impiegati1, tabella temporanea=”t_temp”

    Primo step.

    Dopo la selezione di alcuni elementi da una listBox, una tabella temporanea accoglie gli elementi selezionati, al click del commadButton accoda.

    Se una query inner Join tra la tabella temporanea e la tabella target restituisce 0 records (= nessun records selezionato già presente) li accodi nella tabella target.

    Secondo step.

    Selezioni gli stessi elementi dalla listbox, quindi la query inner identifica elementi duplicati perché restituisce un numero di records>0.

    Un messaggio chiede se vuoi aggiornare, se si aggiorni se no non aggiorni.

    Terzo step

    Selezioni gli stessi elementi dalla listbox, quindi la query inner identifica elementi duplicati perché restituisce un numero di records>0

    In più ne selezioni uno in più non ancora accodato/ti e non presente/ti.

    A questo un messaggio chiede se vuoi aggiornare se si aggiorni se no non aggiorni.

    In più, se si, un’ulteriore query verifica se ci sono records non corrispondenti tra la temporanea a la tabella target e ne trova ovviamente in questo step.

    Quel record o quei records verranno accodati.

    In pratica…se nella tabella target non ci sono i records selezionati li accodi, se ci sono li aggiorni se ne selezioni di più di quelli già presenti, aggiorni gli

    esistenti e accodi gli altri.

    Spero fosse questo il tuo obbiettivo.

    Il tutto viene visualizzato a video con messaggi corrispondenti in modo da capire cosa sta succedendo.

    Inoltre, nella tabella target hai un campo status che mostra se il record è stato interessato da un inserimento  ( status=I) oppure da un aggiornamento (status=U).

    Aggiungo che per modificare un elemento della listBox, è sufficiente che fai doppio click sull’elemento stesso, in modo da aprire una form filtrata e mostrare quel item, quindi non serve che apri la tabella….

    Se vuoi scarica l’esempio da qui Demo .

    [...]

    Grazie

    Andrea

    Ciao,Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-06-19T14:15:13+00:00

    Ciao Sandro e grazie.

    Non era un errore di battitura, avrei proprio la necessità di verificare se la Query di accodamento che lancio restituisce valori o no; se non ci sono valori perché già presenti nella tabella e vengono evitati duplicati, allora si apre una msgbox che chiede qualcosa del tipo "I record selezionati sono già presenti in tabella: si desidera aggiornarli ?". Se rispondo NO annullo il comando, se rispondo SI lancio una Query che aggiorna i dati nella tabella anziché accodarli.

    Ecco perché avevo provato con il codice:

    DoCmd.OpenQuery "query4"

    If Len(query4) > 0 Then

    MsgBox "accodamento effettuato con successo"

    Else

    intrisposta = MsgBox "accodamento non effettuato, records già presenti in tabella: si desidera aggiornare  i dati ?"

    if intrisposta = yes then

    docmd.openquery "queryaggiornamento"

    else

    me.undo         End if

    End If

    Ho capito che il problema è legato a "Len(Query4)" ma non riesco a trovare una valida alternativa.

    Non vorrei però che tu ammattissi più di tanto, per cui non è necessario che tu prepari Demo o simili, davvero, per favore, altrimenti mi fai sentire in colpa.

    Grazie

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-06-19T12:06:54+00:00

    ciao Andrea,

    ho provato a prepararti un esempio, anche se non sono certissimo di avere inteso perchè parli prima di accodamento e poi di aggiornamento credo per errore di battitura.

    nella demo trovi due esempi,

    il primo sfrutta un po' il ragionamento fatto nel post precedente :

    http://answers.microsoft.com/it-it/office/forum/office\_2013\_release-access/access-query-accodamento-da-maschera/8b30d00a-b507-4737-811f-51a07775e924

    in cui selezioni degli records da accodare, ti viene segnalato se ci sono duplicati e la scelta se accodare o meno.

    la seconda sfrutta la proprietà recordsAffected per indicarti quanti records stai accodando.

    HTH.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento