Avatar billede hnto Nybegynder
08. juli 2003 - 19:05 Der er 27 kommentarer og
1 løsning

opret error msg box ved fejl..hurtigt svar ønskes (access 97)

jeg har en VBA der gør nedenstående.:
Private Sub Command16_Click()
DoCmd.SetWarnings False

On Error GoTo click_Err

DoCmd.OpenQuery "update master fra form"
DoCmd.OpenQuery "update master final"
DoCmd.OpenQuery "update master final 1"
DoCmd.RunSQL "delete * from master"
DoCmd.OpenQuery "delete master final"
DoCmd.OpenQuery "delete master final 1 uden data"
DoCmd.SetWarnings True
DoCmd.Close
DoCmd.OpenForm "form1"


click_Err:
    MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
'Resume click_exit
End Sub


i min kommando DoCmd.OpenQuery "update master fra form"
appender jeg nogle records, men kun hvis ID ikke i forvejen eksisterer. Hvis den gør dette dkal jeg bare have min error msgbox vist og derefter annulere kørslen.

How ??
Avatar billede terry Ekspert
08. juli 2003 - 19:18 #1
? not quite sure what you mean!
If an error occurs then the process ends, what du you mean with "annulere kørslen"?
Avatar billede hnto Nybegynder
08. juli 2003 - 19:19 #2
annulere kørslen = exit eller goto end sub
Avatar billede terry Ekspert
08. juli 2003 - 19:27 #3
well your msgbox IS at the end of the procedure so it IS ended!

But there is an error I think!

Private Sub Command16_Click()

DoCmd.SetWarnings False

On Error GoTo click_Err

DoCmd.OpenQuery "update master fra form"
DoCmd.OpenQuery "update master final"
DoCmd.OpenQuery "update master final 1"
DoCmd.RunSQL "delete * from master"
DoCmd.OpenQuery "delete master final"
DoCmd.OpenQuery "delete master final 1 uden data"
DoCmd.SetWarnings True
DoCmd.Close
DoCmd.OpenForm "form1"


Proc_Exit:
DoCmd.SetWarnings True

exit sub

click_Err:
    MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
Resume Proc_Exit
End Sub
Avatar billede mugs Novice
08. juli 2003 - 19:28 #4
Hvad sker der hvis du bruger Exit Sub?
08. juli 2003 - 19:31 #5
Prøv denne:

Dim db as database
Set db = Currentdb
db.execute "update master fra form"
If db.recordsaffected = 0 then
  MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
  Exit sub
endif
db.execute  "update master final"
db.execute  "update master final 1"
db.execute  "delete * from master"
db.execute  "delete master final"
db.execute  "delete master final 1 uden data"

DoCmd.Close
DoCmd.OpenForm "form1"
Avatar billede terry Ekspert
08. juli 2003 - 19:32 #6
who are you asking mugs?

In the original code the procedure (maybe) exited before getting to the msgbox if everything went OK. If an error occured the procedure would end after the msgbox was displayed. Now it continues at Proc_Exit an makes sure warnings are set on again then exit sub.
Avatar billede terry Ekspert
08. juli 2003 - 19:36 #7
I think Thomas i son the right track there :o)
08. juli 2003 - 19:38 #8
Terry-> Husker jeg forkert eller vil sætningen
DoCmd.OpenQuery "update master fra form" IKKE resultere i en Error bare fordi at der er dubletter i forespørgslen?
Avatar billede terry Ekspert
08. juli 2003 - 19:41 #9
No error will occur, I think that the warnings message will tell you that it couldnt append because of duplicate keys. So recordsaffected = 0 should work :o)
Avatar billede hnto Nybegynder
08. juli 2003 - 19:44 #10
terry.
Den kører selv om der måtte ske den fejl at der ikke opdateres i alle poster fordi dette vil give dubletter. Det er her jeg skal have min msgbox ( sorry hvis jeg ikke helt forklarer mig så godt ;-)

Thomas:
din duer ikke, idet der godt kan være flere recors i tabellen hvor nogle af de appendede ikke er dubleanter. i dette tilfælde vil affected rows >0.

Mugs .
umiddelabrt ikke noget specielt. ( er ikke VBA haj....endnu) ;-)
Avatar billede hnto Nybegynder
08. juli 2003 - 19:52 #11
var det dråben jeg der serverede, eller ??

;-)
08. juli 2003 - 19:56 #12
Så prøv med:
Dim db as database
Set db = Currentdb
db.execute "update master fra form", dbfailonerror
If db.recordsaffected = 0 then
  MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
  Exit sub
endif
db.execute  "update master final",adcmdtable
db.execute  "update master final 1",adcmdtable
db.execute  "delete * from master", adcmdtext
db.execute  "delete master final",adcmdtable
db.execute  "delete master final 1 uden data",adcmdtable

DoCmd.Close
DoCmd.OpenForm "form1"
08. juli 2003 - 19:57 #13
Forklaring: Med option dbfailonerror vil forespørgslen fejle, hvis der blot er én post, som ikke bliver opdateret. Derved vil recordsaffected være 0.
Avatar billede hnto Nybegynder
08. juli 2003 - 20:00 #14
fejl
adcmdtable variable not defined..
Avatar billede mugs Novice
08. juli 2003 - 20:01 #15
hnto > (er ikke VBA haj....endnu) ;-)

Nej - Jeg kæmper en brav kamp bare for at forstå hvad de 2 herrer taler om :o)
Avatar billede hnto Nybegynder
08. juli 2003 - 20:05 #16
dette gælder også adcmdtext.

dbfailonerror er derimod ok
Avatar billede terry Ekspert
08. juli 2003 - 20:09 #17
hnto>I was wondering! You risk appending some records and then terminating without carying out other jobs! Is this really what you want?
Avatar billede hnto Nybegynder
08. juli 2003 - 20:13 #18
terry:
I første omgang ja, så må jeg efterfølgende finde metoder der lister det der ikke blev gemt. Dette kan jeg måske gøre ved først at opdatere i en temp tabel og derefter slette de records i denne der faktisk blev appended, alt efter hvordan jeg justerer thomas jepsens kode.
Avatar billede hnto Nybegynder
08. juli 2003 - 20:22 #19
jeg kører lige hjem 1 time, men håber på en løsning da den skal være i orden inden i morgen tidlig til kursus. ;-((

tjekker igen om ½-1 time ( skal lige have noget foder..)
Avatar billede terry Ekspert
08. juli 2003 - 21:28 #20
without knowing more about what is happening all I can suggest is making a "Find Duplicate Query" using the query wizard. This will find those which already exist which you can use in the following queries.
Avatar billede hnto Nybegynder
08. juli 2003 - 22:01 #21
hej igen
yes terry noget i den stil eller forinden der skrives til tabellen.

æv.. jeg havde håbet på noget nyt omkring adcmdtable, og adcmdtext fejlen

;-||
08. juli 2003 - 22:03 #22
kigger på det nu....har først lige set de nye indlæg nu.
08. juli 2003 - 22:09 #23
det er muligt at du kan undvære adcmdtable og adcmdtext:

Dim db as database
Set db = Currentdb
db.execute "update master fra form", dbfailonerror
If db.recordsaffected = 0 then
  MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
  Exit sub
endif
db.execute  "update master final"
db.execute  "update master final 1"
db.execute  "delete * from master"
db.execute  "delete master final"
db.execute  "delete master final 1 uden data"

DoCmd.Close
DoCmd.OpenForm "form1"

JEg ved bare at Access 2000 vil blive forviret over at dine forespørgselsnavne starter med f.eks. Delete. Derved kan den tro, at det er en SQL-streng, som du forsøger at skyde afsted.

Men det er ikke værre end at de sidste forespøgsler kan laves på den traditionelle måde med docmd.openquery eller docmd.runsql.
Det er blot den første, som skal benytte db.execute for at kunne bestemme om kørslen gik godt eller ej.
08. juli 2003 - 22:11 #24
Dim db as database
Set db = Currentdb
db.execute "update master fra form", dbfailonerror
If db.recordsaffected = 0 then
  MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
  Exit sub
endif
docmd.Setwarnings false
docmd.Openquery "update master final"
docmd.Openquery "update master final 1"
docmd.RunSQL "delete * from master"
docmd.Openquery "delete master final"
docmd.Openquery "delete master final 1 uden data"
docmd.Setwarnings true

DoCmd.Close
DoCmd.OpenForm "form1"
Avatar billede hnto Nybegynder
08. juli 2003 - 22:28 #25
Hej Thomas.

Som du kan se af spørgsmålet køres der her 97 ;-)

Jeg er selv ved at ændre nogle ting kommet så langt som til

db.Execute "update master fra form", dbFailOnError, hvor den så melder runtime error 3022. ganske som forventet kommer denne fejl og fortæller at der ikke appendes fordi den indeholder dublikater, MEN... den giver kun 2 options.

1 Debug, hvilket betyder at jeg bare havner i debug mode ;-(
2 End, hvilket betyder at scriptet stoppes helt ;-(

så langt så godt...
08. juli 2003 - 22:33 #26
Jeg er godt klar over, at du kører '97. Det var derfor, at jeg skrev at Access 2000 fungerede anderledes :o)

Jeg vil mene, at du bare skal ignorere den fejl - enten ved at bruge On Error Resume next eller ved at håndtere fejlen med en resume:

On Error Goto VedFejl
Dim db as database
Set db = Currentdb
db.execute "update master fra form", dbfailonerror
If db.recordsaffected = 0 then
  MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
  Exit sub
endif
docmd.Setwarnings false
docmd.Openquery "update master final"
docmd.Openquery "update master final 1"
docmd.RunSQL "delete * from master"
docmd.Openquery "delete master final"
docmd.Openquery "delete master final 1 uden data"
docmd.Setwarnings true

DoCmd.Close
DoCmd.OpenForm "form1"

Exit Sub
VedFejl:
If Err = 3022 then resume
Avatar billede hnto Nybegynder
08. juli 2003 - 22:47 #27
næsten....

du manglede lige en resume next for at det virkede + at der efter msgboxen startede et SQL updatering der slettede data, da denne ellers ikke ville blive tømt.

Takker Thomas.

Inden jeg serverer det færdige script her bedes i bemærke at jeg skrev forkert helt i starten hvad angår navnet på queryen. derfor er der her rutiner der ligger før essensen. ;-) det var bare for bøvlet at skulle sige dette efter i havde kommet med indlæg hvorfor jeg bare selv justerede efterhånden som svarene dumpede ind.

Her er scriptet så:

Private Sub Command16_Click()

On Error GoTo VedFejl

DoCmd.SetWarnings False

Dim db As Database
Set db = CurrentDb

DoCmd.OpenQuery "update master fra form"
DoCmd.OpenQuery "update master final"

db.Execute "update master final 1", dbFailOnError
If db.RecordsAffected = 0 Then
  MsgBox "der findes allerede et produkt oprettet med dette EAN nummer. Produktet registreres derfor ikke. Ret henvendelse til SSP afdelingen"
DoCmd.OpenQuery "delete master final"
  Exit Sub

End If
DoCmd.RunSQL "delete * from master"
DoCmd.OpenQuery "delete master final"
DoCmd.OpenQuery "delete master final 1 uden data"
DoCmd.Close
DoCmd.OpenForm "form1"

Exit Sub
VedFejl:
If Err = 3022 Then Resume Next

End Sub
08. juli 2003 - 22:51 #28
nå ja, selvfølgelig skulle der lige en 'Next' efter den Resume :o(
Jeg er ved at være træt....

tak for point :o)
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