webForumDet fria alternativet

Ladda upp filer med AspUpload och samtidigt skicka värden till databas..

ASP

9 svar · 610 visningar · startad av Gardell

Medlem sedan juli 2002688 inlägg
Frågan#1

Hej!

Jag använder mig av AspUpload till mitt script, och så långt fungerar det väl. Det är två filer åt gången jag laddar upp och vill även välja kategori och ha en liten beskrivning i samma formulär även ta reda på filnamnen och spara det till en databas - här kommer problemen.

Först och främst lyckas jag inte köra en Request.Form efter att ha laddat upp filerna, då får jag följande fel:

Request object error 'ASP 0207 : 80004005'

Cannot use Request.Form

skicka.asp, line 41

Cannot use Request.Form collection after calling BinaryRead.

Min (luddiga) kod för att försöka få allt att fungera är följande:

Set Upload = Server.CreateObject("Persits.Upload")
Count = Upload.Save(Server.MapPath("/") & "\..\filer")
	
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("filer.mdb") 

Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "Select * From filer", Connect, 3, 3

RecSet.AddNew

RecSet("datum") = Date
RecSet("fil1") = File.Name
RecSet("fil2") = File.Name
RecSet("kategori") = Request.Form("kategori")
RecSet("beskrivning") = Request.Form("beskrivning")
RecSet.Update
RecSet.Close

Så ser det ut.. jag vet inte ens om hälften skulle fungera men det tar alltså stopp redan vid första Request.Form. :(

Dessutom så har jag ju två filformulärsfält, hur kan jag ta reda på filnamnet från båda de här två? Det lilla jag kunde rota fram på AspUpload.com var nåt med "File.Name" men det verkar väl bara vara för ett fält..

Hur göra? :) Tacksam för svar!

Medlem sedan juni 200032 967 inlägg
#2

Gardell skrev:

Först och främst lyckas jag inte köra en Request.Form efter att ha laddat upp filerna, då får jag följande fel:

Request object error 'ASP 0207 : 80004005'

Cannot use Request.Form

skicka.asp, line 41

Cannot use Request.Form collection after calling BinaryRead.

Det är helt riktigt. Därför har uploadkomponenterna egna metoder för att hämta värden från formulärfält.

foo = Upload.Form("foo")

Gardell skrev:

Dessutom så har jag ju två filformulärsfält, hur kan jag ta reda på filnamnet från båda de här två? Det lilla jag kunde rota fram på AspUpload.com var nåt med "File.Name" men det verkar väl bara vara för ett fält..

Du rotar inte speciellt bra. På denna sida finns detta exempel med en for-loop:

<%
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save "c:\upload"
%>

Files:<BR>
<%
For Each File in Upload.Files
Response.Write File.Name & "= " & File.Path & " (" & File.Size &" bytes)<BR>"
Next
%>

<P>

Other items:<BR>
<%
For Each Item in Upload.Form
Response.Write Item.Name & "= " & Item.Value & "<BR>"
Next
%>

mvh

Medlem sedan juli 2002688 inlägg
#3

Näeh.. jag får inte till det här. :(
Förstår inte riktigt hur man får fram filnamnen på båda filerna och skickar in de i databasen..

Dessutom får jag inte foo = Upload.Form("foo") att fungera heller. Vart ska den placeras och hur ska den formuleras?

Medlem sedan apr. 200315 inlägg
#4

RecSet("kategori") = Upload.Form("kategori")
RecSet("beskrivning") = Upload.Form("beskrivning")

När du använder aspupload definerar du en egen metod, som du kallade Upload så byt bara ut request mot Upload så ska det nog gå vägen.

Medlem sedan juli 2002688 inlägg
#5

Ahh. Så dum man känner sig. :) Tack!

Nu är frågan bara hur jag lyckas få fram namnet på båda filerna. Jag har provat massa men kommer bara fram till typ det här:

RecSet("fil1") = File.FileName
RecSet("fil2") = File.FileName

Och det funkar ju förstås inte.

Medlem sedan apr. 200315 inlägg
#6

File.Filename fungerar utmärkt för mig...

Medlem sedan juli 20041 183 inlägg
#7

Lösningen fanns bland tidigare svar i denna tråd...

<%
intFil = 1
For Each File in Upload.Files
	RecSet("fil" & intFil) = File.Name
	intFil = intFil + 1
Next
%>

Lite osäker på om man får skriva sådana dynamiska namn som jag gjort i RecordSet. Annars skall det fungera. Dessutom tycker jag det borde finnas något liknande File.Next. Jag har dock aldrig tittat på just det fallet så det är bara en gissning :)

Medlem sedan juli 2002688 inlägg
#8

Måste erkänna att jag är nollställd på det här.. :l

Testade lilja's kod (vet inte ens var den ska placeras) men fick följande svar:

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

send.asp, line 67

Line 67:
RecSet("fil" & intFil) = File.Name

Och hela koden:

	Set Upload = Server.CreateObject("Persits.Upload")
	Count = Upload.Save(Server.MapPath("/") & "\..\filer")
	
	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("filer.mdb") 

	Set RecSet = Server.CreateObject("ADODB.Recordset")
	RecSet.Open "Select * From filer", Connect, 3, 3
	
	intFil = 1
	For Each File in Upload.Files
	RecSet("fil" & intFil) = File.Name
	intFil = intFil + 1
	Next
	
	RecSet.AddNew

		RecSet("datum") = Date
		RecSet("filnamn") = FileName
		RecSet("filnamn2") = FileName
		RecSet("kategori") = Upload.Form("kategori")
		RecSet("beskrivning") = Upload.Form("beskrivning")
		RecSet.Update
		RecSet.Close
Medlem sedan juli 20041 183 inlägg
#9

Vad är det du ska göra egentligen? Varför är det två filer som skall laddas upp?

Finns det verkligen något som heter fil1 och fil2? Är det inte filnamn och filnamn2? I sådana fall ska du ändra detta...

	strExtra = ""
	For Each File in Upload.Files
	RecSet("filnamn" & strExtra) = File.Name
	strExtra= "2"
	Next

Jag tycker du ska fundera på hur din databas ser ut. Jag hade ändrat så att man bara spelar en fil till varje RecordSet.

Tabell: filer
Poster:
datum
filnamn
kategori
beskrivning

Sen lägger du in:

	RecSet.AddNew
	[Här skriver du RecordSetten som skall sparas]
	RecSet.Update
	RecSet.Close

innanför For Each satsen där du försöker spara två filnamn i en idag.

Medlem sedan apr. 200315 inlägg
#10

Enklare att använda SQL-satser?
Ex:

		For Each File In objUpload.Files
		strSQL = "INSERT INTO tabell(varde1, filnamn) VALUES('" & byt(objUpload.form("varde1")) &"', '" & File.Filename &"')" 
			objConn.Execute(strSQL)
		Next
267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)