Avatar billede geagleeye Nybegynder
09. januar 2006 - 11:29 Der er 14 kommentarer og
2 løsninger

forspørgelse kørerer for langtsom.

Jeg har en forspørgelse i noget VBA kode.

dim Db as database
dim rec as recordset
dim qry as querydef
dim sql as string

set db= currentdb


Sql = " SELECT * TABEL"

Set qry = dbs.CreateQueryDef("", SQL)
Set rec = qry.OpenRecordset()

osv....


længere nede kørere jeg meget rundt med rec.movenext, rec.moveprevieus, rec.movefirst osv.


dvs. jeg skal ind i tabellen og der inde kørere jeg meget frem og tilbage og der er 1300 poster  * 9 jeg i løkke kørere på denne måde. det tager 3 minnutter og det syndes jeg er altfor langsom.

Har access ikke flere måde man maniplurere og skriver og læser fra tabellen ?

og på den som jeg har skrevet tingene går koden ind i recordsetet for hvergang og det tager på den måde ?

kan man ikke bare smide alt i hukkommelsen og bearbejde sin data på den måde og senere plotte dem i tabellen ?

håber der er nogen der kan hjælpe  :(



min problem er at jeg skal have fundet en måde, så jeg hurtigt kan navigere i recordsetet og redigere ?

er der andre end den jeg brugere som er hurtigere ?
Avatar billede terry Ekspert
09. januar 2006 - 11:35 #1
It is very likely your code which is the bottle neck not the SQL statemnets.

Try opening the queries directly and see how long they take. Then if you can see that they are slow you can try optimising them first. Then when these are OK you can look at your code.
Avatar billede geagleeye Nybegynder
09. januar 2006 - 12:25 #2
åben queryne direkte hvordan ?, har du en example
Avatar billede geagleeye Nybegynder
09. januar 2006 - 12:28 #3
hvordan henvisser jeg til de enkelte felter på den måde (rec.fields!X ?)
Avatar billede geagleeye Nybegynder
09. januar 2006 - 12:31 #4
er det sådan du mener ?
Dim rs As ADODB.Recordset
   
    Set rs = New ADODB.Recordset
Avatar billede terry Ekspert
09. januar 2006 - 12:36 #5
In Access there is a query designer. Copy the contents of your SQL into the query designer and run it there.

In your code you have something like this
Sql = " SELECT * from TABEL......"

If you place a breakpoint just after this line, then you can see the contents of the SQL in the debug window (CTRL+G)
Then copy it from there into the query builder.
Avatar billede geagleeye Nybegynder
09. januar 2006 - 12:47 #6
jamen min forspørgelse ser præcis sådan her ud :

strSQL = "SELECT * FROM TFSS"

Set qry = dbs.CreateQueryDef("", strSQL)
Set rec = qry.OpenRecordset()

jeg skal bruge alt fra Tabellen, men hvis jeg laver en Accessquery som henvisser til tabellen ville det kører hurtigere, jeg sortere nemlige ikke noget, jeg tager og skal bruge alt fra tabellen ?
Avatar billede geagleeye Nybegynder
09. januar 2006 - 15:18 #7
?
Avatar billede terry Ekspert
09. januar 2006 - 15:24 #8
sorry, I've been busy with other things

How long does it take to run this line of code?

Set rec = qry.OpenRecordset()
Avatar billede fdata Forsker
09. januar 2006 - 22:19 #9
Hvis du ikke har alt for mange felter, kunne du kyle det hele ind i et array og så hoppe rundt derinde:

Function OpbygOgVisArray()
Dim A As Variant
Dim i As Integer, j As Integer
Dim rs As New ADODB.Recordset

rs.Open "Select TFSS.* From TFSS", CurrentProject.Connection

A = rs.GetRows()

For j = 0 To UBound(A, 2)
  For i = 0 To UBound(A, 1)
    Debug.Print A(i, j)
  Next i
Next j
End Function

Hvis du har mange felter, vil array'et nok blive for stort. Se efter blå røg under dit skrivebord  ;o)
Avatar billede phi-del Nybegynder
10. januar 2006 - 09:59 #10
Kommentar: terry
09/01-2006 15:24:19
det tager 3 min

Svar: fdata
09/01-2006 22:19:35
i min recordset er der 1100 poster og 9 koloner.
men jeg kan behandle dem 2 og 2.
Avatar billede terry Ekspert
10. januar 2006 - 14:52 #11
If this sinlge line of code

Set rec = qry.OpenRecordset()

takes 3 minutes then it sint your code which is slow, but the actual SQL. There isnt anything wrong with the actual statement, so i suspect that you have LOTS of data, or maybe a slow network?
Avatar billede terry Ekspert
19. januar 2006 - 11:41 #12
phi-del/geagleeye (only one username allowed, just hope admin doesnt notice :o) )

Can you comment on my last comment please? 10/01-2006 14:52:30
Avatar billede geagleeye Nybegynder
06. februar 2006 - 10:38 #13
løsningen blev at jeg smed det hele i en array og regnede tingene der og smed dem tilbage til db senere.

det tager 3 sek nu.
Avatar billede geagleeye Nybegynder
06. februar 2006 - 10:38 #14
jeg takker for hjælpen
Avatar billede terry Ekspert
06. februar 2006 - 19:20 #15
selv tak
Avatar billede fdata Forsker
06. februar 2006 - 19:49 #16
Velbekomme og tak for point.
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