Messaggio allert su scrittura record già eseguita

lunedì 08 ottobre 2012 - 21.18
Tag Elenco Tags  Windows 7  |  Windows XP  |  Access (.mdb)  |  Office 2010  |  Office 2007  |  Office 2003  |  Internet explorer 8.0  |  Internet Explorer 7.0

sagrimal Profilo | Junior Member

Ciao A tutti, vorrei per prima cosa ringraziare tutti coloro che su questo forum mi hanno dato la possibilità di realizzare dei data base molto sofisticati ma principalmente funzionali, senza il vostro aiuto non sarei riuscito mai a risolvere tanti problemi. Adesso vengo al sodo.
Ho una maschera contenente una sottomaschera, ho aggiunto un'immagine per chiarire meglio la cosa.
La maschera principale si chiame maschera_1 e la sottomaschera sottomaschera_1
nella testata della maschera_1 ci sono i campi "NUM_BOLL" "DATA_BOLLA" " E CDCLI"
nel corpo della maschera_1 c'è il campo "CODICE_PEDANA" e la sottomaschera_1 nel corpo della maschera_1 il campo master "CODICE_PEDANA" è CORELATO AL CAMPO SEDONDARIO "N_PEDANA"della sottomaschera_1.
quando nel campo "CODICE_PEDANA" inserisco il numero pacco, sulla sottomaschera_1 viene visualizzato il record corrispondente al numero inserito, a questo punto nelle proprietà del campo CODICE PEDANA, dopo aggiornamento ho inserito:
Private Sub CODICE_PEDANA_AfterUpdate()
Me.PEDANE.Form![BOLLA_NUMERO] = Me.NUM_BOLL
Me.PEDANE.Form![ID_CLIENTE] = Me.CDCLI
Me.PEDANE.Form![BOLLA_DATA] = Me.DATA_BOLLA

End Sub
In questo modo sui campi "BOLLA_NUMERO" ID_CLIENTE" E "BOLLA_DATA" vengono scritti i valori presenti nei campi "NUM_BOLL" "CDCLI" e "DATA_BOLLA" presenti nella Maschera_1.

Questo sistema mi serve per poter fare lo scarico dell'archivio pacchi, escludendo con una query i pacchi che riportano i campi su descritti non vuoti.
Adesso espongo il mio problema:
se digito lo stesso numero es pacco 3515 lui mi va a scrivere sui campi interessati, se lo riscrivo per errore non mi da alcun avviso quindi io credo di aver scaricato 2 pacchi inevce ne scarica uno solo perche sovrascrive i campi già scritti. Mi piacerebbe poter avere un allert che mi avvisi che il pacco è già stato scaricato, scritto.

E' possibile avere una cosa del genere ?
Grazie mille
Salvatore

1024x768 175Kb

alx_81 Profilo | Guru

>Ciao A tutti, vorrei per prima cosa ringraziare tutti coloro
>che su questo forum mi hanno dato la possibilità di realizzare
>dei data base molto sofisticati ma principalmente funzionali,
>senza il vostro aiuto non sarei riuscito mai a risolvere tanti
>problemi.
Ciao, e grazie mille a nome di tutto lo staff

>se digito lo stesso numero es pacco 3515 lui mi va a scrivere
>sui campi interessati, se lo riscrivo per errore non mi da alcun
>avviso quindi io credo di aver scaricato 2 pacchi inevce ne scarica
>uno solo perche sovrascrive i campi già scritti. Mi piacerebbe
>poter avere un allert che mi avvisi che il pacco è già stato
>scaricato, scritto.
>E' possibile avere una cosa del genere ?
puoi controllare PRIMA dell'update con una semplice query (il criterio di where lo devi conoscere tu) se il record esiste già per evitare la scrittura, ma a lungo andare l'operazione potrebbe essere anche pesante e ci sarà di certo prima o poi bisogno di un indice.
A prescindere da questo, fossi in te creerei un indice univoco sul set dei campi (anche uno solo, dipende dalla tua base dati) che non vuoi venga ripetuto.
In questo modo, il database si "difende da solo" se cerchi di violare un vincolo cosiddetto UNIQUE.
Il controllo a priori ti evita l'errore (stesso criterio con cui è stato creato l'indice unique) ma se non metti il controllo, puoi gestire l'errore di violazione del vincolo.

>Grazie mille
di nulla!

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

sagrimal Profilo | Junior Member

Ciao Alessandro, grazie per avermi risposto.
Il problema è questo, se apri l'immagine allegata, noterai che nel corpo della maschera c'è un campo CODICE_PEDANA quando digito il numero pedana nel campo indicato, nella sottomaschera, visualizzo il record e con il modulo inserito dopo l'aggiornamento che ho elencato sopra va a scrivere nei campi ID_CLIENTE BOLLA_NUMERO e BOLLA_DATA i corrispettivi valori presenti nei corrispettivi campi della testata della maschera principale.
Il problema è che se successivamente, magari il giorno dopo, vado a digitare nella maschera un codice pedana uguale ad uno già scaricato precedentemente, non ho alcun avviso ma mi sostituisce i precedenti contenuti dei campi ID_CLIENTE BOLLA_NUMERO e BOLLA_DATA.
Qualcuno mi ha suggerito di fare così:

Private Sub CODICE_PEDANA_AfterUpdate()
If Not IsNull(DLookup(ti costruisci la funzione) Then
MsgBox Me!BOLLA_NUM & Me!ID_CLIENTE & Me!BOLLA_DATA "Sono già stati scritti. Clicca su OK e seleziona un altro pacco o annulla la registrazione", vbOKOnly, "Duplicato!"
else
Me.PEDANE.Form![BOLLA_NUMERO] = Me.NUM_BOLL
Me.PEDANE.Form![ID_CLIENTE] = Me.CDCLI
Me.PEDANE.Form![BOLLA_DATA] = Me.DATA_BOLLA
End If
ma non ho capito nulla !!
Ciao grazie ancora
Salvatore

alx_81 Profilo | Guru

>ma non ho capito nulla !!
quello che ti hanno consigliato è proprio la lookup verso il valore prima di inserirlo..
Mi spiace ma a questo punto ho paura che devi documentarti un pochino.
Vedrai che se leggi cosa fa quella DLookup capirai che è molto più semplice di quanto sembri..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

sagrimal Profilo | Junior Member

Ciao Alex. ho provato così ma continua a darmi errore

If Not IsNull(DLookup("[codice_pedana]", "pedane", _
"[codice_pedana] = " & Chr$(34) & Me!CODICE_PEDANA & Chr$(34))) _
And Me!CODICE_PEDANA <> Nz(Me!CODICE_PEDANA .OldValue) AND [bolla_num]"<>"") Then
MsgBox Me!BOLLA_NUM & Me!ID_CLIENTE & Me!BOLLA_DATA & "Sono già stati scritti. Clicca su OK e seleziona un altro pacco o annulla la registrazione", vbOKOnly, "Duplicato!"
else
Me.PEDANE.Form![BOLLA_NUMERO] = Me.NUM_BOLL
Me.PEDANE.Form![ID_CLIENTE] = Me.CDCLI
Me.PEDANE.Form![BOLLA_DATA] = Me.DATA_BOLLA
End If
proverò ad allegare il db ovviamente pulito.
Ciao e grazie a tutti voi

alx_81 Profilo | Guru

>Ciao Alex. ho provato così ma continua a darmi errore
Ciao, scusami ma proprio non ho trovato il tempo di provare il db, hai trovato qualcosa?
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5