Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Access 2010] - Inserire un valore in un campo con VBA.

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Access 2010] - Inserire un valore in un campo con VBA.

Postdi theShort » 24/10/14 22:18

Eccomi ancora una volta a chiedere un aiutino.

Dunque, ho una maschera che chiamerò "Form1" al cui interno c'è un campo non associato dove ho inserito il codice per recuperare i dati di due campi appartenenti ad un'altra maschera "Form2". In pratica il codice recupera i valori (testo) dei due campi in "Form2" e li separa da un trattino. Fino qui, tutto bene e tutto semplice.
Ora, vorrei che il valore così ottenuto nel campo non associato venga inserito nel relativo campo (campo1) della tabella che sta alla base della "Form1". Per fare questo ho creato un evento sul campo non associato con il codice seguente:
Codice: Seleziona tutto
Private Sub Testo80_AfterUpdate()
    On Error GoTo Err_Testo80_AfterUpdate
   
        Dim myDB As DAO.Database
        Dim valore As String

        textfield.SetFocus
        valore = textfield.Text

        Set myDB = Forms.Application.CurrentDb

        myDB.Execute ("INSERT INTO Form1([campo1]) VALUES(" & valore & ")")
       
Exit_Testo80_AfterUpdate:
    Exit Sub

Err_Testo80_AfterUpdate:
    MsgBox Err.Description
    Resume Exit_Testo80_AfterUpdate
End Sub


Ebbene, questo codice oltre a non fare il lavoro che vorrei che facesse, nemmeno mi restituisce un errore...
Sapreste aiutarmi?

Mi chiederete: Perchè vuoi passare per un campo non associato? Non puoi prendere i valori dei due campi di "Form2" e inserirli direttamente nel campo di "Form1"?
Ecco... se avete anche questa soluzione, allora sarebbe meglio ;)

Grazie a chi mi dedica del tempo!
theShort
Utente Junior
 
Post: 22
Iscritto il: 05/03/13 11:35

Sponsor
 

Postdi archimede » 25/10/14 08:37

Fammi capire: hai creato una form che legge due campi di un'altra form con il SOLO scopo di salvare questi due dati in una tabella? :eeh: Se è così, non mi stupische che il database ne contiene già mille mila.
theShort ha scritto:Non puoi prendere i valori dei due campi di "Form2" e inserirli direttamente nel campo di "Form1"?
Appunto: quello che fai in una form è esattamente la stessa cosa che faresti nell'altra.

Per rispondere alla tua domanda:

1) per favore usa i nomi REALI dei tuoi oggetti, così non si perde tempo a scrivere codice che poi tu devi correggere per adattarlo al tuo ambiente

2) COME deve avvenire il salvataggio? Ci sarà un bottone in questa form, suppongo...

3) inserire nel relativo campo è un po' generico: devi creare un nuovo record o aggiornare uno (o più) dei records esistenti?

4) come si chiama la tabella e come si chiamano i campi? (ved. punto 1)

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re:

Postdi theShort » 25/10/14 15:29

archimede ha scritto:Fammi capire: hai creato una form che legge due campi di un'altra form con il SOLO scopo di salvare questi due dati in una tabella? :eeh: Se è così, non mi stupische che il database ne contiene già mille mila.

No no, assolutamente! La maschera contiene altri campi associati alla relativa tabella. :D

Piccola premessa: il database in questione è stato creato da non so chi e a me hanno chiesto solo di apportare delle modifiche. Il fatto è che non uso access da diverso tempo e sono parecchi anni che non scrivo più una riga di codice in VB. Potrai immaginare quanto sia arrugginito... :)
Alcune cose le ho risolte da solo, per altre sono qui a domandare.

Facciamo un po' di chiarezza. Nel database ad ogni committente corrispondono uno o più progetti e ad ogni progetto corrispondono una o più verifiche.
Nella tabella "Anagrafica_Progetto" ho, tra gli altri, i campi "CAP" e "Località" e nella tabella "Verifica" ho, tra gli altri, il campo "Cod_Loc". Da queste tabelle sono state create le rispettive maschere. Il campo "Cod_Loc" serve solo ad identificare un gruppo di verifiche dalle altre presenti e questo identificativo deve essere composto semplicemente dal CAP e dalla Località in questo modo: CAP-Località.
L'idea di partenza è quella di compilare i campi in "Anagrafica_Progetto" e per ogni verifica che venga creata per il relativo progetto, il campo "Cod_Loc" venga inserito in automatico (senza l'utilizzo di pulsanti o altro).

Il fatto che abbia aggiunto una casella di testo non associata nella maschera "verifica", che non è altro che un doppione del campo "Cod_Loc", deriva dall'apparente impossibilità in Access 2010 di creare campi calcolati in una tabella con valori provenienti da altre tabelle.

E forse non mi serve nemmeno una routine VBA, basterebbe una istruzione SQL nel campo della maschera...
theShort
Utente Junior
 
Post: 22
Iscritto il: 05/03/13 11:35

Postdi archimede » 25/10/14 17:31

theShort ha scritto:Il fatto che abbia aggiunto una casella di testo non associata nella maschera "verifica", che non è altro che un doppione del campo "Cod_Loc", deriva dall'apparente impossibilità in Access 2010 di creare campi calcolati in una tabella con valori provenienti da altre tabelle.
Duplicare gli stessi dati su più tabelle è una pessima idea (salvo casi eccezionali): puoi ottenere lo stesso risultato più facilmente ed efficacemente con le queries. Per cui mi corre l'obbligo di chiederti: sei ASSOLUTAMENTE sicuro di voler gestire il campo "Cod_Loc" nel modo da te descritto?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [Access 2010] - Inserire un valore in un campo con VBA.

Postdi theShort » 28/10/14 22:41

No, non sono sicuro nel voler gestire il campo "Cod_Loc" in quel modo, ma fare gestire il tutto da VBA mi sembrava la via più pulita.
Ad ogni modo ho valutato l'alternativa, cioè ho creato una query di aggiornamento che mi compili il campo suddetto e funziona. Poi ho spostato il campo "Località" nella tabella "Verifica" e quindi nella relativa maschera.
L'idea segue cercando di usare questa query con il massimo automatismo possibile. Richiamo la query tramite il codice:
Codice: Seleziona tutto
DoCmd.SetWarnings False
DoCmd.OpenQuery "Qr_Cod_Località", acNormal, acEdit
DoCmd.SetWarnings True
       
Forms!Verifica.Requery

e se lo lego al campo "Località", indipendentemente che sia un afterupdate o qualcosaltro, non viene eseguito.
Se lo lego direttamente alla maschera come afterupdate, ne vedo il risultato solo chiudendo e riaprendo la maschera. Un po' scomodo...
Decisamente più accettabile se lego il codice direttamente al campo "Cod_Loc" e lo avvio tramite click. Funziona bene tranne quando si compila un nuovo record, infatti fino a quando non si chiude la maschera il record non è ufficialmente creato e di conseguenza un click su "Cod_Loc" mi restituisce un errore relativo a :
Codice: Seleziona tutto
Forms!Verifica.Requery

come giusto che sia...

Hai qualche soluzione?

Grazie! ;)
theShort
Utente Junior
 
Post: 22
Iscritto il: 05/03/13 11:35

Postdi archimede » 29/10/14 09:20

theShort ha scritto:fare gestire il tutto da VBA mi sembrava la via più pulita.
In generale meno codice si scrive meno errori si fanno. ;)
theShort ha scritto:ho creato una query di aggiornamento che mi compili il campo suddetto
Non era quello che intendevo: così hai sempre dei dati duplicati, no?

La mia idea è, grosso modo:

Tabella Anagrafica_Progetto:
ID_Progetto
CAP
Localita
...

Tabella Verifica:
ID_Verifica
ID_Progetto
...

Query Progetti_Verifiche:
Codice: Seleziona tutto
SELECT v.*, p.cap & " - " & p.localita AS Cod_Loc
  FROM Anagrafica_Progetto AS p, Verifica AS V
 WHERE p.ID_Progetto = v.ID_Progetto;
A questo punto dovresti poter usare Progetti_Verifiche invece di Verifica come sorgente dati della tua form e avere il dato che ti interessa (ovviamente il campo Cod_Loc NON è modificabile).

HTH.

Alessandro

PS: ripensandoci, sei SICURO che ti serva il campo cod_loc nella form di gestione delle Verifiche? Perché potresti evitarti tutte queste menate se ti limitassi a usare la query suddetta (o una analoga) solo nei casi dove hai bisogno in output dei dati di entrambe le tabelle (ad es. i reports).
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [Access 2010] - Inserire un valore in un campo con VBA.

Postdi theShort » 03/11/14 22:17

Scusa nel ritardo della risposta, ma in questi giorni sono stato impegnato e non ho avuto tempo per questo database.

Ma questo codice SQL come lo utilizzo? Come lo lego al campo "Cod_Loc"?

Tieni conto che ora, per altri vari motivi, il campo "Località" è passato nella tabella "Verifiche".

Purtroppo non saprei dire quanto sia importante il campo cod_loc, ma da quello che ho capito è un identificativo della verifica effettuata in un determinato progetto e in quanto tale potrebbe essere utilizzato per altre eventuali azioni da compiere sui record.

Grazie per l'aiuto! ;)
theShort
Utente Junior
 
Post: 22
Iscritto il: 05/03/13 11:35

Postdi archimede » 04/11/14 11:06

theShort ha scritto:questo codice SQL come lo utilizzo?
Crei un nuovo oggetto Query nel db.
theShort ha scritto:Come lo lego al campo "Cod_Loc"?
Usi la query al posto della tabella come origine dati della form.
theShort ha scritto:è un identificativo della verifica effettuata in un determinato progetto
Mi pare un po' strano francamente. Intanto quei dati non identificano la verifica, bensì il progetto. Inoltre, non puoi avere due progetti che hanno lo stesso CAP e la stessa località? E, se anche fosse, non hai già l'ID_Progetto tra i dati della verifica?

Il mio consiglio è di capire bene i motivi che stanno alla base dei requisiti che ti chiedono di implementare, altrimenti rischi di fare del lavoro inutile o, peggio, dannoso.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [Access 2010] - Inserire un valore in un campo con VBA.

Postdi theShort » 04/11/14 22:22

Ciao, hai pienamente ragione. Tutta la questione che gira intorno al campo "Cod_Loc" è abbastanza confusa e infatti l'ho messa in elenco tra le altre cose di cui devo chiarirmi con i diretti interessati. Al momento non saprei quantificare l'importanza di quel campo.

Comunque, per il momento sistemo tutto come da te consigliato e mi va più che bene.

Grazie per l'aiuto!
theShort
Utente Junior
 
Post: 22
Iscritto il: 05/03/13 11:35


Torna a Applicazioni Office Windows


Topic correlati a "[Access 2010] - Inserire un valore in un campo con VBA.":


Chi c’è in linea

Visitano il forum: cromagno e 9 ospiti