Avatar billede Kim Neesgaard Seniormester
14. april 2004 - 19:23 Der er 5 kommentarer og
2 løsninger

Forskellen på 'New' og ikke 'New' recordset

Nu har jeg søgt forskellige steder og spurgt mig frem, men jeg er stadig ikke klar over, havd forskellen er på

Dim X as RecordSet              og
Dim X as New RecordSet

Jeg kan i mit program se, at det virker med den ene erklæring, men ikke med den anden, men hvad er helt konkret forskellen mellem de to måder at erklære på?
Avatar billede vbcoder Nybegynder
14. april 2004 - 19:42 #1
Dim X as RecordSet  er en late bound type

Dim X as New RecordSet er en early bound type

under alle omstændigheder skal

lave en set x = recordset når du skal bruge den.

humlen er allokering af hukommelse

med late bound allokeres først hukommelse når du laver en set x =

og med early bound ved programmet allerede at der skal bruges et recordset på et tidspunkt
Avatar billede Kim Neesgaard Seniormester
14. april 2004 - 21:13 #2
Vil det sige, at der funktionsmæssigt absolut ingen forskel er, men kun resursemæssig forskel?
14. april 2004 - 23:04 #3
Hej Kim,

Ja, det kan du godt sige.

Det 'Korrekte' er at skrie således:

Dim X as ADODB.Recordset 'eller DAO.Recordset
Set X = New ADODB.Recordset 'eller DAO.Recordset

Sidste sætning kan så - afhængig af de øvrige omstændigheder - undlades at blive kørt og derved spares resourcer.

btw vil jeg også mene, at programmet godt 'ved' at den skal bruge et recordset selvom du kun har brugt Dim X as Recordset - det er jo derfor man erklære variablen.
Avatar billede Kim Neesgaard Seniormester
14. april 2004 - 23:53 #4
Jeg kan se i mit program, at hvis jeg åbner recordsettet således:

rs.Open SQLTekst, Conn, adOpenKeyset, adLockOptimistic

kræver det, at jeg erklærer med 'new'

Dim rs as New RecordSet

ellers får jeg fejl, men her bruger jeg jo så heller ikke 'set' til at reservere plads.
Avatar billede vbcoder Nybegynder
15. april 2004 - 04:10 #5
Det er resourcemæssige forskelle - der er ingen funktionsforskel
15. april 2004 - 09:04 #6
Kim-> Du kan/bør stadig bruge Dim rs as Recordset, men gør det således:

Dim rs as Recordset
Set rs = New Recordset
rs.Open SQLTekst, Conn, adOpenKeyset, adLockOptimistic


Det kræver en linie kode mere, men er stadig det mest korrekte (og det vil stadig virke)
Avatar billede Kim Neesgaard Seniormester
15. april 2004 - 09:20 #7
Tak for opklaringen til begge!!
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
Kurser inden for grundlæggende programmering

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