Avatar billede keldo Nybegynder
16. juni 2004 - 15:24 Der er 28 kommentarer og
1 løsning

Problemer med opdatering af forespørgsel

Jeg har en forespørgsel som består at to tabeller. De er joinforbundne. Det skal fungere sådan at når jeg indtaster et fakturanummer i tabel 2 skal den finde samme faktura nr i tabel 1 og aut. udfylde resten af felterne i tabel 2 med data fra tabel 1. Det er sådan set også ok, bortset fra at den ikke gør det når jeg har tastet fakturanummeret, men først når jeg har lukket foreespørgslen. Når jeg så åbner den igen er felterne opdateret. Jeg forstår ikke hvorfor den ikke opdaterer felterne når jeg er i forespørgslen.
Jeg har en anden forespørgsel med samme princip blot andre tabeller, der virker det fint.
Hvad er galt??
16. juni 2004 - 15:38 #1
Hvorvidt Access opdatere forespørgslen og hvornår den rent faktisk gør det afhænger af flere ting; tabellernes indeksering, forespørgslens opbygning, hvorvidt tabellerne er sammenkædet eller ej m.fl.

Har du ikke lavet en formular til forespørgslen? For så kan du jo bare lave en Me.Requery på formens EfterOpdatering
Avatar billede keldo Nybegynder
16. juni 2004 - 15:59 #2
øhh,, jo jeg har lavet en formular. Det er samme problem. Derfor forsøgte jeg at finde fejlen i forespørgslen. Du er også indekseret. Hvad vil du foreslå jeg gør?? Vil helst løse problemet i forespørgslen. Men hvordan kan det gøres i formularen??
Avatar billede keldo Nybegynder
16. juni 2004 - 16:00 #3
sorry, ikke "Du er også indekseret".... Felterne i tabellerne er indekseret. Enten med eller uden dubletter.
16. juni 2004 - 16:04 #4
Er felteren heller ikke opdateret, når posten gemmes?
Avatar billede keldo Nybegynder
16. juni 2004 - 16:04 #5
Måske skulle jeg spørge, hvilke kriterier er der for at den kan opdatere med det samme? Er det de joinforbundne felter som skal være "ens" med hensyn til indeksering?
Jeg har nemlig siddet og studeret den forespørgsel hvor det virker og kan ikke rigtig se en forskel på den og den der ikke virker.
Avatar billede keldo Nybegynder
16. juni 2004 - 16:05 #6
jo, når jeg fx. går i desgin visning og tilbage igen, så er feltet opdateret. SÅ den virker, men først når jeg går ud af den.
16. juni 2004 - 16:07 #7
Jamen, hvad når du blot flytter markøren til ny linie eller trykker Shift+Enter (gem post)?
Avatar billede keldo Nybegynder
16. juni 2004 - 16:16 #8
Ingen ting når jeg kun flytter markøren i forspørgslen. Jeg har prøvet alt. Jeg skal helt ud af dataarkvisningen, enten ved at lukke forespørgslen helt eller gå i SQL eller designvisning.
16. juni 2004 - 16:18 #9
Du kan prøve at lægge denne linie kode på formularen EfterOpdatering:
Me.Refresh
16. juni 2004 - 16:18 #10
Eller:
Me.Requery

Men denne får markøren til at hoppe til første post...
Avatar billede keldo Nybegynder
16. juni 2004 - 16:19 #11
Hvad er definitionen på første post?
16. juni 2004 - 16:21 #12
Med Første Post, menes bare den øverste i dataarket
16. juni 2004 - 16:21 #13
men prøv det...
Avatar billede keldo Nybegynder
16. juni 2004 - 16:26 #14
Når jeg skriver Me.Refresh kommer formularen med en fejl og siger at den ikke kan finde makroen "me"??
16. juni 2004 - 16:28 #15
ok, det er fordi har skrevet det i selve egenskaben i stedet for i VBA.
Fjeren Me.Refresh og tryk på knappen med 3 prikker i højre side. Vælg  herefter Kodegenerator.

Så er du i VBA-editoren.
Herefter skal der stå

Private sub Form_AfterUpdate()
  Me.refresh
End sub
16. juni 2004 - 16:29 #16
Jeg er lige nødt til at løbe et par timer. Men kigger tilbage senere, hvis du ikke har løst problemet inden....
Avatar billede keldo Nybegynder
16. juni 2004 - 16:31 #17
et hurtigt spørgsmål, skal jeg skrive det i egenskaber for selv formularen eller i egenskaber for feltet som jeg taster i hvorefter resten af felterne så opdatere?
Avatar billede keldo Nybegynder
16. juni 2004 - 16:33 #18
Har lige prøvet at gøre det i feltet hvor jeg taster faktura nummer, den kommer ikke med fejl, der sker bare ingenting.
16. juni 2004 - 17:49 #19
Mystisk...jeg hælder mest til, at der mangler et eller andet i din opbygning.
Har du mulighed for at sende db'en til mig? Så er det nemmere for mig, at gennemskue...
Avatar billede keldo Nybegynder
18. juni 2004 - 12:12 #20
kan desværre ikke sende db...den fylder 15 mb og det indeholder lidt for mange fortrolige data. MEn kan du sige mig hvad jeg skal være opmærksom på i forespørgslen? Jeg kan evt. sende dig SQL...
Avatar billede keldo Nybegynder
18. juni 2004 - 14:12 #21
Nå, nu har jeg fundet problemet. Det var en fejl i indexeringen og i en anden tabel. Ellers tak for hjælpen.
Avatar billede keldo Nybegynder
18. juni 2004 - 14:12 #22
Lukker
18. juni 2004 - 14:17 #23
ok, det synes jeg nu ellers også, at jeg havde nævnt som fejlkilde i mit allerførste svar. Men tag du bare pointene selv. Jeg havde alligevel ikke andet at lave end at forsøge at gætte mig frem til hvor dit problem lå gemt ;)
Avatar billede keldo Nybegynder
18. juni 2004 - 14:21 #24
Hej Thomas, jo det havde du egentlig også, men desværre ikke på en måde så jeg blev klogere eller forstod det. Mit problem lå i at jeg ikke vidste hvad ved indekseringen jeg skulle være opmærksom på. Det vidste sig at jeg skulle sætte indekseringen til Ja - Tillad dupletter, istedet for ja- ingen dubletter. Nu er mit problem bare at jeg ikke vil have dupletter i feltet. Så hvad gør man så? Ved du det, så opretter jeg et nyt spørgsmål, så skal du selvfølgelig have point, egentlig fortjente du også lidt herfra. Sorry :-)
Avatar billede keldo Nybegynder
18. juni 2004 - 14:23 #25
Jeg kunne forestille mig, at jeg i rapporten i feltet "efter opdatering" kører en makro eller lign, som tjekker om det indtastede nr allerede står i tabellen. Hvis det gør kommer den med en fejlmed.
18. juni 2004 - 14:26 #26
no problem :o)

Du kan måske på formularens (ikke feltet!) BEFORE_INSERT lægge noget kode á la dette:

If DCount("*", "Din tabel", "Felt = " & Me!Felt) > 0 then
  msgbox "Værdien er allerede oprettet!", vbcritical
  me.Undo
  docmd.Cancelevent
endif
18. juni 2004 - 14:29 #27
Jeg vil lægge koden på formularens Before Insert således at den kun checker ved oprettelser.

Problemet er, at det ikke forhindre en bruger i at ÆNDRE en eksisterende post.
Dette problem vil jeg løse ved at låse feltet på eksisterende poster. Således:

På formularens VedAktuel (OnCurrent) lægges denne kode:

If Me.Newrecord then
  Me!Felt.Locked = false
else
  Me!Felt.Locked = true
endif
Avatar billede keldo Nybegynder
18. juni 2004 - 14:41 #28
ok, men

If DCount("*", "Din tabel", "Felt = " & Me!Felt) > 0 then
  msgbox "Værdien er allerede oprettet!", vbcritical
  me.Undo
  docmd.Cancelevent
endif

"din tabel" erstattes af tebel navnet og "Felt = " hvad med den??
20. juni 2004 - 20:53 #29
Felt er vel dit fakturanummer (eller det felt, som skulle udløse at resten af felterne blev hentet...
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