Avatar billede tolveren Nybegynder
30. juni 2004 - 15:56 Der er 22 kommentarer og
1 løsning

Performance i access

Jeg har lavet en lille db, med 10 tabeller og ca 10 formularer.
Der er nu indtastet ca 8000 records i den ene tabel. Den kører på et netværk. Jeg har komprimeret db-en. Indtastning i formularen er blevet langsom. Der fremkommer timeglas, som skal afventes inden næste indtastning. Indtastning af en record afsluttes med "Enter". Hvis man taster for hurtigt mistes data fra seneste record. Der er ikke relationer i db-en, men tabellen indeholder ca 10 felter. Har nogen gode ideer til mig så hører jeg gerne. Husk svar så jeg kan give point.
Avatar billede mugs Novice
30. juni 2004 - 16:01 #1
Hvordan kører den hvis du indtaster direkte i tabellen?
Avatar billede tolveren Nybegynder
30. juni 2004 - 16:01 #2
afvent
Avatar billede tolveren Nybegynder
30. juni 2004 - 16:06 #3
Ja. Så har jeg prøvet. Det går hurtigt. Men jeg bruger heller ikke enter knappen inde i tabellen.
Avatar billede mugs Novice
30. juni 2004 - 16:08 #4
Prøv at lave en autoformular og se om den er hurtigere en dan anden form.
Databasevindue > Tabeller > Marker din tabel og find ikonet for autoformular på menulinien.
Avatar billede tolveren Nybegynder
30. juni 2004 - 16:17 #5
I autoformularen kører det hurtigt. Hvad gør jeg så.
Avatar billede tolveren Nybegynder
30. juni 2004 - 16:24 #6
Se lige min kode på current:

Private Sub Form_Current()
Dim rs As DAO.Recordset   
Set rs = Me.RecordsetClone

    On Error Resume Next
    rs.MoveLast 
    Me!Udskibningsdato_Dato.DefaultValue = "'" & rs!Udskibningsdato_Dato & "'"   
    Me!Bmrk.DefaultValue = "'" & rs!Bmrk & "'"   
       
    rs.Close 
   
    Dim stDocName As String
   
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
    ' ovst opdaterer
   
    stDocName = "Makro6" 
    DoCmd.RunMacro stDocName
   
    Me!Tid = Now           
    Me!Bruger = CurrentUser()   

End Sub
Avatar billede tolveren Nybegynder
30. juni 2004 - 16:26 #7
Jeg er nødt til at gå lige nu, men er retur i aften.
Avatar billede mugs Novice
30. juni 2004 - 16:36 #8
der er for mig ingen tvivl om, at det er koden der sløver. Først åbner du formularen i den første record hvorefter du sender formularen til den sidste record. Ydermere kører du så en makro, og det gør den ikke hurtigere.

Hvad indeholder Makro6? Makroer bør absolut undgås i den færdige applikation.
Avatar billede tolveren Nybegynder
30. juni 2004 - 19:08 #9
Makro6: flytter focus til felt1. Den har jeg slettet og lavet en setfocus på open, men stadig er der dårlig performance.
Koden "RS.Movelast" skulle vist nok gøre at access kunne bevare sidst indtastede i felter som man så ikke behøver at indtase igen i næste record.
Har du et forslag til ændring af koden. Kan RS.movelast undværes ?
Avatar billede tolveren Nybegynder
30. juni 2004 - 19:08 #10
På igen kl 2000.
Avatar billede mugs Novice
30. juni 2004 - 19:14 #11
Jeg bruger samme kode til at indsætte værdien fra sidste post, og har ikke rigtig nogen bud, bortset fra at du kan prøve at undlade nogle kodelinier een af gangen for at se hvad der sker.

Dim rs As DAO.Recordset
If Me.NewRecord Then
Set rs = Me.RecordsetClone
rs.MoveLast
Me!felt1.DefaultValue = "'" & rs!felt1 & "'"
rs.Close
End If
30. juni 2004 - 19:58 #12
Hej Tolveren,

Jeg kan huske at vi snakkede om den kode i et tidligere spm. Og da kom vi frem til, at disse to linier bedst skulle ligge på Form_Beforeupdate:
    Me!Tid = Now           
    Me!Bruger = CurrentUser()   

Jeg tror dog ikke, at det har den store betydning for performance.

Jeg tror dog, at du kunne drage stor nytte af at sørge for, at rs-koden kun udføres hvis du hopper til en ny post (det har jo ingen effekt på gamle poster):

Private Sub Form_Current()
Dim rs As DAO.Recordset   
Dim stDocName As String

    On Error Resume Next
    If Me.Newrecord then
        Set rs = Me.RecordsetClone
        rs.MoveLast 
        Me!Udskibningsdato_Dato.DefaultValue = "'" & rs!Udskibningsdato_Dato & "'"   
        Me!Bmrk.DefaultValue = "'" & rs!Bmrk & "'"         
        rs.Close 
    endif
   
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
    ' ovst opdaterer
   
    stDocName = "Makro6" 
    DoCmd.RunMacro stDocName
   
    Me!Tid = Now           
    Me!Bruger = CurrentUser()   

End Sub
Avatar billede tolveren Nybegynder
30. juni 2004 - 20:22 #13
Til thomasjepsen,
du har ret i at vi for få dage siden talte om

Form_Beforeupdate:
    Me!Tid = Now           
    Me!Bruger = CurrentUser()   

Denne kode har jeg flyttet, men dårlig performance har jeg stadig.

Jeg vil prøve med Me.newrecord  senere eller i morgen.
Har du en ide til opdatering. Du ved at Docmd.refresh ikke virkede, i min ovst kode. Jeg tror iøvrigt Portugal vinder over Holland.
Avatar billede mugs Novice
30. juni 2004 - 20:24 #14
refresh opdaterer kun eksisterende poster, men tilføjer ikke nye til tabellen, så skal du bruge Requery.
30. juni 2004 - 20:43 #15
hvorfor er det, at du vil opdatere formularen? Jeg forstår ikke helt formålet? Docmd.Requery vil få formularen til at hoppe til første post, så det er nok ikke så godt.
Jeg tror umiddelbart bare, at du skal fjerne linien.

Metoden er forøvrigt meget gammeldags, selvom access stadig (i version 2003) selv genererer denne kode når man bruger guiden. Metoden stammer tilbage fra version 7.0 (Access 95).
Man kan med fordel blot bruge Me.refresh
Avatar billede mugs Novice
30. juni 2004 - 20:46 #16
thomasjepsen > Som jeg har forstået, er der tale om en ny post. Vil refresh så tilføje posten til tabellen?
Men iøvrigt er det jo korrekt, at koden ikke er nødvendig, da den nye post vil blive tilføjet når denne forlades.
Avatar billede tolveren Nybegynder
30. juni 2004 - 20:51 #17
Så er den der:
Private Sub Form_Current()
Dim rs As DAO.Recordset
Dim stDocName As String
    On Error Resume Next   
  Set rs = Me.RecordsetClone
  rs.MoveLast
  Me!Udskibningsdato_Dato.DefaultValue = "'" & rs!Udskibningsdato_Dato & "'"
  Me!Bmrk.DefaultValue = "'" & rs!Bmrk & "'"
  rs.Close
End Sub
------
og det virker det med at det som du lige har tastet bliver stående i felterne, så du kan nøjes med at taste eksp nr, hvis der er tale om samme udskibningsdato.
----
Private Sub Form_BeforeUpdate(Cancel As Integer)

If Me.Dirty Then
  Me!Tid = Now
  Me!Bruger = CurrentUser()
End If

End Sub
-
er indsat på fefore update.
------------
Private Sub Form_Open(Cancel As Integer)
Me!Eksp_nr.SetFocus
End Sub
--------
er indsat på open.
Tak for hjælpen gutter eller gutterinder.
Avatar billede tolveren Nybegynder
30. juni 2004 - 20:52 #18
lukket.
Avatar billede tolveren Nybegynder
30. juni 2004 - 20:54 #19
Jeg synes der er noget galt med pointgivningen her i eksperten. Det er i hverfald ikke logisk opbygget. Point til thomasjepsen. Jeg kom vist til at give mig selv point !!"!!
Avatar billede mugs Novice
30. juni 2004 - 20:55 #20
Hvis du ikke mener at have fået den nødvendige hjælp, er du naturligvis velkommen til selv at tage dine point igen.
Men en begrundelse herfor mener jeg at være på sin plads, da en sådan handling ikke er særlig befordrende for fremtidig hjælp.
Avatar billede tolveren Nybegynder
30. juni 2004 - 20:55 #21
På imorgen igen efter 0930
30. juni 2004 - 21:25 #22
Tolveren->jeg undrede mig dog også lidt, da jeg så, at du selv tog pointene. Men du er langt fra den første, som har haft problemer med at give point. :o)

Men du kan bare oprette nyt spm med reference til dette spm.

"på igen efter 0930"!? Er du dirktør? :O)
30. juni 2004 - 21:26 #23
dirktør=direktør ;)
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