|
| opdatere en tabel Fra : Klaus Egebjerg |
Dato : 12-11-02 20:08 |
|
Hej
Jeg sidder og leger med et scipt der skal opdatere en hel tabel. Jeg kan dog
ikke rigtigt finde fejlen i det. Er det nogen der kan hjælpe ?
Fejlen ser således ud:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (comma) in query
expression 'Ordrenr = 46, 47, 49, 50, 51, 52, 53, 54'.
/Ordreoversigtarkiv.asp, line 136
Når den skal opdatere hver enkelt ordernr. så tager den hele rækken
Selve koden ser såldes ud:
Dim Conn
function OpenConn (DBName)
Set Conn = Server.CreateObject("ADODB.Connection")
ODBCpath = left(request.ServerVariables("PATH_TRANSLATED"),
instrrev(request.ServerVariables("PATH_TRANSLATED"), "\"))
Conn.Open "DBQ=" & ODBCpath & DBName & ";DefaultDir=" & ODBCpath &
";Driver={Microsoft Access Driver (*.mdb)}"
End function
OpenConn("Arkiv.mdb")
strQ = "SELECT * FROM Ordrenr WHERE Status = 'Modtaget' "
strQ = strQ & "ORDER BY Ordrenr"
Set rs = Conn.Execute (strQ)
%>
<form ACTION="<%= Request.ServerVariables ("SCRIPT_NAME") %>" METHOD="POST"
id="form1" name="form1">
<html>
<body>
<table border="1" Width="95%" Align="Center"><tr>
<th align="Mid" Bgcolor="9999ff"> Ordrenr</th>
<th align="Mid" BGcolor="9999ff"> Ordredato</th>
<th align="Mid" Bgcolor="9999ff"> Navn</th>
<th align="Mid" Bgcolor="9999ff"> ordre total</th>
<th align="left" Bgcolor="9999ff"> Gl. Status</th>
<th align="left" Bgcolor="9999ff"> Ny Status</th>
<th align="left" Bgcolor="9999ff"> Betalingbeløb</th>
<th align="left" Bgcolor="9999ff"> Track</th>
<th align="Mid" Bgcolor="9999ff"> Kommentar</th>
</tr>
<%
' Opretter tabel
Ordrebeholdning = 0
While Not rs.EOF
Response.Write "<tr><td><Input Type=""TEXT"" SIZE=""10"" NAME=Ordrenr
VALUE=""" & rs("Ordrenr") & """>"
strOrdrenr = rs("Ordrenr")
ID = rs("Ordrenr")
Response.Write "<td Bgcolor= bfbfbf>" & rs("Dato") & "</td>"
Response.Write "<td Bgcolor= bfbfbf>" & rs("Navn") & "</td>"
Response.Write "<td Bgcolor= bfbfbf>" & rs("Kr") & "</td>"
Ordrebeholdning = Ordrebeholdning + rs("Kr")
Response.Write "<td Bgcolor= bfbfbf>" & rs("Status") & "</td>"
strNystatus = rs("Status")
If strNystatus = "Modtaget" Then
aSelected = "Selected"
Elseif strNystatus = "Delvis leveret" Then
bSelected = "Selected"
Elseif strNystatus = "Afventer Betaling" Then
cSelected = "Selected"
Elseif strNystatus = "Kan afhentes i Vejle" then
dSelected = "Selected"
Elseif strNystatus = "Kan afhentes i København" then
eSelected = "Selected"
Elseif strNystatus = "Klar til afsendelse" then
fSelected = "Selected"
Elseif strNystatus = "Afsendt" then
gSelected = "Selected"
End If
%>
<td><select Name="Nystatus" >
<option Value="Modtaget" <% = aSelected %> > Modtaget
<option Value="Delvis leveret" <% = bSelected %> > Delvis leveret
<option Value="Afventer Betaling" <% = cSelected %> > Afventer Betaling
<option Value="Kan afhentes i Vejle" <% = dSelected %> > Kan afhentes i
Vejle
<option Value="Kan afhentes i København" <% = eSelected %> > Kan afhentes i
København
<option Value="Klar til afsendelse" <% = fSelected %> > Klar til afsendelse
<option Value="Afsendt" <% = gSelected %> > Afsendt
</td>
</select>
<%
Response.Write "<td><Input Type=""TEXT"" SIZE=""10"" NAME=Betalingkr
VALUE=""" & rs("Betalingkr") & """>"
Response.Write "<td><Input Type=""TEXT"" SIZE=""10"" NAME=Track VALUE=""" &
rs("Track") & """>"
Response.Write "<td><Input Type=""TEXT"" SIZE=""10"" NAME=Kommentar
VALUE=""" & rs("Bemærkning") & """>"
rs.MoveNext
Wend
Response.Write "<tr><td><td><td>" & "Ordrebeholdning" & "<td>" &
ordrebeholdning
%>
</table>
<br>
<table>
<table align="Center">
<%
Response.Write "<tr><td align=""Mid""><INPUT TYPE=SUBMIT NAME=""DO""
VALUE=""Opdater""></td>"
%>
</table>
</form>
</body>
</html>
<%
Select Case Trim(Request.Form("DO"))
Case "Opdater"
strStatus = "Afsendt"
strBetalingkr = Trim(Request.Form("Betalingkr"))
strTrack = Trim(Request.Form("Track"))
strKommentar = Trim(Request.Form("Bemærkning"))
strOrdrenr = Trim(Request.Form("Ordrenr"))
nOrdrenr = Trim(Request.Form("Ordrenr"))
strAA = "UPDATE Ordrenr SET Status ='"&strStatus&"' WHERE Ordrenr = " &
strOrdrenr & ""
Conn.Execute(strAA)
End select
rs.close
Conn.Close
Set rs = Nothing
set Conn = Nothing
%>
| |
Jakob Andersen (12-11-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 12-11-02 20:25 |
|
"Klaus Egebjerg" <klausegebjerg@get2net.dk> wrote
> Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
>
> [Microsoft][ODBC Microsoft Access Driver] Syntax error (comma) in query
> expression 'Ordrenr = 46, 47, 49, 50, 51, 52, 53, 54'.
En = operator kan kun sammenligne med en værdi, du skal istedet for bruge IN
operatoren i din UPDATE sætning altså:
UPDATE Ordrenr SET Status ='"&strStatus&"' WHERE Ordrenr IN (" & strOrdrenr
& ")
Desuden virker det lidt spildt der hvor du skal bestemme hvilken status der
skal være valgt, smid værdierne i et array og loop så igennem dem og
sammenlign med værdien fra dit recordset.
--
Jakob Andersen
| |
Klaus Egebjerg (12-11-2002)
| Kommentar Fra : Klaus Egebjerg |
Dato : 12-11-02 20:55 |
|
"Jakob Andersen" <jakob@effectus.dk> wrote in message
news:aqrkfe$233m$1@news.cybercity.dk...
> "Klaus Egebjerg" <klausegebjerg@get2net.dk> wrote
> > Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
> >
> > [Microsoft][ODBC Microsoft Access Driver] Syntax error (comma) in query
> > expression 'Ordrenr = 46, 47, 49, 50, 51, 52, 53, 54'.
>
> En = operator kan kun sammenligne med en værdi, du skal istedet for bruge
IN
> operatoren i din UPDATE sætning altså:
>
> UPDATE Ordrenr SET Status ='"&strStatus&"' WHERE Ordrenr IN (" &
strOrdrenr
> & ")
>
> Desuden virker det lidt spildt der hvor du skal bestemme hvilken status
der
> skal være valgt, smid værdierne i et array og loop så igennem dem og
> sammenlign med værdien fra dit recordset.
>
> --
> Jakob Andersen
>
Hej igen
Det virker sådan set også fint, men man nu forestiller sig følgende ændring
i Update afdelingen:
Select Case Trim(Request.Form("DO"))
Case "Opdater"
'strStatus = "Afsendt"
strStatus = Trim(Request.Form("Nystatus"))
strBetalingkr = Trim(Request.Form("Betalingkr"))
strTrack = Trim(Request.Form("Track"))
strKommentar = Trim(Request.Form("Bemærkning"))
strOrdrenr = Trim(Request.Form("Ordrenr"))
nOrdrenr = Trim(Request.Form("Ordrenr"))
strAA = "UPDATE Ordrenr SET Status ='"&strStatus&"' WHERE Ordrenr IN ("
& strOrdrenr & ") "
Conn.Execute(strAA)
End select
Så tager koden og sætter alle status til alle mine select muligtheder altså:
"Modtaget,Delvisleveret......" Hvordan får jeg den til at lade være med det
?
Klaus
| |
Klaus Egebjerg (13-11-2002)
| Kommentar Fra : Klaus Egebjerg |
Dato : 13-11-02 22:02 |
|
"Klaus Egebjerg" <klausegebjerg@get2net.dk> wrote in message
news:32dA9.2157$HU.242451@news010.worldonline.dk...
>
> "Jakob Andersen" <jakob@effectus.dk> wrote in message
> news:aqrkfe$233m$1@news.cybercity.dk...
> > "Klaus Egebjerg" <klausegebjerg@get2net.dk> wrote
> > > Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
> > >
> > > [Microsoft][ODBC Microsoft Access Driver] Syntax error (comma) in
query
> > > expression 'Ordrenr = 46, 47, 49, 50, 51, 52, 53, 54'.
> >
> > En = operator kan kun sammenligne med en værdi, du skal istedet for
bruge
> IN
> > operatoren i din UPDATE sætning altså:
> >
> > UPDATE Ordrenr SET Status ='"&strStatus&"' WHERE Ordrenr IN (" &
> strOrdrenr
> > & ")
> >
> > Desuden virker det lidt spildt der hvor du skal bestemme hvilken status
> der
> > skal være valgt, smid værdierne i et array og loop så igennem dem og
> > sammenlign med værdien fra dit recordset.
> >
> > --
> > Jakob Andersen
> >
> Hej igen
>
> Det virker sådan set også fint, men man nu forestiller sig følgende
ændring
> i Update afdelingen:
>
> Select Case Trim(Request.Form("DO"))
>
> Case "Opdater"
>
> 'strStatus = "Afsendt"
> strStatus = Trim(Request.Form("Nystatus"))
> strBetalingkr = Trim(Request.Form("Betalingkr"))
> strTrack = Trim(Request.Form("Track"))
> strKommentar = Trim(Request.Form("Bemærkning"))
> strOrdrenr = Trim(Request.Form("Ordrenr"))
> nOrdrenr = Trim(Request.Form("Ordrenr"))
>
> strAA = "UPDATE Ordrenr SET Status ='"&strStatus&"' WHERE Ordrenr IN
("
> & strOrdrenr & ") "
> Conn.Execute(strAA)
> End select
>
> Så tager koden og sætter alle status til alle mine select muligtheder
altså:
> "Modtaget,Delvisleveret......" Hvordan får jeg den til at lade være med
det
> ?
>
> Klaus
>
>Hej Igen
Nu har jeg siddet og leget lidt mere med det. Hvis jeg laver UPDATE
sætningen således
strAA = "UPDATE Ordrenr SET Status = '"&strStatus1&"' WHERE Ordrenr IN (" &
strOrdrenr & ") "
Så opstår sammen problem igen, nemlig at den tager status fra alle mine
rækker, og indsætter for alle ordernr. Derfor forsøgte jeg lige som sidst,
at sætte et lille IN ind i sætningen således:
strAA = "UPDATE Ordrenr SET Status IN ('" & strStatus1 & "') WHERE Ordrenr
IN (" & strOrdrenr & ") "
Så får jeg bare ne fejl med at der er en fejl. Hvad gør jeg forkert ??
Klaus
| |
Jakob Andersen (13-11-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 13-11-02 22:22 |
|
"Klaus Egebjerg" <klausegebjerg@get2net.dk> wrote
> Nu har jeg siddet og leget lidt mere med det. Hvis jeg laver UPDATE
> sætningen således
Dit problem er at du får alle værdierne af dine status sendt til scriptet,
prøv evt. at undersøge om det rigtige data overhovedet bliver sendt med ved
at sætte post typen i din form til at være GET og derved se i Querystringen.
--
Jakob Andersen
| |
Klaus Egebjerg (13-11-2002)
| Kommentar Fra : Klaus Egebjerg |
Dato : 13-11-02 22:40 |
|
"Jakob Andersen" <jakob@effectus.dk> wrote in message
news:aqufpq$1sjl$1@news.cybercity.dk...
> "Klaus Egebjerg" <klausegebjerg@get2net.dk> wrote
> > Nu har jeg siddet og leget lidt mere med det. Hvis jeg laver UPDATE
> > sætningen således
>
> Dit problem er at du får alle værdierne af dine status sendt til scriptet,
> prøv evt. at undersøge om det rigtige data overhovedet bliver sendt med
ved
> at sætte post typen i din form til at være GET og derved se i
Querystringen.
>
> --
> Jakob Andersen
>
Hej
Jo det er de rigtige data der bliver sendt, men det er bare som om den ikke
tager hver linie for sig selv, men derimod tager hele kolonne og indsætter
på databasen i hele rækken ned.
Er det noget sted hvor jeg finder mere information omkring updatering er
tabeller ?
Klaus
| |
Jakob Andersen (13-11-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 13-11-02 22:44 |
|
"Klaus Egebjerg" <klausegebjerg@get2net.dk> wrote
> Jo det er de rigtige data der bliver sendt, men det er bare som om den
ikke
> tager hver linie for sig selv, men derimod tager hele kolonne og indsætter
> på databasen i hele rækken ned.
Kan du ikke prøve at lægge dit eksempel op så kan det være det er lettere
for mig at se hvad der går galt, jeg har på fornemmelsen det er i
HTML'en/Postningen et sted.
> Er det noget sted hvor jeg finder mere information omkring updatering er
> tabeller ?
Det rent SQL mæssige kan du læse om her:
< http://www.w3schools.com/sql/sql_update.asp>
--
Jakob Andersen
| |
Jens Gyldenkærne Cla~ (14-11-2002)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 14-11-02 00:22 |
|
Klaus Egebjerg skrev:
> Jo det er de rigtige data der bliver sendt, men det er bare
> som om den ikke tager hver linie for sig selv, men derimod
> tager hele kolonne og indsætter på databasen i hele rækken
> ned.
Det lyder som om du bruger de samme feltnavne mange gange i en
formular. Når du sender formen er der _kun_ oplysninger om
feltnavne og værdier. Det vil sige at hvis du har fem linjer med
hver to felter - id og status, så får du to værdier når du henter
din form, ikke fem eller ti.
Fx kan Request.Querystring("id") give: 1, 4, 7, 23, 15
og Request.Querystring("status") give: "ok", "mangler", "ok",
"venter", "ok".
Du kan ikke bare bruge rækkefølgen af elementer - for der kan
mangle et element, hvis der ikke er udfyldt data i det. Brug enten
en form der kun håndterer ét element ad gangen eller også en
navngivning hvor feltnavnene er unikke.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.
| |
Klaus Egebjerg (14-11-2002)
| Kommentar Fra : Klaus Egebjerg |
Dato : 14-11-02 22:26 |
|
"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns92C63C9E4F0Djcdmfdk@gyrosmod.cybercity.dk...
> Klaus Egebjerg skrev:
>
> > Jo det er de rigtige data der bliver sendt, men det er bare
> > som om den ikke tager hver linie for sig selv, men derimod
> > tager hele kolonne og indsætter på databasen i hele rækken
> > ned.
>
> Det lyder som om du bruger de samme feltnavne mange gange i en
> formular. Når du sender formen er der _kun_ oplysninger om
> feltnavne og værdier. Det vil sige at hvis du har fem linjer med
> hver to felter - id og status, så får du to værdier når du henter
> din form, ikke fem eller ti.
>
> Fx kan Request.Querystring("id") give: 1, 4, 7, 23, 15
> og Request.Querystring("status") give: "ok", "mangler", "ok",
> "venter", "ok".
>
> Du kan ikke bare bruge rækkefølgen af elementer - for der kan
> mangle et element, hvis der ikke er udfyldt data i det. Brug enten
> en form der kun håndterer ét element ad gangen eller også en
> navngivning hvor feltnavnene er unikke.
> --
> Jens Gyldenkærne Clausen
Hej igen
Beklager men det her har jeg sku lidt svært ved at fidne ud af. Kan det
virke passe at hvis man laver en tabel som består af et ukendt antale rækker
men af et felt der er unikt, at man så ikek bare på en simpel måde kan
opdatere de enkelte felter.
I kan se siden her http://www.brygladen.dk/Ordreoversigtarkiv.asp
Den er jo faktisk enkel nok. Jeg har enda tilføjet en kolonne således at jeg
kender nummeret på linien, men jeg synes stadigvæk ikke rigtig at jeg kan få
lov til at udvælge et felt ud af fx. "Ny Status" og opdatere den værdi (og
kun den værdi) med det tilhørerne ordrenr.
Er der nogen af jer der evt. kender et sted hvor man kan se en kode på
ovenstående er virker ?
Klaus
| |
Jørgen Müller (14-11-2002)
| Kommentar Fra : Jørgen Müller |
Dato : 14-11-02 23:45 |
|
Hej Klaus
For mig at se ligger problemet her
[snip]
strOrdrenr = Trim(Request.Form("Ordrenr"))
nOrdrenr = Trim(Request.Form("Ordrenr"))
strAA = "UPDATE Ordrenr SET Status ='"&strStatus&"' WHERE Ordrenr = " &
strOrdrenr & ""
[snip]
for du har indlæst en hel del ordrenumre i din forms.ordrenr, hviket et vil
du have at programmet automatisk skal vælge? Du må fortælle hvilket du vil
ændre før du udfører din UPDATE.
Du kan se lidt af det på
http://www.smaabaadsklub.dk/aktivitet/aktiviteter.asp hvor du i venstre side
har mulighed for at redigere indholdet. Hold musen over linket og aflæs i
nederste venstre hjørne.
her er der i koden lavet et link
Response.Write "<A HREF=""AktivitetForm.asp?Mode=Edit&ID= " &
objRS("AktivitetID") &_
""">" & objRS("AktivitetID") & "</A></TD>"
og felterne i formen bliver så udfyldt af et nyt rs valgt ud fra
AktivitetID.
Håber det giver dig inspiration til at fortsætte.
Med Venlig Hilsen
Jørgen Müller
| |
Jens Gyldenkærne Cla~ (14-11-2002)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 14-11-02 23:01 |
|
Klaus Egebjerg skrev:
> Beklager men det her har jeg sku lidt svært ved at fidne ud
> af. Kan det virke passe at hvis man laver en tabel som består
> af et ukendt antale rækker men af et felt der er unikt, at man
> så ikek bare på en simpel måde kan opdatere de enkelte felter.
Jeg skal ikke kunne sige om den er simpel - men du kan gøre det ved
at lave en form på hver linje.
Det vil sige at i stedet for en opdaterknap forneden får du en
opdaterknap pr linje - og den opdaterer naturligvis kun den linje
den står på.
> I kan se siden her
> http://www.brygladen.dk/Ordreoversigtarkiv.asp
Tak - det var rart (det er langt lettere at forholde sig til et
problem når man kan se hvordan siden ser ud)
> Den er jo faktisk enkel nok. Jeg har enda tilføjet en kolonne
> således at jeg kender nummeret på linien
Linjer har ikke nogen betydning i en form. Hvis du vil bruge en
fællesform som nu skal du lave en løbende navngivning af dine
felter - fx:
linje1, ordrenr1, ordredato1, navn1, ....
linje2, ordrenr2, ordredato2, navn2, ....
etc.
Nummereringen klares af den aspløkke du alligevel skal bruge til at
udskrive postsættet. Når du skal aflæse formdata har du det problem
at du ikke ved hvor mange linjer der skal læses. Men hvis du
indfører et skjult felt med antallet af linjer i din form, så kan
din formhandler starte med at hente dette tal, og så hente
værdierne for én linje ad gangen, udfra den fælles navngivning med
feltnavn + tal.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.
| |
|
|