Solo per informarti.
Nella maschera contratti dove ho una sottomaschera dettagli contratti, ho tolto idstampante e riguardando le query come dicevi ho eliminato questo campo che a vederci bene era ridondante, e lo richiamo dalla tabella serialnumber.
Ho poi tolto tutte le caselle combinate come gia detto , perchè avendo molte stampanti e seriali era complicato usare le caselle combinate, allora ho fatto si che cliccando sul codice stampante mi si apre una nuova maschera a popup e selezione obbligatoria, dove ho due elenchi il primo in alto dove ho tutte le stampanti che posso filtrare ricercandole tramite un campo ricerca, sotto ho tutti i seriali rispettivi alla stampante che seleziono nel elenco delle stampanti
una volta selezionato stampante e seriale ho dei campi che si aggiornano con i campi selezionati per darmi un resoconto di cosa ho selezionato.
Private Sub elencostampanti_Click() si trova nel form dove devo selezionare stampanti e seriali FRM_SelezionaSeriali.
On Error GoTo Err_elencostampanti_Click
Me.elencostampanti.Requery
Me.ElencoSeriali.Requery
Dim rst As DAO.Recordset
Dim strSearchName As String
Set rst = Me.RecordsetClone
rst.Requery
strSearchName = Me.elencostampanti.Column(0)
rst.FindFirst "idstampanti= " & strSearchName
If rst.NoMatch Then
MsgBox Err.Description
Else
Me.Bookmark = rst.Bookmark
End If
rst.Close
Me.elencostampanti.Requery
Me.ElencoSeriali.Requery
Exit_elencostampanti_Click:
Exit Sub
Err_elencostampanti_Click:
MsgBox ("Selezionare un valore dall'elenco")
Resume Exit_elencostampanti_Click
End Sub
Poi ho un tasto inserisci che inserisce questi dati nel form sottostante e chiude il form attivo con l'istruzione forms che son riuscito a far funzionare risistemando le query.
Tutto funziona.
Private Sub OK_Click()
If Not IsNull(Me.Idstampanti.Value) Then
Me.Noleggiata.Value = True
[Forms]![FRM_Contratti]![FRM_ContrattiDettagli]![idserialnumber].Value = Me![idsn].Value
DoCmd.Close
Else
DoCmd.Close
End If
End Sub
Il problema adesso lo riscontro:
Esempio se clicco su di una riga gia inserita perché magari voglio cambiare quel seriale con un altro? io ho risolto cosi
Private Sub idstampante_Click()
Dim stDocName As String
If Not IsNull(Me.idserialnumber.Value) Then
If MsgBox("QUESTA PROCEDURA CANCELLERA TUTTI I DATI DI QUESTO RECORD? .", vbYesNo) = vbYes Then
Me.Noleggiata.Value = False
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
stDocName = "Frm_SelezioneSeriali"
DoCmd.OpenForm stDocName, acNormal
DoCmd.GoToRecord , , acNewRec
Else
MsgBox ("Operazione annullata")
End If
Else
stDocName = "Frm_SelezioneSeriali"
DoCmd.OpenForm stDocName, acNormal
DoCmd.GoToRecord , , acNewRec
End If
End Sub
Il problema sta che se clicco sul codice stampante da contratto di noleggio, e non faccio niente nel FRM_SelezioneSeriali mi ritrovo Me.Noleggiata.Value =false perciò quando riclicco per inserire per esempio una nuova riga questo seriale gia selezionato prima me lo ritrovo di nuovo nella lista.
Esempio
Codice descrizione seriale ecc
1440 stampante utax 1440 123456789
1440 stampante utax 1440 123456789
E questo è un errore perche non sto noleggiando 2 stampanti con lo stesso seriale ma poiche nella query io filtro i valori per noleggiata vero/false semplicemente perche nell’elenco voglio solo le non noleggiate per un fatto di velocità e perché credo sia normale.
avevo pensato di cancellare la riga ogni volta che apro il nuovo form ma poi non so come intercettare il comando di cancellazione
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, yes, acMenuVer70
In modo che non chiede di cliccare su si oppure no ma nasconderlo.
N.B. che quando dello stesso seriale non sono due stampanti con lo stesso seriale ma la stessa stampante e lo stesso seriale.
Spero di essere stato chiaro e mi scuso se sono un po confusionario a spiegare le cose.
Grazie.
Allegati: