/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
do..loop
Fra : bsn


Dato : 03-09-03 13:39

Hej NG.
jeg har her en do loop løkke i en funktion i et Access modul, som jeg ikke
får til at køre korrekt.
jeg får kun 1. gennemløb i den første løkke, sammelignet med alle i den
nestede do..loop.
den vil ikke skifte til record 2 i første løkke, og sammeligne den med alle
records i den nestede do..loop.

her er koden:

Do Until Rs.EOF = True
Var = Rs!Cpr
Do Until Rs1.EOF = True
Var1 = Rs1!Cpr
If Var = Var1 Then
MsgBox ("Cprnummer " & Var & " forekommer både i bude og i
afløsere"), vbInformation
Tjek = False
End If
Rs1.MoveNext
Loop
Rs.MoveNext
Loop

Kan i hjælpe
Hilsen
Bjarne



 
 
Torben Frandsen (03-09-2003)
Kommentar
Fra : Torben Frandsen


Dato : 03-09-03 14:05

"bsn" <bsn@oncable.dk> wrote

> her er koden:
>
> Do Until Rs.EOF = True
> Var = Rs!Cpr
> Do Until Rs1.EOF = True
> Var1 = Rs1!Cpr
> If Var = Var1 Then
> MsgBox ("Cprnummer " & Var & " forekommer både i bude og i
> afløsere"), vbInformation
> Tjek = False
> End If
> Rs1.MoveNext
> Loop
> Rs.MoveNext
> Loop
>
> Kan i hjælpe

Ved første gennemløb af den ydre løkke, gennemløber du den indre indtil
..EOF. Ved andet gennemløb af ydre løkke har du ikke ændret cursorens
position i den indre løkke, hvorfor den afsluttes før den går i gang. (Arj,
hvor var det hyggeligt den gang man havde cursors!)

Nestede loops i ADO (eller er det DAO?) trækker i øvrigt tænder ud hvad
angår performance. Prøv at formulere det som et SQL-statement i stedet.

Torben



bsn (03-09-2003)
Kommentar
Fra : bsn


Dato : 03-09-03 17:18


"Torben Frandsen" <torben@rem.airsupport.dk> skrev i en meddelelse
news:3f55e6c3$0$32477$edfadb0f@dread16.news.tele.dk...
> "bsn" <bsn@oncable.dk> wrote
>
> > her er koden:
> >
> > Do Until Rs.EOF = True
> > Var = Rs!Cpr
> > Do Until Rs1.EOF = True
> > Var1 = Rs1!Cpr
> > If Var = Var1 Then
> > MsgBox ("Cprnummer " & Var & " forekommer både i bude og
i
> > afløsere"), vbInformation
> > Tjek = False
> > End If
> > Rs1.MoveNext
> > Loop
> > Rs.MoveNext
> > Loop
> >
> > Kan i hjælpe
>
> Ved første gennemløb af den ydre løkke, gennemløber du den indre indtil
> .EOF. Ved andet gennemløb af ydre løkke har du ikke ændret cursorens
> position i den indre løkke, hvorfor den afsluttes før den går i gang.
Kan det ikke lade sig gøre med VBA.
Hilsen
Bjarne



Tomas Christiansen (03-09-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 03-09-03 20:41

bsn skrev:
> Kan det ikke lade sig gøre med VBA.

Som Torben antydede kan det sagtens lade sig gøre, men det er dødens pølse
at behandle data på den måde!

Hvis du har 10 poster i Rs og 10 poster i Rs1, bliver "If Var = Var1 Then"
kør 100 gange.
Hvis du har 1000 poster i Rs og 1000 poster i Rs1, bliver "If Var = Var1
Then" kør 1000000 gange.

Indsæt en Rs1.MoveFirst lige uden for "Do Until Rs1.EOF = True ... Loop"
løkken (lige før eller lige efter) og du vil kunne gøre det, som du ønsker.

En anden lille ting: "True" er lig "True=True" er lig "True=True=True" er
lig...
Det er "Rs1.EOF = True" jeg hentyder til

-------
Tomas


bsn (03-09-2003)
Kommentar
Fra : bsn


Dato : 03-09-03 23:41


"Tomas Christiansen" <toc-01-nospam@blikroer.dk> skrev i en meddelelse
news:bj5fua$o6p$1@news.cybercity.dk...
> bsn skrev:
> > Kan det ikke lade sig gøre med VBA.
>
> Som Torben antydede kan det sagtens lade sig gøre, men det er dødens pølse
> at behandle data på den måde!
Hvordan så ?

> Indsæt en Rs1.MoveFirst lige uden for "Do Until Rs1.EOF = True ... Loop"
> løkken (lige før eller lige efter) og du vil kunne gøre det, som du
ønsker.
Tak for det...

> En anden lille ting: "True" er lig "True=True" er lig "True=True=True" er
> lig...
> Det er "Rs1.EOF = True" jeg hentyder til
OK - de er slettet ))
Bjarne



Steen Alcor (04-09-2003)
Kommentar
Fra : Steen Alcor


Dato : 04-09-03 00:06

Hvorfor ikke bruge en Findfirst

Do until Rs.EOF
Rs1.Findfirst "Cpr = '" & Rs.Fields("Cpr") & "'"
If Not Rs1.Nomatch Then MsgBox(bla bla bla)
Rs.Movenext
Loop

Eller endnu bedre via en sqlsætning

"Select * From Tabel1 Where Cpr In (Select Cpr From Tabel2)"

Steen

"bsn" <bsn@oncable.dk> skrev i en meddelelse
news:3f566def$0$24652$edfadb0f@dread14.news.tele.dk...
>
> "Tomas Christiansen" <toc-01-nospam@blikroer.dk> skrev i en meddelelse
> news:bj5fua$o6p$1@news.cybercity.dk...
> > bsn skrev:
> > > Kan det ikke lade sig gøre med VBA.
> >
> > Som Torben antydede kan det sagtens lade sig gøre, men det er dødens
pølse
> > at behandle data på den måde!
> Hvordan så ?
>
> > Indsæt en Rs1.MoveFirst lige uden for "Do Until Rs1.EOF = True ...
Loop"
> > løkken (lige før eller lige efter) og du vil kunne gøre det, som du
> ønsker.
> Tak for det...
>
> > En anden lille ting: "True" er lig "True=True" er lig "True=True=True"
er
> > lig...
> > Det er "Rs1.EOF = True" jeg hentyder til
> OK - de er slettet ))
> Bjarne
>
>



bsn (04-09-2003)
Kommentar
Fra : bsn


Dato : 04-09-03 08:21


"Steen Alcor" <newsNET@alcor.dk> skrev i en meddelelse
news:3f5673e0$0$432$edfadb0f@dread11.news.tele.dk...
> Hvorfor ikke bruge en Findfirst

> "Select * From Tabel1 Where Cpr In (Select Cpr From Tabel2)"
>
Tak for det...
Bjarne



Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408878
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste