Newsgroup: it.comp.appl.access
Titolo: Copia record da tabelle uno-molti-molti a tabelle uno-molti-molti

>>> CODICE <<<<
 
In un modulo ho inserito il seguente codice:
 
Public Sub InserisciNuovaPraticaDaModello(IDMod As Long)
On Error GoTo GestioneErrori
Dim sqlPratiche As String
Dim sqlPraA As String
Dim sqlPraB As String
Dim sqlPraBB As String
Dim clienteCorrente as Long
Dim lastPra as long
 
transazioneIniziata = False
clienteCorrente = [Forms]![frm_Clienti]![IDCliente]
lastPra = UltimaPraticaInserita(clienteCorrente)
 
 
sqlPratiche = "INSERT INTO tbl_Pratiche ( IDCliente, DescrizionePra ) SELECT " & clienteCorrente & " AS Cliente, tbl_Modelli.DescrizioneMod FROM tbl_Modelli WHERE (((tbl_Modelli.IDModello)=" & IDMod & "));"
 
sqlPraA = "INSERT INTO tbl_PraA ( IDPratica, DescrizionePraA ) SELECT " & lastPra & " AS IDPra, tbl_ModA.DescrizioneModA FROM tbl_ModA WHERE (((tbl_ModA.IDModello)=" & IDMod & "));"
 
sqlPraB = "INSERT INTO tbl_PraB ( IDPratica, DescrizionePraB ) SELECT " & lastPra & " AS IDPra, tbl_ModB.DescrizioneModB FROM tbl_ModB WHERE (((tbl_ModB.IDModello)=" & IDMod & "));"
 
sqlPraBB = "??????"
 
With DBEngine.Workspaces(0)
    .BeginTrans
    transazioneIniziata = True
    .Databases(0).Execute sqlPratiche, dbFailOnError
	.Databases(0).Execute sqlPraA, dbFailOnError
	.Databases(0).Execute sqlPraB, dbFailOnError
	.Databases(0).Execute sqlPraBB, dbFailOnError '????????
    .CommitTrans
End With
 
Exit_GestioneErrori:
    Exit Sub
 
GestioneErrori:
    If transazioneIniziata = True Then
        DBEngine.Workspaces(0).Rollback
    End If
    MsgBox Err.description & " Errore n. " & Err.Number, vbCritical, "ATTENZIONE!"
    Resume Exit_GestioneErrori
 
End Sub
 
Public Function UltimaPraticaInserita(IDCliente) As Long
On Error GoTo GestioneErrori
Dim rsPratiche As DAO.Recordset
 
    Set rsPratiche = CurrentDb.OpenRecordset("SELECT tbl_PRATICHE.IDPratica, tbl_PRATICHE.IDCliente,  tbl_PRATICHE.Progressivo FROM tbl_PRATICHE WHERE (((tbl_PRATICHE.IDCliente) = " & IDCliente & ")) ORDER BY tbl_PRATICHE.Progressivo;")
    rsPratiche.MoveLast
    UltimaPraticaInseritaInPreventivo = rsPratiche!IDPratica
 
Exit_GestioneErrori:
    Exit Function
 
GestioneErrori:
    MsgBox Err.description & " Errore n. " & Err.Number, vbCritical, FormCaption & ": ATTENZIONE!"
    Resume Exit_GestioneErrori
 
End Function
 
==== DOMANDE ====
 
1) Non riesco ad immaginare la stringa SQL da passare alla variabile "sqlPraBB".
Voi cosa scrivereste? Immagino che l'approccio sia sbagliato ma non riesco a vedere la via giusta.
2) La funzione "UltimaPraticaInserita" non mi piace un gran che perchè potrebbe puntare al record sbagliato nel caso un altro utente inserisse un record mentre eseguo la procedura. Esiste una via migliore per ottenere quel valore?
 
Ovviamente grazie a chi si cimenterà nel mio problema.
 
Roberto
 
 
 
 
 

Per recuperare l'ultima pratica userei @@IDENTITY... che soprattutto in Multiutenza è più sicuro.
 
Esempio:
' ‐---‐----------------------------------
Dim tranDB As DAO.Database
    Set tranDB = CurrentDb
    tranSQL = "INSERT INTO Transactions (Password....." 'My Insert goes here
 
    dbEngine.BeginTrans
    on Error goto ERROR_INSERT:
        tranDB.Execute tranSQL, dbFailOnError
 
        Dim idRS As DAO.Recordset
        Set idRS = tranDB.OpenRecordset("SELECT @@IDENTITY AS LastID;")
        'ideally put another error trap here
        TranID = nz(idRS("LastID"),0)
    DBEngine.CommitTrans
 
   On Error resume Next
   idRS.Close
   Set idRS = Nothing
   SET tranDB = nothing
   Exit sub/Function
 
ERROR_INSERT:
    dbengine.rollback
    'and  other stuffs or resume to exit label
' ‐---‐----------------------------------
 
Per inserire i dati in BB, se non ho frainteso, devi sapere il valore della FK nella tabella lato 1(B) ed il metodo è sempre quello sopra...
 
@Alex


@Alex, intanto grazie per la celere risposta.
Forse c'è un malinteso di fondo non banale: il BE è un file Access quindi Jet.
Potresti riscrivere il tutto usando DAO?
 
Riguardo l'inserimento dai dati in BB hai capito correttamente.

Malinteso...? quel codice è DAO per JET sei sicuro di averlo guardato...?
 
Mah...
 
@Alex