/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Slette indlæg i gæstebog
Fra : Erik Ginnerskov


Dato : 01-09-05 23:47

Hej NG

Jeg har til min gæstebog lavet et administrationsmodul. Det fungerer
upåklageligt, så længe databasen ligger i webscope.
Koden til at slette enkeltindlæg ser sådan ud:

<% Dim id
id = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("[databasefilen]")
Conn.Open DSN
Conn.Execute("DELETE * FROM guestbook WHERE id=" & id)
Conn.Close
Set Conn = Nothing
Response.Redirect("[administrationssiden]") %>

Men hvis basen ligger ude af webscope, kan jeg ikke få det til at virke. Den
kode, som åbner gæstebogen (når gæster skriver), ser sådan ud:

<%
Const adOpenKeyset = 1
Const adLockOptimistic = 3

strMode = Request.QueryString("mode")
tempConn = "Data Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
....
%>

Ud fra det har jeg prøvet at lave det sådan:

<% Dim id
id = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("[databasefilen]") & ";UID=admin;PWD=;"
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Conn = "Data Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
Conn.Execute("DELETE * FROM guestbook WHERE id=" & id)
Conn.Close
Set Conn = Nothing
Response.Redirect("[administrationssiden]") %>

Men når jeg prøver at slette et indlæg, får jeg denne fejlmelding:

Microsoft VBScript runtime error '800a01a8'
Object required: 'Conn'
/[slettefilen], line 9

Linje 9 er denne:

Conn.Execute("DELETE * FROM guestbook WHERE id=" & id)

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



 
 
//Andreas (02-09-2005)
Kommentar
Fra : //Andreas


Dato : 02-09-05 07:30

Erik Ginnerskov wrote:

> Men når jeg prøver at slette et indlæg, får jeg denne fejlmelding:
>
> Microsoft VBScript runtime error '800a01a8'
> Object required: 'Conn'
> /[slettefilen], line 9
>
> Linje 9 er denne:
>
> Conn.Execute("DELETE * FROM guestbook WHERE id=" & id)

Prøv at fjern * - altså:
Conn.Execute("DELETE FROM guestbook WHERE id=" & id)

mvh.
//Andreas



Erik Ginnerskov (02-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 02-09-05 14:49

//Andreas wrote:

>> Conn.Execute("DELETE * FROM guestbook WHERE id=" & id)
>
> Prøv at fjern * - altså:
> Conn.Execute("DELETE FROM guestbook WHERE id=" & id)

Det gav ikke noget. Samme fejl.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Jan Vinten (02-09-2005)
Kommentar
Fra : Jan Vinten


Dato : 02-09-05 09:00

Hej Erik,

Prøv nedenstående:

<%

Response.Buffer = True

Dim ID
Const adOpenKeyset = 1
Const adLockOptimistic = 3

ID = Request.QueryString("id")

Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="[din
database sti]"

strSQL = "DELETE * FROM guestbook WHERE id=" & id
Set rs = myConn.Execute(strSQL)

myConn.Close
Set myConn = Nothing

Response.Redirect("[administrationssiden]") %>

%>


Jens Gyldenkærne Cla~ (02-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-09-05 10:07

Erik Ginnerskov skrev:

> Conn = "Data
> Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"

Din primære fejl ligger herover. Her sætter du Conn til en simpel
streng - og når du efterfølgende prøver at bruge den som et objekt,
går det galt.

Du skal i stedet åbne Conn med DNS som parameter (som i dit første
eksempel):

Conn.Open DSN


> Conn.Execute("DELETE * FROM guestbook WHERE id=" & id)

Ovenstående virker sikkert o.k., men jeg vil foreslå dig to
ændringer. For det første er det en god ide at bruge en variabel
til sql-sætningen - det letter en evt. fejlfinding. Dernæst er
stjernen egentlig ikke korrekt i en DELETE-sætning (men Access
godtager den alligevel). En DELETE-sætning kan kun slette hele
poster, derfor er det helt overflødigt at angive felter. I andre
databaser vil brug af stjernen i en DELETE-sætning give fejl -
derfor kan man lige så godt vænne sig af med at bruge den.

Derfor:

   strSQL = "DELETE FROM guestbook WHERE id=" & id
   Conn.Execute (strSQL)
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (02-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 02-09-05 15:05

Jens Gyldenkærne Clausen wrote:
> Erik Ginnerskov skrev:
>
>> Conn = "Data
>> Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
>
> Din primære fejl ligger herover. Her sætter du Conn til en simpel
> streng - og når du efterfølgende prøver at bruge den som et objekt,
> går det galt.
>
> Du skal i stedet åbne Conn med DNS som parameter (som i dit første
> eksempel):
>
> Conn.Open DSN

OK, jeg prøvede at skrive det om sådan:

<% Dim id
id = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("[gaestebog.mdb]") & ";UID=admin;PWD=;"
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Conn.Open DSN
Conn = "Data Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
Conn.Execute("DELETE FROM guestbook WHERE id=" & id)
Conn.Close
Set Conn = Nothing
Response.Redirect("[administrations-side]") %>

Så får jeg denne fejlmelding:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open
registry key 'Temporary (volatile) Jet DSN for process 0x4a8 Thread 0x310
DBC 0x2e678e4 Jet'.
/[slettefunktionsfilen], line 9

Linje 9 er denne: Conn.Open DSN

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Kasper Lindberg (02-09-2005)
Kommentar
Fra : Kasper Lindberg


Dato : 02-09-05 15:12


"Erik Ginnerskov" <erik@donotspammmeplease.invalid> skrev i en meddelelse
news:43185bf7$0$18642$14726298@news.sunsite.dk...
> Jens Gyldenkærne Clausen wrote:
>> Erik Ginnerskov skrev:
>>
>>> Conn = "Data
>>> Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
>>
>> Din primære fejl ligger herover. Her sætter du Conn til en simpel
>> streng - og når du efterfølgende prøver at bruge den som et objekt,
>> går det galt.
>>
>> Du skal i stedet åbne Conn med DNS som parameter (som i dit første
>> eksempel):
>>
>> Conn.Open DSN
>
> OK, jeg prøvede at skrive det om sådan:
>
> <% Dim id
> id = Request.QueryString("id")
> Set Conn = Server.CreateObject("ADODB.Connection")
> DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> DSN = DSN & "DBQ=" & Server.MapPath("[gaestebog.mdb]") &
> ";UID=admin;PWD=;"
> Const adOpenKeyset = 1
> Const adLockOptimistic = 3
> Conn.Open DSN
> Conn = "Data Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
> Conn.Execute("DELETE FROM guestbook WHERE id=" & id)
> Conn.Close
> Set Conn = Nothing
> Response.Redirect("[administrations-side]") %>
>
> Så får jeg denne fejlmelding:
>
> Microsoft OLE DB Provider for ODBC Drivers error '80004005'
> [Microsoft][ODBC Microsoft Access Driver]General error Unable to open
> registry key 'Temporary (volatile) Jet DSN for process 0x4a8 Thread 0x310
> DBC 0x2e678e4 Jet'.
> /[slettefunktionsfilen], line 9
>
> Linje 9 er denne: Conn.Open DSN
>

Nej, Ifølge den medsendte kode er linie 9 følgende:

Conn = "Data Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"

Jeg vil påstå at du skal slette den (du skulle erstatte den med "Conn.Open
DSN")

/Kasper



Erik Ginnerskov (02-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 02-09-05 15:18

Kasper Lindberg wrote:

> Nej, Ifølge den medsendte kode er linie 9 følgende:

Du tæller forkert, fordi jeg i den refererede kode har fjernet nogle tomme
linjer, som figurerer i den oprindelige kode. Men det kunne du jo ikke vide.
;)

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Kasper Lindberg (02-09-2005)
Kommentar
Fra : Kasper Lindberg


Dato : 02-09-05 15:48


"Erik Ginnerskov" <erik@donotspammmeplease.invalid> skrev i en meddelelse
news:43185f0a$0$18640$14726298@news.sunsite.dk...
> Kasper Lindberg wrote:
>
>> Nej, Ifølge den medsendte kode er linie 9 følgende:
>
> Du tæller forkert, fordi jeg i den refererede kode har fjernet nogle tomme
> linjer, som figurerer i den oprindelige kode. Men det kunne du jo ikke
> vide.
> ;)
>

Okay, men jeg mener stadig at du skal fjerne den linie.
(Jeg kan i hvert fald ikke se hvad den skal gøre godt for (som den står nu))

Det kan være at du skal smide Provider ind i din DSN-tekststreng: (i stedet
for)

DSN = "DRIVER={Microsoft Access Driver (*.mdb)};" 'har fjernet et
mellemrum mellem ; og "
DSN = DSN & "Provider=Microsoft.Jet.OLEDB.4.0;" 'Har indsat provider
DSN = DSN & "DBQ=" & Server.MapPath("[gaestebog.mdb]") & _
";UID=admin;PWD=;"

Conn.Open DSN

Hvis det ikke virker ved jeg ikke hvad der er galt

/Kasper



Erik Ginnerskov (02-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 02-09-05 15:21

Kasper Lindberg wrote:

> Conn = "Data Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
>
> Jeg vil påstå at du skal slette den (du skulle erstatte den med
> "Conn.Open DSN")

Og hvordan skal funktionen så finde databasen, når jeg fjerner sti og
filnavn?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Erik Ginnerskov (02-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 02-09-05 15:29

Kasper Lindberg wrote:

> Jeg vil påstå at du skal slette den (du skulle erstatte den med
> "Conn.Open DSN")

Jeg prøvede dette:

<% Dim id
id = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("[sti/database]") & ";UID=admin;PWD=;"
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Conn.Open DSN
Conn.Execute("DELETE FROM guestbook WHERE id=" & id)
Conn.Close
Set Conn = Nothing
Response.Redirect("[administrations-fil]") %>

og fik så denne fejl:

Server.MapPath() error 'ASP 0173 : 80004005'
Invalid Path Character
/[slettefunktionsfilen], line 5
An invalid character was specified in the Path parameter for the MapPath
method.

hvor linje 5 er denne:

DSN = DSN & "DBQ=" & Server.MapPath("[sti/database]") & ";UID=admin;PWD=;"

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Jens Gyldenkærne Cla~ (02-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-09-05 15:39

Erik Ginnerskov skrev:

> An invalid character was specified in the Path parameter for
> the MapPath method.
>
> hvor linje 5 er denne:
>
> DSN = DSN & "DBQ=" & Server.MapPath("[sti/database]") &
> ";UID=admin;PWD=;"

Er "[sti/database]" en relativ sti? (altså fx "db/data.mdb")

Hvis du bruger MapPath skal det være en sti der kan nås fra
webscope.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (02-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 02-09-05 15:59

Jens Gyldenkærne Clausen wrote:

>> DSN = DSN & "DBQ=" & Server.MapPath("[sti/database]") &
>> ";UID=admin;PWD=;"
>
> Er "[sti/database]" en relativ sti? (altså fx "db/data.mdb")

Det er samme stiangivelse, som selve gæstebogen benytter for at man skal
kunne skrive i bogen - databasefilen ligger ude af webscope.
>
> Hvis du bruger MapPath skal det være en sti der kan nås fra
> webscope.

Hvordan skal basen så adresseres?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Jens Gyldenkærne Cla~ (02-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-09-05 15:43

Erik Ginnerskov skrev:

>> Conn = "Data
>> Source=[sti/database];Provider=Microsoft.Jet.OLEDB.4.0;"
>>
>> Jeg vil påstå at du skal slette den

Jep.

> Og hvordan skal funktionen så finde databasen, når jeg fjerner
> sti og filnavn?

Sti- og filnavn skal indgå i argumentet til Conn.Open (dsv.
variablen DSN).

Der hvor du nu har:

DSN = DSN & "DBQ=" & Server.MapPath("[gaestebog.mdb]")

- skal der stå:

DSN = DSN & "DBQ=" & Server.MapPath("dbsti/gaestebog.mdb")

(NB: du skal ikke bruge firkantparanteser om fil/stinavne - jeg
troede først at det bare var pladsholdere, men hvis du bruger dem i
din kode, skal de ud igen).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (02-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-09-05 20:35

Erik Ginnerskov skrev:

>> Er "[sti/database]" en relativ sti? (altså fx "db/data.mdb")
>
> Det er samme stiangivelse, som selve gæstebogen benytter

Kan du så ikke bare bruge samme angivelse som du har i den anden
fil (den hvor man skriver til databasen)?

> databasefilen ligger ude af webscope.

I så fald skal du måske angive en direkte sti (fx
"D:\webs\ginnerskov\db\gaest.mdb") - men igen, tjek hvordan du har
angivet forbindelsen i dine andre filer.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (02-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 02-09-05 23:06

Jens Gyldenkærne Clausen wrote:

> I så fald skal du måske angive en direkte sti (fx
> "D:\webs\ginnerskov\db\gaest.mdb") - men igen, tjek hvordan du har
> angivet forbindelsen i dine andre filer.

Det er det, jeg mener at have gjort.

Spørgsmålet er, hvad jeg skal skrive i den linje hen til ("d:\, for at få
åbnet databasen, så jeg kan slette en post.

<% Dim id
id = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("d:\webs\ginnerskov\db\gaest.mdb") &
";UID=admin;PWD=;"
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Conn.Open DSN
Conn.Execute("DELETE FROM guestbook WHERE id=" & id)
Conn.Close
Set Conn = Nothing
Response.Redirect("gbs.asp") %>

.... giver denne fejlbesked:

The Path parameter for the MapPath method must be a virtual path. A physical
path was used.

Sætter jeg [] omkring path, får jeg denne fejl:

An invalid character was specified in the Path parameter for the MapPath
method.

Koden i gæstebogens tilsvarende linje ser sådan ud:

Server.MapPath("gaest.mdb") & ";UID=admin;PWD=;"
tempConn = "Data
Source=d:\webs\ginnerskov\db\gaest.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Johnny Winther Ronne~ (03-09-2005)
Kommentar
Fra : Johnny Winther Ronne~


Dato : 03-09-05 21:02

In news:<4318cce6$0$18638$14726298@news.sunsite.dk>
Erik Ginnerskov typed:'

Hvis jeg læser denne tråd rigtigt så har du to problemer, du har
placeret databasen uden for scope, men mangler at angive en sti til den,
da man tilsyndeladende stadig kan skrive i den fra en anden side, så er
det den sti der er benyttet på den side, der er den rigtige.

Da det tilsynelandende har virket hidtil, må spørgsmålet være hvad har
ændret sig? Hvis man ikke ved hvorfor man skal ændre funktionel kode, så
skal man lade være. En fejl kunne være at der er oprettet en DSN der
gemmes i registreringsdatabasen, men at linien af en eller andern grund
er blevet slettet og det er grund nok til, at det ikke virker.

Når problemet opstår så er det formentlig, fordi du bruger flere
forskellige måder at tilgå databasen, Det gør det sværere at finde
fejlen, både for dig selv og for andre.

Med venlig hilsen
Johnny Winther Ronnenberg

--
Internettet er for alle!
http://80.62.61.212/webuseability/index.asp



Erik Ginnerskov (03-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 03-09-05 21:50

Johnny Winther Ronnenberg wrote:

> Hvis jeg læser denne tråd rigtigt så har du to problemer, du har
> placeret databasen uden for scope, men mangler at angive en sti til
> den, da man tilsyndeladende stadig kan skrive i den fra en anden
> side, så er det den sti der er benyttet på den side, der er den
> rigtige.

Selve stien til databasen er jeg ikke i tvivl om. Den kan jeg aflæse i det
script, der skriver til basen.

> Da det tilsynelandende har virket hidtil,

Det er en forkert antagelse. Jeg fortalte først i tråden, at hvis databasen
ligger i webscope, kan jeg uden problemer få lov til at slette indlæg i
gæstebogen. Den test er først kørt lokalt og derefter i en kopi af
databasen, lagt i roden på serveren.

Men den originale database ligger som nævnt uden for webscope, så jeg kan
ikke finde ud af at åbne databasen. Som Jens skriver, kan det ikke gøres med
den samme kommando som hvis basen ligger i scope - men hvordan så? Et forsøg
på at kopiere komandoen fra det script, som skriver til basen, virker ikke.

> Hvis man ikke ved hvorfor man skal ændre funktionel kode,
> så skal man lade være.

Det er vi helt enige om. Jeg ville aldrig ændre noget bare for ændringen
alene.

Sagen er bare, at den funktion, som jeg efter lokalt forsøg havde bildt mig
selv ind var i orden, alligevel ikke var det (logisk nok), da jeg en dag
ville slette et perfidt indlæg i gæstebogen.

Jeg var nødt til at hente basen hjem, slette lokalt og lægge basen ud igen.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Jens Gyldenkærne Cla~ (04-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-09-05 21:59

Erik Ginnerskov skrev:

>> I så fald skal du måske angive en direkte sti

> Det er det, jeg mener at have gjort.

- men du bruger stadig Server.Mappath, det skal du ikke (MapPath's
funktion er at oversætte en sti i webscope til en sti på
filsystemet).

> Server.MapPath("d:\webs\ginnerskov\db\gaest.mdb") &

Slet kaldet til Server.MapPath herover - så burde det køre.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (05-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 05-09-05 22:33

Jens Gyldenkærne Clausen wrote:

> Slet kaldet til Server.MapPath herover - så burde det køre.

Bingo.

Scriptet ser nu sådan ud:

<% Dim id
id = Request.QueryString("id")
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & ("d:\xxx\xxx\db\xxx.mdb")
Conn.Open DSN
Conn.Execute("DELETE FROM guestbook WHERE id=" & id)
Conn.Close
Set Conn = Nothing
Response.Redirect("xxx.xxx") %>

Og nu virker det. Tak for kampen.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste