Avatar billede alexander_j Nybegynder
08. oktober 2007 - 21:59 Der er 19 kommentarer og
2 løsninger

Invalid use of Null

Jeg har en lang og kedelig SQL-sætning som jeg kører, men access brokker sig når værdien rs!student_name er 'tom'
altså i bund og grund hvis SQL-sætningen så sådan her ud:
"UPDATE tabel SET kolonne2='' WHERE kolonne1=1"

Fejlen den melder er: Runtime error '94' - Invalid use of Null

Hvorfor nu det?
Avatar billede mugs Novice
08. oktober 2007 - 22:07 #1
Fordi dit kriterie ikke stemmer overens med tabellen. Du har nogle kolonner hvor Kolonne2 ikke indeholder matchende værdier med kolonne1. Indsæt et nyt kriterie hvor kolonne2 ikke må være null:

'' WHERE kolonne1=1"
Avatar billede kabbak Professor
08. oktober 2007 - 22:29 #2
"UPDATE tabel SET kolonne2=NULL WHERE kolonne1=1"
Avatar billede alexander_j Nybegynder
08. oktober 2007 - 22:37 #3
kabbak -> ikke en løsning jeg kan bruge.
Min sql-sætning bliver generet, så nogen gange lyder den:
"UPDATE tabel SET kolonne2='minvariabel' WHERE kolonne1=1"
og andre gange:
"UPDATE tabel SET kolonne2='' WHERE kolonne1=1"

mugs-> forstår ikke helt hvad du fortæller mig. Er det fordi der i min tabel ikke er nogen post, hvor det gælder at kolonne1=1 - er det det du siger?
Hvad vil det egentlig sige at være Null? Hvis cellen er tom ('') er det det samme som at være Null?
Avatar billede mugs Novice
08. oktober 2007 - 22:42 #4
"mugs-> forstår ikke helt hvad du fortæller mig. Er det fordi der i min tabel ikke er nogen post, hvor det gælder at kolonne1=1 - er det det du siger?"

Yes - Du har tomme data.  Null vil sige at datafeltet er tomt. Det er ikke det samme som den numeriske værdi 0.

Evt. kan du prøve at opdatere dine tomme felter til 0 og så køre din opdatering.
Avatar billede alexander_j Nybegynder
08. oktober 2007 - 22:44 #5
Mit felt er af typen 'tekst' (derfor jeg sætter den i '') burde den ikke kunne være tom?
Avatar billede kabbak Professor
08. oktober 2007 - 22:50 #6
UPDATE tabel SET tabel.Kolonne2 = IIf(IsNull([minvariabel]),Null,[minvariabel])
WHERE (((tabel.Kolonne1)=1));
Avatar billede alexander_j Nybegynder
08. oktober 2007 - 23:50 #7
kabbak-> melder samme fejl på trods af din kode.

Har stadig ikke helt forstået det:
"UPDATE tabel SET kolonne2='' WHERE kolonne1=1"

hvis kolonne2 er defineret som et tekstfelt (og tilladNulLængde er sat til ja), hvorfor kan man så ikke skrive kolonne2=''?
Avatar billede fdata Forsker
08. oktober 2007 - 23:54 #8
Det burde man også kunne.
Du har ikke sat egenskaben "Obligatorisk" til Ja, vel?
Avatar billede kabbak Professor
08. oktober 2007 - 23:56 #9
Eller den er med i nøglefeltet
Avatar billede alexander_j Nybegynder
09. oktober 2007 - 00:07 #10
Hmm, tror jeg er ved at indkredse fejlen

Det er ikke SQL-sætningen der er problemet ser det ud til.

Før min værdi sættes ind i sql-sætningen, kommer den igennem en funktion og det er åbenbart her problemet er (tror jeg):

function lyder noget ala:
public function text ( t as string ) as string
  text = t
End function

Når jeg henter en tom værdi fra min database fra fx kolonne 2, så opfattes den åbenbart som en Null og ikke som en string.

Kan jeg gøre noget for at sikre mig at min hentede værdi(rs!kolonne2) opfattes som en string?
Avatar billede terry Ekspert
09. oktober 2007 - 08:04 #11
Well I dont really see the point in th efunction if it deosnt do more than that.

But IF it is needed you could maybe use
'variant accepts NULL
public function text ( t as variant ) as string
  text = nz(t, "")
End function
Avatar billede terry Ekspert
09. oktober 2007 - 08:05 #12
another idea

public function text ( t as variant ) as string
  text = t & ""
End function
Avatar billede alexander_j Nybegynder
09. oktober 2007 - 16:12 #13
public function text ( t as string ) as string
  text = t
End function
^^er blot et simplificeret eksempel ;-)

Hvad betyder variant er det en generel betegnelse for en variabel som dækker alle typer?

Kom med svar mugs og kabbak, så skal jeg fordele efter bedste evne.
Avatar billede terry Ekspert
09. oktober 2007 - 16:21 #14
en variabel som dækker alle typer
Avatar billede terry Ekspert
09. oktober 2007 - 16:22 #15
what was the solution?
Avatar billede alexander_j Nybegynder
09. oktober 2007 - 16:30 #16
Public Function text(t As Variant) As String
    If t = Null Then
        text = ""
    Else
        text = Replace("" & t, "'", "''")
    End If
End Function

^^blev løsningen på mit problem - som jo viste sig at være noget andet end det jeg spurgte om - derfor vil jeg gerne fordele pointene lidt.
Avatar billede mugs Novice
09. oktober 2007 - 16:31 #17
Kun point hvis mit svar hjalp :o)
Avatar billede terry Ekspert
09. oktober 2007 - 16:34 #18
that applies to me too
Avatar billede terry Ekspert
09. oktober 2007 - 16:35 #19
didnt see that one from alexander ;o)
Avatar billede kabbak Professor
09. oktober 2007 - 19:24 #20
heller ingen til mig ;-))
Avatar billede alexander_j Nybegynder
10. oktober 2007 - 14:03 #21
1000 tak for hjælpen!
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