20. august 2005 - 22:49Der er
10 kommentarer og 1 løsning
Upload problem med if sætning
Jeg har en form, hvor jeg anvender en file upload funktion (persits). Når man sendes videre til sql siden hvor information sættes ind eller redigeres som i nedenstående tilfælde, støder jeg på et problem hvis jeg ikke skriver noget i form feltet.
Skriver jeg ikke noget i feltet, får jeg denne fejl: Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8) Et objekt er obligatorisk /rettesql.asp, line 39
Nuvel, jeg prøver denne kombination i stedet: if Upload.form("file1") <> "" then file1 = Upload.Form("file1") Set file1 = Upload.Files("file1") file1 = file1.ExtractFileName strSQL = "Update film set file1='" & file1 & "' where ID= " & Upload.form("ID") Conn.Execute(strSQL) end if
- men dette gør bare at ingenting sker, selvom jeg udfylder mit form felt.
Hedder din form rent faktisk "file1" eller er det en tastefejl?
Det jeg først ville kigge efter med den fejlbesked var om jeg manglede at benytte "set" foran nogle variable. Hvis der bliver tildelt et objekt til en variabel som ikke benytter
set variabel = objekt
opstår den fejl.
Jeg studser over at du bruger file1 til 3 forskellige værdier (hvilket jeg ikke vil anbefale nogen programmører :)). Jeg tror det er der løsningen til dit problem skal findes...
Formen hedder file1, for alting kører fint hvis feltet udfyldes...Grunden til at jeg anvender 3 forskellige værdier, skal jeg ikke lige gøre mig klog på ;-), da jeg har taget eksemplet fra deres dokumentation. Men når jeg sætter tråden ind første gang gøres det således:
<% Set Upload = Server.CreateObject("Persits.Upload.1") Upload.OverwriteFiles = True Upload.SetMaxSize 1000000, True Upload.SaveVirtual ("billeder/") %> <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/film.mdb") Conn.Open DSN file1 = Upload.Form("file1") Set file1 = Upload.Files("file1") If file1 is nothing Then file1 = "" Else file1 = file1.ExtractFileName End if %> <% strSQL = "Insert into film (file1) values('" & file1 & "')" Conn.Execute(strSQL) %>
-og det virker fint, selvom feltet ikke udfyldes...MEn der anvender jeg jo også linien: If file1 is nothing Then file1 = "" - men den kan jeg ikke anvende, da file1 måske indeholder information i databasen som jeg sandsynligvis gerne vil beholde og derfor ikke udfylder feltet.
OK, hvis feltet er nothing når det er tomt, er du vel næsten pisket til at forholde dig til dette ellers kommer det vel ikke til at fungere...? Er det ikke snarere et spørgsmål om at du ikke skal indsætte værdien i databasen hvis feltet er tomt?
Umiddelbart vil jeg jo mene du selv lige har skitseret løsningen, nemlig hvor du checker om file1 er nothing inden du aflæser filnavnet. Altså:
Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/film.mdb") Conn.Open DSN file1 = Upload.Form("file1") Set file1 = Upload.Files("file1") If not file1 is nothing Then file1 = file1.ExtractFileName strSQL = "Insert into film (file1) values('" & file1 & "')" Conn.Execute(strSQL) End if
Sikken du kan softspot....Havde ellers lige lært om null og ""... Nu smider du en anden regel i min korttids hukommelse ;-)
Nå, men jeg redigerede den lige til min update streng så den kom til at se således ud:
file1 = Upload.Form("file1") Set file1 = Upload.Files("file1") If not file1 is nothing Then file1 = file1.ExtractFileName strSQL = "Update film set file1='" & file1 & "' where ID= " & Upload.form("ID") Conn.Execute(strSQL) End if
Takker for hjælpen... Hvis du lige smider et svar!
Ja, nothing, null, tomme strenge og udefinerede variable... det er et helvede at være udvikler med alle de begreber er skal holdes styr på - og man bliver af og til fanget næsten uanset hvor cool man så end måtte være :|
Godt du fik det løst (selvom jeg var lidt sløv i optrækket)... :)
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.