Avatar billede killstun Nybegynder
20. august 2005 - 22:49 Der 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.

sql.asp (udsnit):
<%
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")
file1 = file1.ExtractFileName
strSQL = "Update film set file1='" & file1 & "' where ID= " & Upload.form("ID")
Conn.Execute(strSQL)
%>

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.

What to do????
Avatar billede killstun Nybegynder
20. august 2005 - 22:50 #1
Skal lige tilføje at kolonnen i databasen ikke er null, da der findes et billede i forvejen....så det kan godt udelukkes...
Avatar billede softspot Forsker
20. august 2005 - 23:01 #2
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...
Avatar billede softspot Forsker
20. august 2005 - 23:02 #3
Hvad indeholder kodelinien 39 i øvrigt?
Avatar billede killstun Nybegynder
20. august 2005 - 23:14 #4
linie 39: file1 = file1.ExtractFileName

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.
Avatar billede killstun Nybegynder
20. august 2005 - 23:17 #5
hov, det blev lige redigeret for meget...tag dig ikke af %> og <% mellem End if og strSQL sætningerne.
Avatar billede softspot Forsker
20. august 2005 - 23:21 #6
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?
Avatar billede killstun Nybegynder
20. august 2005 - 23:24 #7
jo, netop...men hvorledes kan jeg gøre dette?
Avatar billede softspot Forsker
20. august 2005 - 23:26 #8
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
Avatar billede killstun Nybegynder
20. august 2005 - 23:38 #9
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!
Avatar billede softspot Forsker
20. august 2005 - 23:46 #10
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)... :)
Avatar billede softspot Forsker
21. august 2005 - 00:53 #11
...og tak for point :)
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
Kurser inden for grundlæggende programmering

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