Avatar billede 49jensen Nybegynder
26. oktober 2009 - 22:52 Der er 7 kommentarer og
1 løsning

Hjælp til "Invalid use of null" i formular

Private Sub Form_BeforeInsert(Cancel As Integer)
Dim X As Single
X = DLast("[InspTargethours]",
"QryC172ProductionControlledItems", ([AC_Reg] = "Me.AC_Reg"))

Me![Target hours] = X

Dim Y As Single
Y = DLast("[InspTargetcycles]",
"QryC172ProductionControlledItems", ([AC_Reg] = "Me.AC_Reg"))

Me![Target cycles] = Y

Dim Z As Date
Z = DLast("[Insp Target date]",
"QryC172ProductionControlledItems", ([AC_Reg] = "Me.AC_Reg"))

Me![Target date] = Z

End Sub

Ovennævnte kode virker, men kun under visse betingelser, nemlig at "Target hours","Target cycles" og "Taget date" felterne ikke må være nul eller empty. Koderne overfører værdien "Insp Target ..." til feltet "Target…" i næste post.
Hurtig forklaring:
I felterne "Target hours", "Target cycles" og "Target date" lægges en startværdi ind i forespørgslen. Der vil aldrig blive lagt værdi ind i alle felterne samtidig.
Det kunne f.eks. se således ud - "Target hours" = 756,67 og "Target date" =  09/09/2009. I feltet "Target cycles"  indtastes ingen værdi.
Når koden køres får jeg fejlen "Invalid use of Null" hvilket jeg godt forstår da "Target cycles" ingen værdi har.
Jeg har prøvet at tilføje If-Then-Else sætning, således at det stykke kode hvor "Target værdien" er null eller empty springes over, men kan ikke få det til at virke, men det må jo kunne lade sig gøre, eller hvad?
Avatar billede hugopedersen Nybegynder
27. oktober 2009 - 07:10 #1
Uden at være helt sikker så vil jeg påstå at det ikke har noget med 'Target cycles' at gøre da du ikke læser den nogen steder i din kode. (I øvrigt giver det mig myrekryb at se at nogen stadig bruger mellemrum i feltnavne)

Men hvor præcist i dein kode er det fejlen kommer?

Jeg synes at de kriterier der er sat op for din DLast ser forkerte ud, men jeg bruger aldrig de funktioner så jeg er ikke 100% - de er generelt for langsomme når man arbejder på store datasæt. Du kunne også prøve at anvende NZ funtionen når du læser fra formen. Så kan du få en default værdi hvis værdien er Null.
Avatar billede mugs Novice
27. oktober 2009 - 08:26 #2
Ening med Hugo i, at du må kunne bruge Nz i stil med dette:

Target date = (Nz([Z], 0))

Ogsåc ening m.h.t. brugen af mellemrum i objektnavne.
Avatar billede terry Ekspert
27. oktober 2009 - 09:17 #3
You cant initialize a single with NULL so all places where you do this you need to use the NZ function to ensure they get a numeric value

EG:

X = NZ(DLast("[InspTargethours]",
"QryC172ProductionControlledItems", ([AC_Reg] = "Me.AC_Reg")),0)
Avatar billede terry Ekspert
27. oktober 2009 - 09:19 #4
and that was an answer
Avatar billede 49jensen Nybegynder
27. oktober 2009 - 11:17 #5
Det virker hvis jeg indsætter en værdi i "Target date", men hvis jeg kun indsætter værdier i "Target hours" og "Target cycles" så får jeg fejl på datofeltet. Hvis jeg indsætter "Nz" foran dato delen indsættes "30/12/1899" automatisk i "Target date" feltet når formularen åbnes.
Avatar billede terry Ekspert
27. oktober 2009 - 12:12 #6
If there is no date then you may need to default it to some value or use something like

Dim Z As Variant
Z = DLast("[Insp Target date]",
"QryC172ProductionControlledItems", ([AC_Reg] = "Me.AC_Reg"))


If Not IsNull(z)  Then Me![Target date] = z
Avatar billede terry Ekspert
27. oktober 2009 - 12:12 #7
NOTE: I have cahnged the data type of Z to a variant which can accept NULL
Avatar billede terry Ekspert
27. oktober 2009 - 12:55 #8
thanks
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