02. april 2002 - 00:02 Der er 17 kommentarer og
1 løsning

SQL server og opdatering af subforms

Hej,

Jeg har et problem med en ret kompliceret form, hvor der er en hovedform med 6-7 subforms hvoraf enkelte har yderligere subforms (altså 3 niveauer)

Brugeren kan oprette poster i de forskellige subforms - disse oprettes vha VBA - men jeg kan ikke få vist de nye poster.
Jeg har prøvest alt (synes jeg?):
Me.Requery
Me!Suform.Requery
Me!Subform.Form.Requery
Me!Subform.Form.Recordsource = "tabel"
Me!Subform.Sourceobject = "Min subform"

Data ligger på en SQL server 2000 og tilgås vha sammenkædet tabeller (ODBC)

Jeg har tidligere haft problemer med at Me!Subform.Requery ikke var nok, men har altid kunnet klare det med Me!Subform.Sourceobject = "Min subform" i stedet.

Nogen forslag/erfaringer?

/Thomas
02. april 2002 - 00:03 #1
(...fortsat)

Det er Access 2000, hvis det skulle interessere!
Avatar billede nih Novice
02. april 2002 - 00:29 #2
God aften Thomas

Et skud i tågen er at opdatere tabelen vha metoden
tbl.RefreshLink '(DAO)
og derefter lave en requery på din(e) form(s)

Niels
02. april 2002 - 00:32 #3
mener du sådan:

currentdb.tabledefs("MinTabel").RefreshLink
Me!Subform.Requery

(Det skal lige siges, at jeg først kan afprøve det - og dermed give point - om et par dage)
Avatar billede nih Novice
02. april 2002 - 00:35 #4
Ja, men om det virker ved jeg ikke.

Niels
Avatar billede nih Novice
02. april 2002 - 00:37 #5
opretter du poster på serveren via din sammenkædede tabel, eller laver du en connection direkte på serveren ????

Niels
02. april 2002 - 00:45 #6
Brugeren opretter faktisk i en ny popup-formular. Når den lukker, skal subformen opdateres..
02. april 2002 - 11:39 #7
Jeg glemte helt at sige, at posterne selvfølgelig dukker op, når jeg lukker hovedformularen og åbner den igen - men det er jo ikke holdbart i længden...
Avatar billede terry Ekspert
02. april 2002 - 19:06 #8
well I would have thought that a me.requery would have been enough, but you could try me.refresh after me.requery
02. april 2002 - 19:16 #9
Terry-> .Refresh duer i hvert fald ikke, da den aldrig opdatere nye eller slettede poster.
.requery duer heller ikke desværre :-(
Avatar billede terry Ekspert
02. april 2002 - 19:38 #10
Well IF we both mean that me.requery should work then can it be that its just the from which needs repainting?
me.repaint
Avatar billede terry Ekspert
03. april 2002 - 19:33 #11
Thomas>did me.repaint help or is that a silly question?
03. april 2002 - 19:55 #12
nope (and there is no such thing as a silly question, you know that!)

.repaint virker kun på udseendet af kontrolobjekter - f.eks. grafer eller hvis du ændre bredden et objekt osv.
.Repaint udfører desuden en .recalc
.recalc opdaterer kun beregnede felter.
.Refresh opdaterer de allerede indlæste poster (og altså ikke nye eller slettede poster)

.requery burde være den rigtige, men er det ikke i dette tilfælde - meget frustrerende :-(

Fredag lukkes spørgsmålet, hvis der ikke dukker andet op inden da.
03. april 2002 - 20:02 #13
Ah efter at have gennemlæst definitionen på requery, repaint osv, så viser det sig at der er en forskel på Docmd.Requery og Me.Requery

Me.Requery udfører den aktuelle forespørgsel igen
Docmd.Requery lukker forespørgslen og genindlæser den. Derfor er Me.Requery væsentlig hurtigere, men det er formentlig Docmd.Requery, jeg skal bruge til at løse mit problem. Netop fordi jeg har brug for at lukke forbindelsen og genindlæse den!

Så lærte I også lidt :o)

Jeg får først mulighed for at teste fredag, så jeg ved endnu ikke om mit problem løses af dette.
Avatar billede nih Novice
04. april 2002 - 00:18 #14
Jeg venter spændt på resultatet, men mon ikke det drejer sig om en genforespørgsel helt nede på serveren. Hvis en .requery kun kører forespørgslen på de data der er hentet fra serveren (for at spare på netværket), får du jo ikke de data med der er ændret/tilføjet via kode.
Forskellen på Me samt andre objekter og doCmd plejer kun at være hastighed, fordi docmd er en oversættelse af VBA til Makro

Niels
Avatar billede nih Novice
04. april 2002 - 00:22 #15
Den er lidt svær at 'lege' med, jeg kan ikke gennemtvinge din fejlsituation - har prøvet at sætte en frontend op imod SQL server 2000, men min form opdaterede helt som den skulle.

Niels
04. april 2002 - 08:09 #16
Hej Niels,

Jeg kan heller ikke selv fremprovokere problemet på min egen maskine og min egen SQL server. Og jeg har som sagt heller ikke haft problemer med det hos andre kunder før (og jeg har efterhånden lavet en hel del af den slags opgaver).

Som jeg fik skrevet 02/04-2002 11:39:59, så er posterne i tabellen og de dukker også fint nok op, når jeg lukker og åbner formularen igen.
Derfor er det ikke på SQL serveren at der skal foretages noget. Det er på formularen.

Mht Requery, så beskriver hjælpen det, som jeg forklarede ovenfor, at Docmd.Requery lukker og åbner forespørgslen mens Me.Requery blot kører forespørgslen igen.
Derfor forskellen i hastigheden.

/Thomas
Avatar billede fynbohans Nybegynder
05. april 2002 - 02:00 #17
Havde et nogenlunde tilsvarende problem for et par år siden med en inddateringsformular
3 nivauer væk fra hoveformularen. Et par lister og felter i hovedformularen skulle opdateres. DoCmd virkede ikke uanset hvad jeg gjorde. Til sidste fandt jeg at følgende i inddateringsformularen virkede. Og har ikke haft den slags problemer siden.
.......
.......
Dim EnListe as Control
.......

og opdateringen:

Set EnListe = Forms!Hovedformular!MitKontrolelement
EnListe.Requery

men ved ikke om det virker i dit tilfælde!
06. april 2002 - 21:58 #18
Docmd.Reqeury "Subform" virkede!!

Jeg er en glad mand :o)

Det bedste var, at jeg lærte noget nyt om requery
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