Newsgroup: it.comp.appl.access
Titolo: Inserimento record non riuscito (?)

Ciao a tutti.
Scusate se scrivo ancora per questo problema,ma proprio non so come andare
avanti.
Ho creato un pulsante di comando su una maschera associata ad una
tabella(DettaglioProdotti) che esegue una query di accodamento in un'altra
tabella(Transazioni inventario).Il problema è che non mi accoda nulla per un
errore "a causa della violazione della regola di convalida".Ho verificato
che questo problema è dato dalla violazione di vincoli in "Transazioni
inventario", che è composta da 5
campi(ID,Data,Descrizione,IDprodotto,N#Serie) ,ma nell'accodamento ne
vengono coinvolti solo due di loro(IDProdotto,N#Serie),lasciando gli altri 2
vuoti(ID= contatore).
Domande:
1) Premesso che ho cambiato i vincoli di "Data" e "Descrizione" nell'opzione
"Valido se" prevedendo anche il valore "Null" e che entrambi i campi non
sono necessariamente Richiesti, come mai mi da ancora l'errore di
violazione?Nelle query di accodamento , i campi non comuni non vengono
impostati a "Null"?
Va tutto ok se invece tolgo da entrambi il vincolo in  "Valido se"
2)E' possibile generare un codice in VB o una macro che dopo l'accodamento
possa impostare i valori di "Data" e "Descrizione" rispettivamente a "Now()"
e "c"?
per favore c'è qualcuno che puo' aiutarmi? Sono disperato!! :-(
Un saluto a voi.

 ha scritto nel messaggio
news:x6uN6.6141$Ql3.2...@news.infostrada.it...

Io ho capito questo.
Hai una maschera a visualizzazione a Maschera singola che ha come origine
record la tabella DettaglioProdotti.
Nella maschera hai anche un pulsante di comando: pigiando il pulsante di
comando tu vuoi che venga accodato nella tabella TransazioniInventario un
record formato dai dati del record corrente della maschera e da due
costanti.
Se così stanno le cose, a fronte dell'evento "Su clic" del pulsante di
comando genera il seguente codice VBA:
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Set rs1 = Me.RecordsetClone
Set db = CurrentDb
Set rs2 = db.OpenRecordset("TransazioniInventario")
rs1.Bookmark = Me.Bookmark
rs2.AddNew
rs2!Data = Now()
rs2!Descrizione = "c"
rs2!IDProdotto = rs1!IDProdotto
rs2![N#Serie] = rs1![N#Serie]
rs2.Update
rs1.Close
Set rs1 = Nothing
rs2.Close
Set rs2 = Nothing
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

Grande, il tuo codice è perfetto , ti ringrazio molto.
Ho cercato di modificarlo  in modo da effettuare una ricerca sulla tabella
transazioni, ed ho cercato di abbozzare questa riga di codice (premetto che
il VB non lo conosco):
Dim rs2 As Recordset
Set rs2 = db.OpenRecordset("Transazioni inventario")
   rs2.FindLast "(IDProdotto=" & Me![IDProdotto] & ") AND (NumeroDiSerie=" &
Me![NumeroDiSerie] & ")"
sicuramente non è correto xchè mi da errore :"3251- Operazione non
supportata su questo tipo di oggetto."
Come mai?Il metodo FindFirst non si applica a dati di tipo recordset?Bho!
Scusate la mia ignoranza  !!
Roberto da casa ha scritto nel messaggio ...



[CUT]
Ti sarei grato se rispondessi dopo e non prima dei messaggi precedenti.
Il metodo Find non può essere usato con tutti i tipi di recordset (vedi
help), ad esempio non può essere usato su un recordset aperto su una tabella
(il caso del tuo rs2).
Poteva invece essere usato su rs1, essendo questo un recordset clone.




Capisco,Ti ringrazio.
Ho adottato un'altra soluzione:
Il benedetto pulsante dovrebbe controllare il valore "Utilizzato" (Sì\No)
relativo alla maschera corrente ,ed inserire un nouvo record nella tabella
"Transazioni"
se questo valore è 'Sì', altrimenti non deve consentire
l'inserimento.Inoltre ,dopo l'inserimento (se avviene) dovrebbe settare il
Flag "Utilizzato" a 'No' .
Seguendo i consigli di Roberto ho ottenuto questo codice e ci ho aggiunto un
ciclo If ...Then in questo modo :
Private Sub caricopulsante_Click()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Set rs1 = Me.RecordsetClone
Set db = CurrentDb
Set rs2 = db.OpenRecordset("Transazioni inventario")
rs1.Bookmark = Me.Bookmark
If (rs1!Utilizzato = "Sì") Then
        rs2.AddNew
        rs2!DataTransazione = Now()
        rs2!DescrizioneTransazione = "c"
        rs2!IDProdotto = rs1!IDProdotto
        rs2![NumeroDiSerie] = rs1![NumeroDiSerie]
        rs2.Update
        rs1!Utilizzato="No"
        rs2.Update
   Else: MsgBox "Articolo Presente in magazzino.Impossibile caricarlo"
 End If
rs1.Close
Set rs1 = Nothing
rs2.Close
Set rs2 = Nothing
End Sub
Mandando in esecuzione sembra che non entri mai nella prima condizione ,
visualizzando sempre il messaggio di errore (non inserendo il nuovo record
ovviamente).
Dove è che sbaglio?
Potete consigliarmi qualcosa?
Grazie mille comunque vada...
ciao

 ha scritto nel messaggio
news:W56O6.19495$Ql3.8...@news.infostrada.it...

Non ho capito bene cosa sia Utilizzato.
E' il nome di un controllo della maschera associato ad un campo di tipo
testo della tabella che è origine record della maschera stessa?
Se si, il valore che può assumere è una stringa di valore "Sì" (con
l'accento sulla i) o "No"?
Inoltre la riga di codice
rs1!Utilizzato="No"
non ha alcun significato se non preceduta dal metodo Edit e seguita dal
metodo Update relativi a rs1.
Infine le parentesi tonde della funzione If non hanno molto significato.
Comunque, se si verificano i presuppoati di cui sopra, prova con:
Private Sub caricopulsante_Click()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Set rs1 = Me.RecordsetClone
Set db = CurrentDb
Set rs2 = db.OpenRecordset("Transazioni inventario")
rs1.Bookmark = Me.Bookmark
If Me!Utilizzato = "Sì" Then
        rs2.AddNew
        rs2!DataTransazione = Now()
        rs2!DescrizioneTransazione = "c"
        rs2!IDProdotto = rs1!IDProdotto
        rs2![NumeroDiSerie] = rs1![NumeroDiSerie]
        rs2.Update
        Me!Utilizzato="No"
Else
        MsgBox "Articolo Presente in magazzino.Impossibile caricarlo"
End If
rs1.Close
Set rs1 = Nothing
rs2.Close
Set rs2 = Nothing
End Sub
--


...

Eureka!!!!
Allora la situazione è questa.La mia casella di controllo era associata ad
un campo della tabella a cui era associata la maschera in questione.Il mio
codice iniziale non funzionava ,oltre al fatto che era sbagliato (ringrazio
ancora Roberto per la sua pazienza), perchè considerava sempre e solo la
condizione Else.
Infatti, sempre grazie alla supposizione di Roberto sulla natura del campo
associato ad "Utilizzato", mi sono accorto che è una casella di selezione
(Sì\No)
a cui pero' Access associa i rispettivi valori testuali in inglese (Yes\No),
per cui il codice ignorava ovviamente la condizione -- If
me!Utilizzato=Sì -- !!  :-))
Perdonate la mia newbbagine (è il mio primo lavoro con Access)!!! Ma
sbagliando si impara.... ;-)
Roberto , non finiro' mai di ringraziarti !
ciao a presto.