Avatar billede blolsen Juniormester
19. december 2013 - 20:06 Der er 6 kommentarer og
1 løsning

Sammenligt felter i Access hvor nogle er tomme

Hej,

Jeg har følgende udfordring i Access, som jeg håber nogen har en løsning på.

Jeg har en tabel "Test" med følgende felter:

varenummer
Lageroplysning 1
Lageroplysning 2
lageroplysning 3
lageroplysning 4 osv.

For hvert varenummer kan lageroplysningerne i "lageroplysning 1-4" være ens, forskellige eller tomme.

Opgaven går ud på at sammenholde om lageroplysningerne på de enkelte varenumre er ens eller forskellige. Hvis felterne alle indeholdt en oplysning kan jeg bruge udtrykket

Udtryk1: IIf([test]![Lageroplysning 1]=[test]![Lageroplysning 2]=[test]![Lageroplysning 3]=[test]![Lageroplysning 4];"OK";"IKKE")

i udtryksgenerator til at definere om oplysningerne er ens eller forskellige. Problemet er der hvor felterne er tomme, der virker udtrykket ikke. Og der er desværre tomme felter knyttet til stort set alle varenumre.

Hvordan for jeg sammensat et udtryk, hvor der ikke tages højde for de tomme felter, dvs. sådan at der kun sammenlignes på de felter, der har en værdi?
Avatar billede kabbak Professor
19. december 2013 - 21:21 #1
prøv med
ENS: IIf([test]![Lageroplysning_1]=[test]![Lageroplysning_2]=[test]![Lageroplysning_3]=[test]![Lageroplysning_4]=0;"OK";"IKKE")
Avatar billede kabbak Professor
19. december 2013 - 21:22 #2
virker ikke ordentlig
Avatar billede kabbak Professor
19. december 2013 - 21:28 #3
sådan
ENS: IIf([test]![Lageroplysning_1]=[test]![Lageroplysning_2] And [test]![Lageroplysning_2]=[test]![Lageroplysning_3] And [test]![Lageroplysning_3]=[test]![Lageroplysning_4];"OK";"IKKE")
Avatar billede blolsen Juniormester
19. december 2013 - 21:46 #4
Hej kabbak,

tak for svaret, men det virker desværre ikke helt, da udtrykket stadigvæk sammenligner på de tomme felter.

har et eksempel, hvor lageroplysning 1 og 3 er ens, med en lagerplacering "L35", mens 2 og fire er tomme. Her vil udtrykket stadig komme med et svar der hedder "ikke", selvom svaret skulle være "OK"

Brian
Avatar billede kabbak Professor
19. december 2013 - 22:37 #5
Ok så laver vi vores egen, kaldes med:

Udtryk1: ENS([lageroplysning_1];[lageroplysning_2];[lageroplysning_3];[lageroplysning_4])

Lav et kodemodul, hvis du ikke har et.
sæt denne kode derind:

Public Function ENS(F1, F2, F3, F4) As String
Dim OK() As Variant, A As Integer
A = 0
    If Not IsNull(F1) Then ReDim Preserve OK(A): OK(A) = F1: A = A + 1
    If Not IsNull(F2) Then ReDim Preserve OK(A): OK(A) = F2: A = A + 1
    If Not IsNull(F3) Then ReDim Preserve OK(A): OK(A) = F3: A = A + 1
    If Not IsNull(F4) Then ReDim Preserve OK(A): OK(A) = F4
    ENS = False
   
    For i = 0 To UBound(OK) - 1
      For j = i + 1 To UBound(OK)
        If OK(i) = OK(j) Then
        ENS = "OK"
        Else
        ENS = "IKKE"
        Exit Function
        End If
      Next
  Next
End Function
Avatar billede blolsen Juniormester
19. december 2013 - 22:49 #6
Hej kabbak,

Det er super nu virker det. Skal lige have sat mig lidt mere ind i vba koden, men det virker:-)

Send mig et svar så overfører jeg pointene.

Brian
Avatar billede kabbak Professor
19. december 2013 - 22:57 #7
;-))
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