....måske problem med transaction :[
i forlængelse af http://www.eksperten.dk/spm/325592 har jeg rodet mig ud i en underlig sagFlg kode burde fungere fint
Private Sub cmdArkiverPC_Click()
On Error GoTo Err_Handler
Dim ws As DAO.Workspace 'Nuværende arbejdsområde der kræver transaction
Dim db As DAO.Database 'Inde i transaction.
Dim bInTrans As Boolean 'Flag transaction er aktiv
Dim intSvar As Integer
Dim sSQL As String
Dim s1SQL As String
Dim s2SQL As String
Dim s3SQL As String
Dim s4SQL As String
Dim s5SQL As String
Dim sSQLfjern As String ' bruges til at slette evt. gl. record inden ny sættes ind i tblPCinfoARKIV
'Initialiser databaseobjekt inde i transaction
Set ws = DBEngine(0)
ws.BeginTrans
bInTrans = True
Set db = ws(0)
intSvar = MsgBox("Er du sikker på at du vil arkivere data på PCén" + vbLf + Me.PCnavn + " ?" + vbLf + vbLf + "Du skal kun vælge at arkivere data, hvis PCén f.eks. ikke længere er " + vbLf + "oprettet i ODK´s netværk, eller hvis den får et andet navn." + vbLf + vbLf + "Data på PCén vil blive slettet fra denne formular!" + vbLf + vbLf + "OBS husk at overføre evt. special licenser til formularen Licenoversigt !!", vbOKCancel + vbExclamation, "Bekræft arkivereing af PCdata!")
If intSvar = vbOK Then
ws.CommitTrans
bInTrans = False
End If
'*****Sletter evt. gammel record i tblPCInfoARKIV
sSQLfjern = "DELETE * FROM tblPCinfoARKIV WHERE PCnavn = '" & PCnavn & "'"
sSQL = "DELETE * FROM tblPCinfo WHERE PCnavn = '" & PCnavn & "'"
s1SQL = "DELETE * FROM tblOversigt WHERE PCnavnRef = '" & PCnavn & "'"
s2SQL = "INSERT INTO tblPCinfoARKIV SELECT* FROM tblPCinfo WHERE PCnavn= '" & PCnavn & "'"
s3SQL = "DELETE * FROM tblPClicenser WHERE PCnavnRef = '" & PCnavn & "'"
'*******Sletter evt. registreringer i reetableringstabellen **********
s4SQL = "DELETE * FROM tblPCReetablering WHERE PCnavnRef = '" & PCnavn & "'"
CurrentDb.Execute sSQLfjern, dbFailOnError ' slet evt. gl. record
CurrentDb.Execute s2SQL, dbFailOnError ' indsæt ny record i tblPCinfoARKIV
CurrentDb.Execute s1SQL, dbFailOnError ' slet record fra tblOversigt
CurrentDb.Execute s3SQL, dbFailOnError ' slet record fra tblPClicenser
CurrentDb.Execute s4SQL, dbFailOnError ' slet record fra tblPCReetablering
CurrentDb.Execute sSQL, dbFailOnError ' slet record fra tblPCinfo
'sørg for at formularen viser de nye informationer, og dermed fjerner den slettede
Me.Requery
Exit Sub
Exit_Err_Handler:
' her ryddes op
On Error Resume Next
Set db = Nothing
' Foretag Rollback hvis transaction er aktiv
If bInTrans Then
ws.Rollback
End If
Set ws = Nothing
Exit Sub
Err_Handler:
' hvis arkivering ikke er mulig vis fejlmeddelelse
MsgBox Err.Description, vbExclamation, "Arkivering ikke mulig: Fejl " & Err.Number
Resume Exit_Err_Handler
End Sub
Mit problem er som følger:
Har jeg fx en record med navnet Y i tblPCinfoARKIV og ønsker at arkivere en record med samme navn, kan koden ikke altid afvikles. Jeg får ingen fejlmeddelelse og der sker intet. MEN hvis jeg så vælger at lukke min dB og afslutter Access. Stater basen op igen og forsøger igen så er der ingen problemer. Alt fungerer som det skal og al kode virker.
Hvad pokker er der nu galt ???
