Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 14:36 Der 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 :)
Avatar billede runesoft Nybegynder
02. maj 2002 - 14:40 #1
jeg mener helt bestemt ikke at du skal have * med i en delete.

sSQL = "DELETE FROM tblTraeningstider WHERE TraeningsID = TraeningsID"
s1SQL = "DELETE FROM tblTraeningUdrullet WHERE TraeningsIDRef = TraeningsID"
Avatar billede teamdev Novice
02. maj 2002 - 14:44 #2
Prøv følgende:

sSQL = "DELETE * FROM tblTraeningstider WHERE TraeningsID = '" & TraeningsID &"'"
    s1SQL = "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = '" & TraeningsID &"'"
Avatar billede teamdev Novice
02. maj 2002 - 14:47 #3
// runesoft
Jo der skal da en * med :-)
Avatar billede runesoft Nybegynder
02. maj 2002 - 14:49 #4
nej, ingen *
Avatar billede runesoft Nybegynder
02. maj 2002 - 14:50 #5
læg mærke til at det ikke er felter man sletter, men poster i databasen. * giver ingen mening.
Avatar billede terry Ekspert
02. maj 2002 - 14:53 #6
Susanne I can take another look if you sent it to terry@santhell.dk

It has worked but I dont know if youi have changed anything!
Avatar billede hansk Nybegynder
02. maj 2002 - 14:56 #7
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.
Avatar billede teamdev Novice
02. maj 2002 - 14:57 #8
// runesoft

Jeg har en lille e-shop. Når kunden kommer til nestillingssiden kan han/hun vælge at fortryde en eller flere varer. min sql streng ser således ud:

SQL= "delete * FROM tbl_cart Where EDBnr ='" & EDBnr & "' AND SessionID = '"& sessionen &"'"

og det virker upåklageligt :-)
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:06 #9
> runesoft jo jeg mener da at jeg skal have * med i sletningen. Plejer at fungere :)

>teamdev "' skal det ikke kun med hvis der er tale om et tekstfelt?? Prøver lige alligevel :)

>terry yes it works fine on another form - but not on this one :(
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:08 #10
> 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 ;-)
Avatar billede terry Ekspert
02. maj 2002 - 15:10 #11
Susanne REMEMBER you have to delete the many side BEFORE the one side :o)
Avatar billede terry Ekspert
02. maj 2002 - 15:11 #12
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
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:11 #13
>teamdev

skriver jeg
s1SQL = "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = '"TraeningsID &'"

får jeg en compile-error :(
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:15 #14
> terry
jep forsøger at slette på mangesiden først men duer ikke - tblTraningUdrullet er på mange-siden

og den forsøger jeg at køre først vha

CurrentDb.Execute s1SQL 'og derefter slettes data på hovedformular
CurrentDb.Execute sSQL ' eller i hvert fald i teorien :)
Avatar billede terry Ekspert
02. maj 2002 - 15:17 #15
Try
Docmd.runsql s1SQL
Docmd.runsql sSQL

you will get warnings before deleting IF all goes well we can look at that aferwards when it is working.
Or you can send it to me!
Avatar billede teamdev Novice
02. maj 2002 - 15:21 #16
Du mangler et &

s1SQL = "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = '"& TraeningsID &'"
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:24 #17
> terry
warnings YES 2
Virker fint på tblTraeningUdrullet MEN nu slettes ALLE poster på tblTraening og ikke kun den valgte record - strange
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:26 #18
>teamdev
my mistake - havde skrevet forkert i min kommentar - men jeg har nu & med - får stadig compile-error
Avatar billede runesoft Nybegynder
02. maj 2002 - 15:33 #19
er dit TraeningsIDRef virkeligt en streng?
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:33 #20
> terry
I gladly accept your offer - apparently I´ve gotten lost in the forest again :)
Avatar billede terry Ekspert
02. maj 2002 - 15:33 #21
sSQL = "DELETE * FROM tblTraeningstider WHERE TraeningsID = '" & TraeningsID & "'"
s1SQL = "DELETE * FROM tblTraeningUdrullet WHERE TraeningsIDRef = '" & TraeningsID & "'"

Going blind here :o)
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:46 #22
> terry
nope doesnt work either :(

Får nu fejlen
"RuntimeError 3464. Datatyperne stemmer ikke overens i kriterieudtrykket"

Men på den anden side nu får jeg et højere tal på RuntimeError - er i det mindste ikke den samme fejl - lol
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 15:52 #23
>runesoft
ja jeg mener absolut at TraeningsIDRef må være en steng

Har du andre forslag????
Avatar billede terry Ekspert
02. maj 2002 - 16:04 #24
susanne>I will take a look if you send the dB terry@santhell.dk
Avatar billede terry Ekspert
02. maj 2002 - 16:15 #25
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
   
    'DoCmd.RunSQL s1SQL
    'DoCmd.RunSQL sSQL
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 16:36 #26
>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 :)

Thanx again Terry - I knew U could do it :)
Avatar billede terry Ekspert
02. maj 2002 - 17:30 #27
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 & "'"

hope that helps :o)
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 18:26 #28
>terry
mhh ok - I Think I´m beginning see how to locate the right tree in the forrest

Thanx :)
Avatar billede susanne_larsen Nybegynder
02. maj 2002 - 18:32 #29
>terry
and yes U are right I do have a P-key named InstruktoerID where the value is text not number :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester