Avatar billede j-kid Praktikant
07. april 2008 - 10:13 Der er 22 kommentarer og
1 løsning

Opdaterbar forespørgsel

Hej

Får fejlmeddelelsen "Forespørgslen skal være en opdaterbar forespørgsel".

Jeg har en database med diverse tabeller. Den ene indeholder en masse registeringer. Det er IND/UD scanning af noget emballage. Vil godt lave en forespørgsel der sætter denne emballage til at være skrottet hvis status er IND og seneste registrering er ældre end 45 dage.
Jeg har lavet en "Opdateringsforespørgsel" men får ovenstående fejl.
Hvad går galt? Det er en tjekboks i en tabel der skal sættes til sand i stedet for falsk.
Avatar billede mugs Novice
07. april 2008 - 10:16 #1
Åbn din forespørgsel og kontroller, iom du kan rette / oprette poster. Hvis ikke, er det sandsynligvis dine relationer der er forkerte.
Avatar billede j-kid Praktikant
07. april 2008 - 13:55 #2
Det kan jeg ikke. Hvad kan der være af muligheder omkring relationerne?
Avatar billede mugs Novice
07. april 2008 - 14:07 #3
Det er svært at sige, da der kan være flere muligheder. Prøv om du kan ændre relationerne i forespørgslen.
Avatar billede j-kid Praktikant
07. april 2008 - 15:00 #4
Der er tale om en større database og jeg har ikke ordentligt styr på relationer. Jeg er derfor bange for at komme til at blokere for et eller andet ved at ændre i relationerne.
De relationer du mener er selve relationerne imellem tabellerne ikke? Integritet, osv. Findes der ikke nogle generelle guidelines på dette område? Synes hjælp-funktionen er meget overfladisk. Den skriver bare at forespørgslen skal være opdaterbar, hvilket ikke løser det store.
Avatar billede mugs Novice
07. april 2008 - 15:25 #5
Avatar billede j-kid Praktikant
08. april 2008 - 08:43 #6
Jo. Den er jeg med på. Jeg er bare bange for at ændre i noget jeg efterfølgende ikke har overblik over konsekvenserne af. Det kan se rigtigt ud, men når først databasen er sat tilbage i drift, kan der være ting, jeg ikke har opdaget.
Jeg har kort skimmet dine links igennem. Kan fornemme at du mener, at det har noget med normalisering at gøre. Det er muligt, at det er her problemet ligger. Som jeg skrev, er det en større database, som vi har haft en IT-virksomhed til at udvikle. Jeg tvivler defor på, at det er relationerne den er gal med. Selvfølgelig findes der også dårlige IT-konsulenter.
Da jeg oprettede spørgsmålet havde jeg en idé om, at det måske kunne være fordi, at der indgik en beregning i forespørgslen, at den ikke virkede. Havde håbet det var noget, der var et hurtigt svar til. Tror jeg vil lade vores IT-konsulenter komme med deres besyv.
Avatar billede mugs Novice
08. april 2008 - 08:53 #7
Prøv at åbne forespørgslen og se, om der ligger en opsummering af nogle poster. Hvis der gør, er opsummeringen jo en samling af poster der betyder, at Access ikke "ved" hvilken post du vil ændre, og derfor kan forespørgslen ikke ændre poster.
Avatar billede j-kid Praktikant
08. april 2008 - 09:57 #8
Prøver at forklare det lidt mere teknisk.

Der indgår 2 tabeller og 1 forespørgsel i opdateringsforespørgslen.

Registreringstabellens poster er bl.a. emballagenr., tidspunkt for registrering, IND/UD, ordrenr.
Emballagetabellen indeholder bl.a. emballagenr. (nøgle), type, aktiv/ikke aktiv.
Forespørgslen indholder emballagenr. samt maks tidspunkt for registrering på emballagenr. Dvs. at forespørgslen finder den sidste nye registrering på det specifikke emballagenr.

Opdateringsforespørgslen er herefter bygget op således. Forespørgslen udvælger seneste registrering på emballagen. Aktiv/ikke aktiv sættes til falsk. Dvs. at kun aktive emballager medtages. IND/UD sættes til "IND". Jeg ønsker at finde de emballager, der pt. har status IND. Maks tidspunkt sættes til < date() - 45.
Den post der ud fra ovenstående kriterier skal opdateres er aktiv/ikke aktiv. Den skal sætte de fundne poster til ikke aktiv = en tjekboks der sættes til sand. Giver det mening eller er jeg helt i hegnet?
Avatar billede mugs Novice
08. april 2008 - 10:21 #9
Ud fra det du skriver, er der ikke noget der tyder på nogle beregninger, så det må være relationerne. Men det er sværst at give et bud på, hvad der kan være galt. Du kan evt, tage en kopi af objekterne og lege med dem eller en kopi af hele db.

Du skriver, at db er stor. Prøv evt. i funktioner i databasefunktioner > Reparer og komprimer. Derefter checker du størrelsen igen.
Avatar billede j-kid Praktikant
08. april 2008 - 10:55 #10
Den blev 4-5 mb mindre. Nu er den på 14 mb. Fejlen er dog stadig den samme.
Du skriver at jeg kan lege lidt med objekterne. Min viden er simpelthen for ringe til bare lige at gøre dette. Jeg vil ikke vide hvilke parametre jeg kan lege med. Nålen og høstakken du ved.
Avatar billede j-kid Praktikant
08. april 2008 - 11:26 #11
Har en idé. Hvis jeg i forespørgslen kan udvælge maks registreringstidspunkt under hensyntagen til at dette er en IND registrering kan jeg slippe for at medtage registreringstabellen i opdateringsforespørgslen. Har en idé om at det er her det går galt nemlig.
Hvis jeg sætter kriteriet i forespørgslen til at IND/UD skal være IND finder den jo bare maks tidspunkt for seneste IND. Det jeg vil finde er maks tidspunkt HVIS det er IND. Kan det forstås?
Avatar billede mugs Novice
08. april 2008 - 12:25 #12
Du kan åbne db i databasevinduet og vælge fanen Forespørgsler. Marker den forespørgsel du vil "lege" med og kopier den. DErefter kan du gøre med den som du vil og slertte den bagefter.
Avatar billede j-kid Praktikant
08. april 2008 - 13:37 #13
Har fundet ud af at så snart jeg blander forespørgslen med MaksOfSidsteRegistrering ind i billedet, så kan jeg ikke ændre i posterne. Jeg har afprøvet relationen imellem tabellen med emballagen og forespørgsel med alle 3 muligheder, men intet hjælper.
Avatar billede mugs Novice
08. april 2008 - 13:45 #14
MaksOfSidsteRegistrering er en beregning der ligger i menuen Vis > Totaler. Så kommer der en linie mere i forespørgslen hvor du kan vælge Maks.

En sådan forespørgsel kan IKKE redigeres, som jeg tidliogere har omtalt. Det kan simpelthen ikke lade sig gøre. Du må finde en anden måde at foretage opdateringen på.
Avatar billede j-kid Praktikant
08. april 2008 - 14:13 #15
Ok. Forstod bare på dig, at der ikke var beregninger, der gav problemer.
Hvad er der af andre muligheder for at vælge den linie ud for hvert emballagenr. hvor registreringen er nyest?
Avatar billede mugs Novice
08. april 2008 - 14:28 #16
Beregninger behøver ikke at give problemer. Denne beregning f.eks.:

Udtryk1:[felt1]+[felt2]

betyder ikke, at forespørgslen ikke kan opdateres. Men når du bruger Vis > Totaler betyder det, at de viste poster er en samling af flere poster, og så kan du ikke redigere i posterne, for Access ved ikke hvilken post du vil opdatere.

Du kan lave en ny opdateringsdforespørgsel med kriterier:

Status skal have kriteriet Ind
Registreringen skal være < Date() - 45
Avatar billede mugs Novice
08. april 2008 - 14:29 #17
Jeg går lige ude i haven og roder lidt - Vil checke min mail regelmæssigt.
Avatar billede j-kid Praktikant
08. april 2008 - 14:55 #18
Nu skal du ikke sætte din have over styr pga. den slags småproblemer her :-)
Jeg kan godt lave opd.forespørgslen, som du beskriver. Problemet er så bare, at der på næsten alle emballagenr. er en IND registrering. Tabellen er bygget op således at ALLE registreringer gemmes. Dvs. at for hver registrering er der en linie i tabellen. Dvs. at næsten alle emballagenumre er medtaget på trods af afgrænsningerne under kriterier. Jeg skal have lavet et kriterie hvor der kun sammenlignes med den nyeste registreringsdato. Kan man skrive sig ud af dette?
Avatar billede mugs Novice
09. april 2008 - 07:43 #19
Prøv at køre denne i VBA:

DoCmd.RunSQL "Update TABEL Set FELT = NY VÆRDI Where TABEL.FELT = (Select MAX(FELT) From TABEL WHERE FELT = (SELECT MAX(FELT) From TABEL))"

Idet du retter TABEL til navnet på den tabel og FELT til navnet på det felt der skal opdateres, og NY VÆRDI til den nye værdi.
Avatar billede j-kid Praktikant
10. april 2008 - 14:28 #20
Hej igen

Har lige været optaget af andre opgaver, men er nu klar ved tasterne igen. Hvor skal jeg indsætte VBA-koden. Jeg er totalt nybegynder når det gælder VBA...
Avatar billede mugs Novice
10. april 2008 - 14:56 #21
Åbn din formular i designvisning. Tag en kommandoknap fra værktøjslinien og sæt den i formularen. Højreklik på den > Egenskaber > Fanen hændelser > Sæt markøren på linien VedKlik og tryk på de 3 små ... i højre side. Du kommer nu ind i VBA-editoren og du indsætter koden hvor markøren blinker.

Hvis du lægger din e-mail, kan jeg sende et eksempel.
Avatar billede j-kid Praktikant
10. april 2008 - 14:59 #22
Er meget taknemmelig for din hjælpsomhed.

Jeg har ikke lavet nogen formular til forespørgslen. Starter den direkte fra databasevinduet. Min mail er jebj@forum.dk.
Avatar billede mugs Novice
10. april 2008 - 15:08 #23
Sendt.
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