Avatar billede jind Nybegynder
29. september 2005 - 13:18 Der er 13 kommentarer og
1 løsning

Variabel kolonne i recordset

Hej Eksperter,
Håber jeg kan få et hint til at løse nedenstående problem:

Jeg vil sammenligne data fra de sidste to rækker i en tabel.
Tabelkolonnerne i Tabellen recordsættet er baseret på har jeg navngivet 1 til 30 for at kunne lave en do løkke.
Jeg er dog stødt ind i et problem med at hente de specifikke poster fået fra to recordsæt på den samme tabel.
Nedenfor er problemet markeret med "******"

Har en af jer en ide til hvordan man kan ændre kolonnen i et recordsæt dynamisk?

Jeg har prøvet med:
        Do Until versionskolonne = 30
        versionskolonne = versionskolonne + 1
        Set RSV1 = New Recordset
        strSQL1 = "SELECT * FROM VersionTbl WHERE " & "[Produkt] ='" & RS![Produktnavn] & " '" _
        & "and" & " [Version1] =" & V1 - 2
        RSV1.Open strSQL1, CN, adOpenKeyset, adLockOptimistic, adCmdText

        Set RSV2 = New Recordset
        strSQL1 = "SELECT * FROM SDSVersionTbl WHERE " & "[Produkt] ='" & RS![Produktnavn] & " '" _
        & "and" & " [Version1] =" & V1 - 1
        RSV2.Open strSQL1, CN, adOpenKeyset, adLockOptimistic, adCmdText
**** Her kommer problemet****

        If RSV1![(versionskolonne)] <> RSV2![(versionskolonne)] Then

*****************************'
        MsgBox versionskolonne
        End If
        RSV1.Close
        Set RSV1 = Nothing
        RSV2.Close
        Set RSV2 = Nothing
        Loop
Avatar billede terry Ekspert
29. september 2005 - 19:39 #1
"Jeg vil sammenligne data fra de sidste to rækker i en tabel" ?

Not quite sure I understand your code, if you want to compare the last two records in a table then why are you selecting from TWO tables?

Could you try and explain your problem and lets see if we can find a solution
Avatar billede jind Nybegynder
29. september 2005 - 20:29 #2
Sorry for the mistake. I wanted to make the code more simple by deleting some of the name. It should have been from VersionTbl for both the recordset.
I am sellecting the table twice as I am compairing the last two versions ie two records of a dataset.

I just need to make hte selection of a column in the dataset dynamic - as I have tried to in the above code between the *'s
Does that make the problem clear?
Avatar billede terry Ekspert
29. september 2005 - 20:39 #3
I understand danish very well so you dont need to write in English, I'm just too lazy to write in danish :o)

Have I understood the problem correctly?

You have a table with a number of colums and you want to compare all columns of the last two records in the table.

And you also want the code to take into account the number of fields changing?


Well you can use

rs.Fields.Count

to get the number of columns in a recordset, does that help?
Avatar billede terry Ekspert
29. september 2005 - 20:48 #4
you can also use rs.movelast and rs.moveprevious to go to the next from last record
Avatar billede terry Ekspert
29. september 2005 - 20:57 #5
your loop doesnt look correct either.


You should open the recordset before the loop and close it after the loop.
An dif you want to move to the last two records do that before the loop also.
Avatar billede jind Nybegynder
29. september 2005 - 21:02 #6
Hej Teey,
Ja noget i den dur.

Et eks.

Tbl_ID  Column1 Column2 Column3
1        4        4      45
2        9        4      45

Jeg vil gerne finde de kolonner hvor værdierne i en kolonne er forskellige. I eksemplet her vil jeg gerne have Column1 udvalgt.
I analogi med ovenstående kunne jeg forestille mig at bruge
If RSV1![ (column&(versionskolonne))] <> RSV2![(column&(versionskolonne))] Then

Det er ikke de sidste to records men de sidste to records af med et bestemt produkt. Men det har jeg grejet.
Avatar billede jind Nybegynder
29. september 2005 - 21:04 #7
Undskyld Terry - ikke Teey
Avatar billede terry Ekspert
30. september 2005 - 11:14 #8
If you can send your dB to me then maybe I can make some alterations to your code.

eksperten@NOSPAMsanthell.dk
remove NOSPAM

I'll take a look this evening or over the weekend
Avatar billede jind Nybegynder
30. september 2005 - 12:11 #9
Hej Terry
min db fylder 60 MB komprimeret kode og tabeller.
Jeg værdsætter dit tilbud, men da min dB er meget komplex tror jeg ikke du får meget ud af den - dette skønt jeg ved du er ekspert. Problemet er at jeg er nybegynder og hr ingen orden i dB'en.
Bare den sub som ovenstående er en del af fylder 1800 linier.

Såfremt det ikke umiddelbart er muligt at kalde et felt fra et recordset
RS.[1] til RS.[10]
med en dymamisk varabel:

do until variabel = 10
RS.(variabel)
loop

finder jeg en anden løsning.

Men mange tak for den tid du brugte på det.
dine rs.movelast and rs.moveprevious hjalp mig meget med et andet probem jeg har.

VH
Jind
Avatar billede terry Ekspert
30. september 2005 - 15:09 #10
Dim a as Integer

For a = 1 to rs.Fields.Count

RS!(a)

Next a
Avatar billede terry Ekspert
30. september 2005 - 15:09 #11
Not tested but I am sure I can get something working
Avatar billede jind Nybegynder
01. oktober 2005 - 16:44 #12
Hej Terry,
Det virker ikke.
Tror du det gør en forskel hvis kolonnerne ikke var tal?
Avatar billede terry Ekspert
02. oktober 2005 - 12:01 #13
what problem are you having?
Avatar billede jind Nybegynder
02. oktober 2005 - 13:08 #14
Hej Terry,
Jeg fandt ud af det.
Jeg brugte:
        Do Until versionskolonne = 4
        versionskolonne = versionskolonne + 1
     
        a = "v" & versionskolonne
        If RSV1.Fields(a).Value = RSV2.Fields(a).Value Then
        MsgBox RSV1.Fields(a).Value
        End If
        Loop
Jeg fandt udtrykket med RS.Fields("felt").value et andet sted på eksperten.
Undskyld ulejligheden og tak for den tid du brugte.

VH
Jind
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