Buongiorno a tutti e Buon Natale,
Nel mio database, sto lavorando sulla maschera frmNuovoProdotto.
Nella maschera vengono inseriti i vari dati relativi al prodotto. Al click del pulsante "Salva", l'idea è quella di far gestire il salvataggio dei relativi dati da una transazione, visto che bisogna agire su varie tabelle (tabProdotti e tabPrezzi).
In sostanza prima verifico che siano stati immessi tutti i dati (attraverso la funzione Verifica) e poi inserisco i nuovi record nelle tabelle.
Ecco il codice:
Private Sub cmdSalva_Click()
DAO.DBEngine.BeginTrans
On Error GoTo tran_Err
'Verifica che la maschera sia compilata interamente
Dim maschera As Form
Set maschera = Me
Verifica (maschera.Name)
'Se la categoria prodotto è "Prestazioni"
If Me.cboIDCategoriaProdotto = 2 Then
'Se non ci sono già prezzi registrati
If DCount("IDPrezzo", "qryVerificaEsistenzaProdotto", "Descrizione = " & "'" & Me.Descrizione & "'" & " AND IDListino = 2") = 0 Then
Dim strSQL1 As String
Dim strSQL2 As String
Set dbs = CurrentDb
'Compila le tabelle
strSQL1 = "INSERT INTO tabProdotti (IDProdotto, IDSottocategoriaProdotto,IDTipoIva, IDProduttore, Descrizione)" & _
"VALUES (" & Me.IDProdotto & "," & Me.cboIDSottocategoriaProdotto & "," & Me.IDTipoIva & "," & Me.cboIDProduttore & ", '" & Me.Descrizione & "')"
dbs.Execute strSQL1, dbFailOnError
strSQL2 = "INSERT INTO tabPrezzi (IDProdotto, IDListino, PrezzoUnitario , DataInizioValidita, DataFineValidita )" & _
"VALUES (" & Me.txtIDProdotto & ", 2," & Me.txtPrezzoVenditaEff & "," & Str(CDbl(Me.txtDataInizioValidita)) & ", #31/12/9999#);"
dbs.Execute strSQL2, dbFailOnError
MsgBox "Prodotto registrato con successo", vbOKOnly, " Nuovo Prodotto"
Else
MsgBox ("Esiste già un prezzo per questo prodotto")
End If
'Per le altre categorie
Else
'Se non ci sono già prezzi registrati
If DCount("IDPrezzo", "qryVerificaEsistenzaProdotto", "Descrizione = '" & Me.Descrizione & "' AND IDListino = 1") = 0 Then
Dim strSQL1 As String
Dim strSQL2 As String
Dim strSQL3 As String
Set dbs = CurrentDb
'Compila la tabelle
strSQL1 = "INSERT INTO tabProdotti (IDProdotto, IDSottocategoriaProdotto,IDTipoIva, IDProduttore, Descrizione)" & _
"VALUES (" & Me.IDProdotto & "," & Me.cboIDSottocategoriaProdotto & "," & Me.IDTipoIva & "," & Me.cboIDProduttore & ", '" & Me.Descrizione & "')"
dbs.Execute strSQL1, dbFailOnError
strSQL2 = "INSERT INTO tabPrezzi (IDProdotto, IDListino, PrezzoUnitario , DataInizioValidita, DataFineValidita )" & _
"VALUES (" & Me.txtIDProdotto & ", 1," & Me.txtPrezzoAcq & "," & Str(CDbl(Me.txtDataInizioValidita)) & ", #31/12/9999#);"
dbs.Execute strSQL2, dbFailOnError
strSQL3 = "INSERT INTO tabPrezzi (IDProdotto, IDListino, PrezzoUnitario , DataInizioValidita, DataFineValidita )" & _
"VALUES (" & Me.txtIDProdotto & ", 2," & Me.txtPrezzoVenditaEff & "," & Str(CDbl(Me.txtDataInizioValidita)) & ", #31/12/9999#);"
dbs.Execute strSQL3, dbFailOnError
MsgBox "Prodotto registrato con successo", vbOKOnly, "Nuovo Prodotto"
Else
MsgBox ("Esiste già un prezzo per questo prodotto")
End If
End If
DAO.DBEngine.CommitTrans
tran_Err:
DAO.DBEngine.Rollback
DoCmd.RunCommand acCmdUndo
MsgBox "Transaction failed. Error: " & Err.Description
End Sub
La transazione funziona, nel senso che i record vengono correttamente salvati, ma ottengo poi un errore del tipo Errore transazione 3034 si è tentato di eseguire il commit o il rollback di una transazione senza prima iniziarla.
Dopo di questo non riesco più ad apportare modifiche al database. Visualizzo in effetti un altro errore del tipo "Non si dispone di accesso esclusivo al database in questo momento. Le modifiche apportate potrebbero andare perdute.
In rete non ho trovato molte informazioni a riguardo, vorrei sapere cosa ne pensate.
Grazie mille!