Avatar billede Slettet bruger
14. februar 2005 - 11:47 Der er 30 kommentarer og
1 løsning

Er tilføjelsesforespørgslen allerede kørt?

Hvis jeg nu har en tilføjelsesforespørgsel, som bliver oprettet ud fra årstal og uge, hvordan tjekker jeg så om denne allerede er kørt? Jeg skal jo have en meddelsesboks ind, hvis det er tilfældet.
Avatar billede mugs Novice
14. februar 2005 - 12:03 #1
docmd.openquery "Forespørgslens navn"
Msgbox "Udført"
14. februar 2005 - 12:04 #2
hmm, det er meget svært at svare på, da der er mange muligheder, afhængigt af dit system.

Men én måde, er jo at kontollere om de poster, som du vil tilføje, allerede er oprettet i den anden tabel.

Hvis du har defineret, at uge og år skal være unikt i tabellen, så er problemet løst af sig selv, idet du så ikke kan oprette pposterne 2 gange. Er det en mulighed?
Avatar billede Slettet bruger
14. februar 2005 - 12:20 #3
tj>nej!~(
mugs>jeg er ikke sikker på, at du læst spørgsmålet rigtigt...
Avatar billede mugs Novice
14. februar 2005 - 12:24 #4
spg > Muligt.

Men uanset hvad, så vil msgbox fremkomme når forespørgslen er kørt, og det er så ligegyldigt om der er tilføjet poster eller ej. Sådan læste jeg spørgsmålet.

Men hvad er det du vil kontrollere? Hvis du vil checke hvor mange poster der er tilføjet kan du jo anvende Dcount funktionen både før og efter forespørgslen er kørt, og så blot subtrahere disse 2 variabler til slut.
14. februar 2005 - 12:32 #5
spg->havde du ikke mulighed for at kontrollere om nogle af de poster, som skal tilføjes, allerede LIGGER i tabellen?
Det er den sikreste måde.

Er det en tilføjelsesforespørgsel, som kun skal køres ÉN gang og så aldrig mere? Eller skal den køres flere gange - evt med forskellige data?

Hvis det f.eks er nogle data som blot skal tilføjes ved opstart én gang og så aldrig mere (f.eks. ved distribution af ny frontend), så kan du skrive en lille notat herom i registeringsdatabasen. På den måde kan du undgå at køre den igen.

Eller der er den frække måde, hvor du simpelthen slette forespørgslen, når den er kørt første gang. Derved kan den jo ikke køres igen :o)

Sig til, hvis én af ovenstående løsninger skal uddybes...
Avatar billede Slettet bruger
14. februar 2005 - 12:42 #6
tj> hvordan tjekker jeg om årstal og uge findes i tabellen? Jeg kører nemlig kun tilføjelsen en gang om ugen og aldrig den samme uge (indenfor et år). Jeg kan ikke slette forespørgslen først fordi der kan være skrevet yderligere i tabellen.
14. februar 2005 - 12:44 #7
Du kan checke det med denne sætning:

If Dcount("*", "Din tabel", "Årstal = Year(Date()) And Uge = " & Format(Date, "ww",vbUseSystemDayOfWeek,vbUseSystem)) = 0 then
    docmd.Openquery "Din forespørgsel"
else
    msgbox "Forespørgslen er allerede kørt en gang i denne uge!", vbinformation
endif
Avatar billede Slettet bruger
14. februar 2005 - 12:46 #8
jeg prøver!~)
Avatar billede Slettet bruger
14. februar 2005 - 13:00 #9
Mit tilfælde er lidt anderledes, her indtastes et år og en uge, som tal. Dvs. det skal ca. se sådan ud:

If DCount("*", "Bemandingsplan", Aar = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![aar] And Uge = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![uge] = 0 Then

Men hvordan skal det helt præcist se ud?
14. februar 2005 - 13:03 #10
If DCount("*", "Bemandingsplan", "Aar = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![aar] And Uge = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![uge]") = 0 Then
Avatar billede Slettet bruger
14. februar 2005 - 13:07 #11
Du har annuleret den forrige handling???

Private Sub OpretBemandingsuge_Click()
If IsNull(Me.Uge) Or IsNull(Me.Aar) Then
MsgBox "Der skal indtastes den pågældende uge og et årstal"
Else
    If DCount("*", "Bemandingsplan", "Aar = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![aar] And Uge = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![uge]") = 0 Then
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "TilfojTilListe"
        DoCmd.OpenQuery "OpretUge"
        DoCmd.SetWarnings True
        DoCmd.RunCommand acCmdRefreshPage
        MsgBox "Bemandingsplan for uge " & [Uge] & ", " & [Aar] & "  er oprettet"
    Else
    MsgBox "Forespørgslen er allerede kørt en gang for denne uge!"
    End If
End If
End Sub
14. februar 2005 - 13:11 #12
Prøv at fjerne DoCmd.SetWarnings False for at se om den får lov at køre forespørgslerne.

Når fejlen kommer, så prøv at trykke Debug og se hvilken linie, fejlen opstår i.
Avatar billede Slettet bruger
14. februar 2005 - 13:14 #13
debuggen standser ved dcount
Avatar billede Slettet bruger
14. februar 2005 - 13:26 #14
Det hjælper ikke at fjerne DoCmd.SetWarnings False
Avatar billede Slettet bruger
14. februar 2005 - 13:39 #15
Også når jeg fjerner alt andet, så kører den stadig ikke. Den stopper ved dcount med "Du har annuleret den forrige handling, runtime error '2001'"
Avatar billede kjulius Novice
14. februar 2005 - 22:25 #16
Ikke sikker, men ku' godt være, det i stedet skulle være:

    If DCount("*", "Bemandingsplan", "Aar = " & [forms]![fanebladbemandingsplan]![bemandingsunderformular]![aar] & " And Uge = " & [forms]![fanebladbemandingsplan]![bemandingsunderformular]![uge]) = 0 Then

thomasjepsen plejer dog at have rigtig godt styr på det, så det kan selvfølgelig være noget helt andet...
14. februar 2005 - 22:34 #17
Hej KJulius,

Din syntaks duer også. Men så længe der benyttes den fulde reference til objektet (som her), så kan det hele indlejres i strengen. det har den fordel, at man ikke behøver at tage hensyn til datatypen.
Hvis f.eks. Aar var af datatypen tekst, så skulle din syntaks jo laves om. Det er ikke nødvendigt med min.

Fordelen er endnu mere udtalt, hvis det drejede sig om dato-typer. VB har jo store problemer med datoer, da den har det med at by

Men det er godt nok en underlig fejlmeddelelse, der kommer.

spg-> Prøv lige at gør sætningen helt simpel:

If DCount("*", "Bemandingsplan", "Aar = 2005 And Uge = 6") = 0 Then

Går det bedre?
Avatar billede kjulius Novice
14. februar 2005 - 23:26 #18
Hej thomasjepsen

Okay, der lærte jeg så noget nyt. Jeg tænkte jo nok, at theSource ville have styr på det. :-)
14. februar 2005 - 23:29 #19
"theSource", haha, den havde jeg sgu ikke hørt før :o)

Men jeg er skam bare en "samler", ja næsten en "klunser" ;o)
Avatar billede Slettet bruger
15. februar 2005 - 08:03 #20
22:34:08> Det virker!~)
Avatar billede Slettet bruger
15. februar 2005 - 08:12 #21
Dette virker:

If DCount("*", "Bemandingsplan", "Aar = [aar] And Uge = [uge]") = 0 Then

MEN lige meget hvilken uge jeg vælger kommer samme msgbox:
"Forespørgslen er allerede kørt en gang for denne uge!"
Hvilket IKKE passer!~(
Avatar billede mugs Novice
15. februar 2005 - 08:16 #22
Jeg har ikke nærlæst foregående indlæg, men prøv denne, blot for at se hvad den tæller:

Msgbox DCount("*", "Bemandingsplan", "Aar = [aar] And Uge = [uge]")
15. februar 2005 - 08:16 #23
hmm, har du kigget i tabellen og sikret dig, at der ikke findes en post, hvor Aar og Uge er lig de angivne værdier? (Prøv evt at lave en forespørgsel, hvor du indsætter kriterierne.)

Du er også velkommen til at sende databasen til mig. Det begynder at blive svært at fejlfinde på denne måde ;)
Avatar billede Slettet bruger
15. februar 2005 - 08:26 #24
mugs>den talte 324 hvilket er alle poster i tabellen?
Avatar billede Slettet bruger
15. februar 2005 - 08:29 #25
[aar] og [uge] henviser sikkert til tabellen og ikke til de indtastningsfelter jeg har i formularen.
Avatar billede Slettet bruger
15. februar 2005 - 08:32 #26
Hver gang jeg henviser til indtastningsfelterne så kommer meddelsen:
Du har annuleret den forrige handling
15. februar 2005 - 08:36 #27
Men denne syntaks er også forkert:

Msgbox DCount("*", "Bemandingsplan", "Aar = [aar] And Uge = [uge]")

Den siger bare, at 2005 = 2005, hvilket altid gælder.

Du skal enten bruge den lange:

If DCount("*", "Bemandingsplan", "Aar = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![aar] And Uge = [forms]![fanebladbemandingsplan]![bemandingsunderformular]![uge]") = 0 Then

Eller den korte:

If DCount("*", "Bemandingsplan", "Aar = " & Me![aar] & " And Uge = " & Me![uge]) = 0 Then
15. februar 2005 - 08:37 #28
Den sidste er muligvis også forkert, afhængigt af om du kører koden fra din underformular eller fra hovedformularen.
15. februar 2005 - 08:40 #29
Og hvis den lange ikke virker, så må fejlen ligge i referencen.

Så kan det være dit underformular-objekt, som er navngivet forkert. I stedet for "bemandingsunderformular", kan det hedde noget andet. Det er nemlig ikke altid, at underfomrular-objektet hedder det samme som formularen gør i database-vinduet.

Kig på underformular-objektets egenskab "Navn" for at finde ud af hvad der skal refereres til.
Avatar billede Slettet bruger
15. februar 2005 - 08:53 #30
Fejlen lå i referencen!~)
Tak gutter og undskyld rodet...
15. februar 2005 - 08:54 #31
Selv tak - det er jo derfor, vi er her :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