02. maj 2002 - 14:36Der er
28 kommentarer og 1 løsning
Sletning af post på formular med tilhørende underformular
Jeg ønsker at kunne slette en record (på hovedformular) med tilhørende records (på underformular)
De data der skal slettes ligger i flg. 2 tabeller tblTraeningstider og tblTraeningUdrullet. Det der binder de 2 tabeller sammen er TraeningsID (autonr felt - langt heltal) på tblTraening og TraeningsIDRef (talfelt - langt heltal) på tblTraeningUdrullet.
Min kode ser således ud: _____________________________________________ Private Sub cmdSletValgtePeriode_Click() ' sletter valgte periode og de registrerede data på underformularen
Dim intSvar As Integer Dim sSQL As String Dim s1SQL As String
'Spørg brugeren om poster virkelig skal slettes intSvar = MsgBox("Er du sikker på at du vil slette den indberettede periode" + vbLf + "og ALLE de tilhørende udrullede tider ?? " + vbLf + vbLf + "Det er ikke muligt at fortryde din handling!", vbYesNo + vbExclamation, "Bekræft sletning!")
'Hvis bruger fortryder, forlad procedure If intSvar = vbNo Then Exit Sub
'Her koden som sletter den aktuelle post og tilhørende på Uformular sSQL = "DELETE * FROM tblTraeningstider WHERE TraeningsID = TraeningsID" s1SQL = "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = TraeningsID"
'Udfør sletteforespørgslen ( !!!!! records i tblTraeningUdrullet slettes først !!!!! ellers er der moderløse poster) CurrentDb.Execute s1SQL CurrentDb.Execute sSQL
'Sørg for at formularen viser de sidste nye informationer, og dermed også fjerner den slettede post Me.Requery
Exit Sub
End Sub ___________________________________________
Men der er et eller andet galt da jeg får flg fejl
"RunTime Error 3061. Der er for få parametre der var ventet 1."
Debuggeren stopper ved "CurrentDb.Execute s1SQL"
Hvad gør jeg forkert???
Mener jeg har det med der skal til - men jeg har jo overset et eller andet - men hvad :)
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
Hvis du opretter en relation mellem de to tabeller kan du bede access om at foretage en "Cascade delete related records". Så slipper du for det andet SQL statement og du er sikker på at tingene bliver korrekte.
> hansk Kender godt kaskadevis sletning - men den er jeg IKKE meget for at bruge :) Kan medføre ret uheldige sletninger - især hvis bruger ikke kender noget til db - så den vil jeg helst ikke bruge ;-)
something else! If you have your referential integrity and all that in place then you can use delete cascade events. This will mean that if you delete the ONE side then the MANY will get delete automatically
You have changed your ID to numbers now I can see. NOTE I have also comment out Docmd.runsql ..
mvh Terry
sSQL = "DELETE * FROM tblTraeningstider WHERE TraeningsID = " & TraeningsID s1SQL = "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = " & TraeningsID
'Udfør sletteforespørgslen ( !!!!! records i tblTraeningUdrullet slettes først !!!!! ellers er der moderløse poster) CurrentDb.Execute s1SQL CurrentDb.Execute sSQL
>terry U write that I have changed my ID numbers ?????? The numbers on tblTraeningsTider and tblTraeningUdrullet have always been numbers??? Never mind :)
OK - her koden fra Terry der VIRKER :-) _____________________________________________ Private Sub cmdSletValgtePeriode_Click() ' sletter valgte periode og de registrerede data på underformularen
Dim intSvar As Integer Dim sSQL As String Dim s1SQL As String
'Spørg bruger om poster virkelig skal slette intSvar = MsgBox("Er du sikker på at du vil slette den indberettede periode" + vbLf + "og ALLE de tilhørende udrullede tider ?? " + vbLf + vbLf + "Det er ikke muligt at fortryde din handling!", vbYesNo + vbExclamation, "Bekræft sletning!")
'Hvis bruger fortryder, forlad procedure If intSvar = vbNo Then Exit Sub
'Her koden som sletter den aktuelle post og tilhørede på Uformular sSQL = "DELETE * FROM tblTraeningstider WHERE TraeningsID = " & TraeningsID s1SQL = "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = " & TraeningsID
'Udfør sletteforespørgslen ( !!!!! records i tblTraeningUdrullet slettes først !!!!! ellers er der moderløse poster) CurrentDb.Execute s1SQL CurrentDb.Execute sSQL
'Sørg for at formularen viser de sidste nye informationer, og dermed også fjerner den slettede post Me.Requery
Exit Sub
End Sub _____________________________________________________________
mhh har seriøst problemer med hvornår der skan anvendes "& og hvornår det kan udelades :)
I thought for some reason that the ID was a text, perhaps it was on eof the other tables.
When to use & think of it this way! If the field (name) is inside "" then it just is part of a string value. But you wnat the VALUE of TraeningsID inside the string
This is just one long string. "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = TraeningsID"
So doing this "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = " & TraeningsID
should END UP looking like this "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = 2"
You have to concatenate the value of TraeningsID which is done
"DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = " & TraeningsID and if TraeningsID was a string it would look like
"DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = '" & TraeningsID & "'"
>terry and yes U are right I do have a P-key named InstruktoerID where the value is text not number :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.