02. april 2002 - 00:02Der 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.
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.
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...
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.
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.
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
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.
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.
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
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.