06. juni 2003 - 15:49Der er
15 kommentarer og 2 løsninger
Knap så langsom
Min database er opdelt i front end og back end. Front end ligger på arbejdsstationerne.
Den har en rimelig performance, men en bestemt knap på en formular, som åbner en rapport baseret på en forespørgsel kører utroligt langsom (svartider på > 10 sek, når der er flere brugere koblet på back end). I forespørgslen filtereres tabellens datofelt efter talfeltet "dage" på samme formular.
Et nøjagtig tilsvarende sæt (formular, rapport, forespørgsel, talfelt) har svartider på ca et sek. Eneste forskel er at dette sæt også filtreres på CPR-nummer. Der er kun ét CPR-nummer i min tabel aktuelt og ganske få poster.
Jeg har kopieret alle elementer i både front end og back end over i nye, tomme databaser, Jeg har lavet formular og forespørgsel forfra fra bunden og givet dem nye navne, Jeg prøvet at lade knappen åbne forespørgslen i stedet for rapporten, Jeg har kopieret Dage-feltet fra den velfungerende til den dårligt fungerende formular og lige lidt hjalp det.
Det eneste, der hjalp, var at ændre "Dage"-kriteriet til den velfungerende formular, men det kan jeg ikke rigtig bruge i praksis.
Er der nogen der har flere forslag? Forespørgslerne og koden kommer nedenfor.
Det dårligt fungerende sæt: Forespørgsel, f_alle: SELECT t_barn.CPR, t_barn.Fornavn, t_barn.Efternavn, t_notater.Notattype, t_notater.notat, t_notater.Dato, t_notater.Klokkeslet, t_notater.init, t_afdeling.Institutionsnavn, t_afdeling.Afdelingsnavn FROM t_afdeling, t_barn INNER JOIN t_notater ON t_barn.CPR = t_notater.CPR WHERE (((t_notater.Dato)>=Date()-[forms]![f_laes]![dage]));
Kode på knappen: Private Sub cmd_alle_Click()
Dim stDocName As String stDocName = "r_allebarn_sidste_dogn"
'Tests if the query is empty If DCount("*", "Q_alle") = 0 Then MsgBox "Der er ingen notater skrevet de(t) sidste " & Forms!f_laes!dage & " døgn", vbInformation, "Ingen notater, vælg en længere periode" Exit Sub End If
Det velfungerende sæt: Forespørgslen, Q_etbarn_sidstedogn: SELECT t_barn.CPR, t_barn.Fornavn, t_barn.Efternavn, t_notater.Dato, t_notater.Klokkeslet, t_notater.Notattype, t_notater.notat, t_notater.init, t_afdeling.Institutionsnavn, t_afdeling.Afdelingsnavn FROM t_afdeling, t_barn INNER JOIN t_notater ON t_barn.CPR = t_notater.CPR WHERE (((t_barn.CPR)=[forms]![f_laes_periode]![cpr]) AND ((t_notater.Dato)>=(Date()-[forms]![f_laes_periode]![dage])));
Private Sub cmd_vis_etbarn_Click()
Dim stDocName As String stDocName = "r_etbarn_sidstedogn"
'Tests if the query is empty If DCount("*", "Q_etbarn_sidstedogn") = 0 Then MsgBox "Der findes ingen notater fra denne periode", vbInformation, "Ingen notater, vælg en længere periode" Exit Sub End If
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.
Even if this deosnthelp here its import that fields often used for searching are indexed. Quite often in Access programs people think that its enough to have a primary key which in most cases is an autonumber and thats about it!
Have you tried to find out EXACTLY where th eproblem is? Is it the VBA code which opens the report, or maybe the query behind the report. Or is it the actual report? You can do this be entering all the data in the appropriate fields and then just open the query directly. Then you can do the same with the report. If you have MANY calculated fields on the report then it IS going to take longer although 10 seconds does seem too long.
Something else: You could save this line If DCount("*", "Q_etbarn_sidstedogn") = 0 Then
and do it in the actual report although it may not save any time.
You can use the reports NoData event for this
Private Sub Report_NoData(Cancel As Integer) MsgBox "Der findes ingen notater fra denne periode", vbInformation, "Ingen notater, vælg en længere periode"
kabbak>> Jeg har prøvet dit forslag før, og jeg har testet det igen nu, men det virker desværre ikke.
Terry>> Både dato og CPR er indexerede. i øvrigt bliver datofeltet jo brugt på nøjagtig samme måde i den velfungerende og den dårligt fungerende forespørgsel. Jeg har fundet ud af, nøjagtigt hvor problemet er, men jeg glemte at skrive, at jeg havde prøvet at lade knappen åbne forespørgslen i stedet for rapporten, hvilket ikke ændrede noget. Det eneste der hjalp, var at ændre kriteriet fra talfeltet på den syge til talfeltet på den raske formular, så det er vel talfeltet i den syge formular det er galt med. 'If DCount("*", "Q_etbarn_sidstedogn") = 0 Then' fungerer fint i den raske formular.
terry>> Jeg slettede 30-40 formularer, som tilsyneladende ikke havde noget med det aktuelle problem at gøre for at reducere størrelsen på databasen, da jeg ville sende den til dig. Det sjove er, at det fil fejlen til at forsvinde!!? Så nu må jeg prøve mig frem til, hvilke formularer det er, der medfører fejlen. Jeg har derfor ikke sendt dig databasen.
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.