08. juli 2003 - 19:05Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
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"
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.
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?
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)
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) ;-)
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
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.
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.
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.
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
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 ;-(
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
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"
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)
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.