Condividi tramite

Inserire (tramite codice vba) dati in una tabella di un Database sul server aziendale.

Anonimo
2019-05-30T12:48:17+00:00

Buongiorno a tutti.

Chiedo l'aiuto degli esperti del forum per creare una routine che mi inserisca in automatico un dato in un database esterno posizionato sul server aziendale.

il mio scenario è questo:

Ho 2 tabelle di 2 database uguali, con stessa formattazione  di dati e controlli, chiamate rispettivamente tblAnagrafica1  e tblAnagrafica.

La tabella tblAnagrafica1 fa parte del database messo in rete con il suo relativo percorso, mentre l'altra ( tblAnagrafica) fa parte del mio DB locale dal quale vorrei lanciare, tramite pulsante di comando la query di inserimento dati di cui chiedo l'aiuto.

Le 2 tabelle hanno gli stessi seguenti Campi:

ID;

Matricola (campo univoco e PK sulle 2 tabelle)

Cognome;

Nome;

Password (a quest'ultima è abbinata sulla Form una casella di testo chiamata txtPassword).

Quello che desidero ottenere con il vostro aiuto è il totale di queste operazioni:

1) che il dato presente nella txtPassword della tblAnagrafica1 del database locale, venga inserito nel campo Password, per lo stesso dipendente ( contraddistinto nelle 2 tabelle dal campo Matricola) della tblAnagrafica del DB messo sul server aziendale;

  1. in presenza già di un dato nel campo Password della tblAnagrafica ci sia un messaggio che mi dica che la password è già inserita;
  2. in caso di dato già presente mi venga chiesto ( sempre tramite messaggio ) se voglio uscire dalla routine oppure sovrascrivere il dato già presente.
  3. nel caso non si trovasse lo stesso dipendente ( intendo la Matricola, PK) nella tblAnagrfica del db in rete, un messaggio mi avvisi di questo.

Spero di essere stato chiaro e comprensibile, diversamente chiedetemi pure altre informazioni e sarò più chiaro.

Ringrazio in anticipo chi mi aiuta in questo.

Ciao Nicola

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

Risposta accettata dall'autore della domanda

Anonimo
2019-06-03T19:31:03+00:00

ciao Nicola,

supponendo le due tabelle che seguono :

e

supponendo che il campo posizione sia il campo password nel tuo scenario, io applicherei un predicato sql che ti permetta di mettere in evidenza le corrispondenze e non corrispondenze tra le tue tabelle per il campo password ed altresì quelle relative al campo id che da te sarà il campo matricola.

Questo quanto intendo per quanto al result set della query :

come vedi la colonna category mette in risalto lo status del record e previousPosition e newPosition mostrano le differenze nel campo posizione ( da te password).

con  una banale query di aggiornamento posta in esecuzione su un command button in una form continua aggiornerà ad esempio la password in modo modificare ad esempio il record con id 001 in perfect match

Onestamente per il mio modo di ragionare predigerei un approccio di tal tipo.

Il predicato per ottenere il result set della terza immagine di questo 3d è piuttosto impegnativo e verboso….

Vedi un po' tu come vuoi proseguire.

ciao, Sandro.

ps tieni conto che ho fatto un'eccezione per te intervenendo in questo 3d.

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-06-07T12:31:49+00:00

ciao Nicola,

[…]

P.S. Sandro,per quanto riguarda dei messaggi di avviso che mi facciano capire che la matricola non esiste, la devo aggiungere oppure no e altro, come faccio?

[...]

lo scopo della query e' quello di evidenziare :

Perfect match nessuna discrepanza tra pk e password tra le due tabelle ;

Unmatched Table 2 row manca la pk nella  table1 rispetto alla table2

Unmatched Table 1 row manca la pk nella  table2 rispetto alla table1

Conflicting data la password non coincide. (nell'esempio il campo position)

mettendo quindi a confronto le tabelle non servono messaggi perche' hai una visione globale del macht, non match o conflitto.

Come detto io agirei in tal modo.

Ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-06-05T15:12:08+00:00

ciao Nicola,

prova a creare le tabelle che ti ho mostrato nel post precedente, esattamente come le vedi con gli stessi campi e stessi dati.

La table1 la metti nel db in locale, la table2 nel db server.

Non serve che tu crei il db sul server basta anche un percorso locale, per spostare il tutto sul server e' sufficiente modificare il path per questa prova.

Copia/incolla questo predicato sql che segue, modificando opportunamente il path del db esterno ( quello sul server per intenderci che per questa prova sara'in locale impostando il path corretto ovviamente...).

Come ti dicevo e' un po' complesso…..

SELECT "Conflicting data" AS Category,

             T.id, T.nome,

            T.position AS PreviousPosition,

            T2.position AS NewPosition,

            T.feedbackdate AS PreviosuFeedbackdate,

            T2.feedbackdate AS newFeedbackdate

FROM

           ( table1 AS T

                      left JOIN

             ( select * from  table2 AS T in 'C:\fullPath\DB_SERVER.accdb') AS T2

                     ON

            T.id = T2.id  )

 inner JOIN

                              (SELECT T3.id,

                                           T3.nome,

                                           T4.position AS previousPosition,

                                           T3.position AS newPosition,

                                           T4.feedbackdate AS previousFeedbackdate,

                                           T3.feedbackdate AS newFeedbackdate

                             FROM    ( select * from  table2 AS T in 'C:\fullPath\DB_SERVER.accdb')  AS T3

                                        left JOIN table1 AS T4

                             ON

                                        T3.id = T4.id

                            WHERE

                                      T4.id Is Null or  t3.position<>t4.position or (t3.position is  null and t4.position is not null) or (t3.position is not null and t4.position is null) or (t3.position is  null and t4.position is null) )    AS T5

                           ON

                                       T5.id=T.id

UNION ALL

SELECT  "Unmatched Table 2 row",

               t6.id,

              t6.nome,

              table1.position AS previousPosition,

              t6.position AS newPosition,

              table1.feedbackdate AS previousFeedbackdate,

              t6.feedbackdate AS newFeedbackdate

FROM

          ( select * from  table2 AS T in 'C:\fullPath\DB_SERVER.accdb') as T6

LEFT JOIN

         table1

 ON

         t6.id = table1.id

WHERE

         table1.id Is Null

UNION ALL SELECT   "Unmatched Table 1 row",

              table1.id,

              table1.nome,

              t7.position AS previousPosition,

              table1.position AS newPosition,

              t7.feedbackdate AS previousFeedbackdate,

              table1.feedbackdate AS newFeedbackdate

FROM

           table1

LEFT JOIN

           ( select * from  table2 AS T in 'C:\fullPath\DB_SERVER.accdb') as T7

 ON

         table1.id = t7.id

WHERE

         t7.id Is Null;

UNION ALL SELECT "Perfect match",

table1.id,

             table1.nome,

              t8.position AS previousPosition,

             table1.position AS newPosition,

             t8.feedbackdate AS previousFeedbackdate, 

             table1.feedbackdate

FROM

          table1

  INNER JOIN

          ( select * from  table2 AS T in 'C:\fullPath\DB_SERVER.accdb') as T8

ON

       (table1.position = t8.position) AND (table1.id = t8.id);

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

16 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-05-30T15:00:47+00:00

    ciao Nicola,

    supponiamo che le righe da inserire / controllare siano molte che ne so 10000 e solamente su 100 ci siano incongruenze su cui decidere come operare, sovrascrivere o no.

    Sei certo sia cosi' pratico ricevere 100 messaggi a cui rispondere sovrascrivi o no?

    e se invece di 100 fossero molte di piu'?

    A priori la cosa potrebbe stare in piedi qualora effettivamente si potesse prevedere un numero di incongruenze molto basso altrimenti non credo possa essere la strada giusta.

    Una valida alternativa potrebbe essere mostrare le incongruenza e decidere come procedere.

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-05-30T14:51:11+00:00

    Ciao Nicola,

    ovviamente nel tuo DB locale devi avere collegata la tabella del Server.

    Immagino che hai un pulsante che attivi il codice di aggiornamento/verifica della password.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento