/ 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
ASP & Access
Fra : Jens Jensen


Dato : 01-11-02 13:47

Hej NG,

Jeg har et måske stort problem, som jeg ikke selv kan løse. Jeg vil gerne
opdater en betaling se
http://www.kif-atletik.dk/testsite/opdatering_betaling.asp

Jeg ved bare ikke hvordan jeg gør alle felterne unikke så de kan opdateret i
database. Jeg har gengivet koden nedenfor


<HTML><HEAD>
<%
' Databaseforbindelse
Dim dbconnect
Set dbconnect = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
Server.MapPath("../database/betalingtest.mdb")
dbconnect.Open strDSN

'SQL forespørgsel
Dim strQ, rsData
strQ = "SELECT id, fornavn, efternavn, betalt FROM Resultater"
Set rsData = dbconnect.execute(strQ)
%>
</HEAD>

<BODY>
<DIV ID=H1>Opdatering af betaling - test</DIV><BR>

<BR><BR>
<FORM NAME="betaling" METHOD="post" ACTION="opdatering_betaling2.asp">
<DIV STYLE="text-align:center">
<TABLE BORDER="0" WIDTH="70%">

<%
Do While Not rsData.EOF
%>

<%
'BAGGRUNDSFARVE
tal = tal + 1
dim tal
if tal MOD 2 = 0 then
%>
<tr bgcolor=#e5e5e5>
<% else %>
<tr bgcolor=#ffffff>
<% end if %>


<TD WIDTH="5%"><% Response.Write (rsData("ID")) %></TD>
<TD WIDTH="45%"><% Response.Write (rsData("fornavn")) %></TD>
<TD WIDTH="45%"><% Response.Write (rsData("efternavn")) %></TD>
<TD WIDTH="5%"><SELECT NAME="Betalt">
<OPTION <% if rsData("Betalt")="Ja" Then Response.Write "Selected" End if
%> VALUE="Ja">Ja</OPTION>
<OPTION <% if rsData("Betalt")="Nej" Then Response.Write "Selected" End if
%> VALUE="Nej">Nej</OPTION>
</SELECT></TD>
</TR>

<%
rsData.MoveNext
Loop

' Lukker databaseforbindelsen
dbconnect.Close
Set dbconnect = Nothing
%>

</TABLE></DIV>
<BR><BR>
<DIV STYLE="text-align:center">
<INPUT TYPE="submit" VALUE="Opdater" NAME="Opdater">
</DIV>

</FORM>
</BODY></HTML>

Side 2!!!!!!
<HTML><HEAD>

<%
' Databaseforbindelse
Dim dbconnect
Set dbconnect = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
Server.MapPath("../database/betalingtest.mdb")
dbconnect.Open strDSN

Dim strQ, rsData
Set rsData = Server.CreateObject("ADODB.Recordset")
Set rsData = dbconnect.execute("SELECT * FROM Resultater")

'Der skrives til databasen
strQ = "INSERT INTO Resultater (betalt) values('" & Request.Form("betalt") &
"')"

' SQL sætning eksekveres
dbconnect.execute(strQ)
%>
</HEAD>

<BODY>
<DIV ID=H1>Opdatering af betaling2</DIV><BR>

<BR><BR>
<DIV ID=P>Betalingerne er nu opdateret!</DIV>
</BODY></HTML>





 
 
Jens Gyldenkærne Cla~ (01-11-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 01-11-02 23:14

Jens Jensen skrev:

> Jeg ved bare ikke hvordan jeg gør alle felterne unikke så de
> kan opdateret i database. Jeg har gengivet koden nedenfor

Forslag: Lav dine select-bokse om til checkbokse.

Noget i retning af:
<input type="checkbox" name="betalt" value="<%= rsData("id") %>">

Du kan sætte hak i boksen med checked="checked" - brug en If-
sætning til at sætte det de rigtige steder.

Når du opdaterer formen får du en kommasepareret liste af id-numre
der har betalt. Den er let at bruge i en sql-forespørgsel - smæk et
par paranteser omkring og et IN foran, så har du fx:

UPDATE tbl_personer
SET betalt = True
WHERE id IN ( <liste fra formen> )

Ovenstående eksempel tager ikke hensyn til at en betaling kan
annuleres [1]. Hvis listen (formvariablen) er tom vil opdateringen fejle
- det kan undgås ved at tjekke for den tomme liste inden man kører
sætningen.

En helt anden mulighed er at lave en form pr linje - hvor hver form
så har sin egen opdateringsknap. Her kan idnummeret gemmes i et
skjult felt og betalt ja/nej kan sendes som du finder det mest
praktisk.

Noter:
======

[1] ...men det er nemt at få den til. Bare kør en "UPDATE tbl_personer
SET betalt = False" (uden parametre) umiddelbart før den anden
kode - så kan man både melde folk til og fra
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.

Jens Jensen (04-11-2002)
Kommentar
Fra : Jens Jensen


Dato : 04-11-02 11:16

Det ser spændende ud, så det vil jeg prøve og så vende tilbage.

Michael



Jens Jensen (04-11-2002)
Kommentar
Fra : Jens Jensen


Dato : 04-11-02 14:06

Når du opdaterer formen får du en kommasepareret liste af id-numre der har
betalt. Den er let at bruge i en sql-forespørgsel - smæk et par paranteser
omkring og et IN foran, så har du fx:

UPDATE tbl_personer
SET betalt = True
WHERE id IN ( <liste fra formen> )

Ovenstående eksempel tager ikke hensyn til at en betaling kan annuleres [1].
Hvis listen (formvariablen) er tom vil opdateringen fejle - det kan undgås
ved at tjekke for den tomme liste inden man kører sætningen.


Ovenstående kan jeg ikke helt gennemskue, det jeg har kastet mig ud i er nyt
for mig. Vil formularen automatisk generer en kommasepareret liste der så
kan håndteret med SQL og på den måde opdater databasen?

SET betalt = True
Der er en side som fortæller om der er betalt eller ej, så jeg kan vel
ændre "true" til ja eller giver det problemer?

Jeg har ikke rigtig nogen ide om hvordan jeg klare WHERE id IN ( <liste fra
formen> ) , kunne jeg få et hint?

ASP er en svær en
Michael




Jens Gyldenkærne Cla~ (04-11-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-11-02 14:57

Jens Jensen skrev:

> Når du opdaterer formen får du en kommasepareret liste af
> id-numre der har betalt. Den er let at bruge i en...

En teknisk note. Det er mig der har skrevet teksten i den første
del af dit indlæg. Det er helt fint at medtage citater - men du
skal huske at markere dem som citater. Normalt vil dit program gøre
arbejdet for dig - du skal bare klippe de ting du ikke har
kommentarer til væk. Hvis du vil medtage tekst fra et tidligere
indlæg (og teksten ikke findes i det indlæg du besvarer) bør du som
minimum huske at skrive at det er et citat - og helst også visuelt
markere at det ikke er din egen tekst. Det kan fx være ved at
indsætte tabulator før (alle) linjer, bruge et citattegn[1] - fx "| "
eller markere start og slut på citatet ved hjælp af en streg [2]. I de
fleste tilfælde vil det dog være lettere bare at svare på et indlæg
der indeholder den tekst man vil citetere - altså i stedet for at
placere dit seneste svar som en opfølgning på dit eget indlæg fra
mandag formiddag kunne (og burde) du have placeret det som svar på mit
indlæg fra i fredags.

Tilbage til dit spørgsmål.

> Ovenstående kan jeg ikke helt gennemskue, det jeg har kastet
> mig ud i er nyt for mig. Vil formularen automatisk generer en
> kommasepareret liste der så kan håndteret med SQL og på den
> måde opdater databasen?

Ja. Det eneste du skal kontrollere er at du ikke sender en tom
liste til databasen - det kan den ikke håndtere.

Hvis du har 10 checkboksfelter med navnet "betalt" og værdierne fra
1-10 vil du få følgende output med forskellige testdata (med
request.form("betalt"))

Jeg bruger tre kolonner til at markere hhv. hvad der er valgt på
formen, hvad indholdet af Request.Form("betalt") bliver og til
sidst hvordan det ser ud med paranteser omkring.

Intet markeret => "" => ()
Hak i nr. 6 => 6 => (6)
Hak i nr. 1, 3, 8 og 9 => 1,3,6,9 => (1,3,6,9)

Bortset fra den første linje vil alle værdier være mulige at bruge
i den nævnte sql-sætning.

"SELECT * FROM tabel WHERE idNr IN (1,3,6,9)" er det samme som
"SELECT * FROM tabel WHERE idNr = 1 OR idNr = 3 OR idNr = 6 OR
idNr = 9"

En update- eller delete-forespørgsel vil fungere på præcis samme
måde.


> SET betalt = True
> Der er en side som fortæller om der er betalt eller ej, så jeg
> kan vel ændre "true" til ja eller giver det problemer?

Der er forskel på et internt format og et vist format. Hvis du
bruger et boolesk felt (ja/nej-felt) til at markere betalingsstatus
så er der kun to gyldige værdier: True eller False. Du kan - både i
Access og på en hjemmeside - vælge mange forskellige måder at vise
disse værdier på - men når du skriver sql-kode må du kun bruge de
"rigtige" værdier - altså SET betalt = True eller SET betalt =
False. Det gælder _kun_ hvis betalt er et boolesk felt (men i og
med at du gemmer sandhedsværdier i feltet er det et meget logisk
valg).

> Jeg har ikke rigtig nogen ide om hvordan jeg klare WHERE id
> IN ( <liste fra formen> ) , kunne jeg få et hint?


Se ovenfor. Du får en liste med et eller flere tal i, adskilt af
kommaer. Det eneste du skal gøre er at sætte paranteser udenom og
så benytte den IN-syntaks jeg har gennemgået længere oppe i
indlægget. Når du opbygger din sqlstreng skal du undersøge om
listen er tom - fordi "IN ()" ikke er et gyldigt kriterium. Hvis
listen er tom behøver du ikke udføre nogen kode - så er der jo
ingen poster at opdatere.


> ASP er en svær en

Det er vist mere sql du har problemer med. Har du prøvet en
databasetutorial?

Noter:
======
[1] Her er det _ikke_ smart at bruge ">" med mindre man har helt styr på
hvor mange man skal bruge. Citattegnet ">" angiver at teksten
stammer fra et indlæg x niveauer før det aktuelle indlæg, hvor x
er antallet af ">"-tegn.
[2] Kan man lave streger i et newsindlæg? Ja det kan man da - fx sådan
__________________________________________
--
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 Jensen (06-11-2002)
Kommentar
Fra : Jens Jensen


Dato : 06-11-02 14:44

> Det er vist mere sql du har problemer med. Har du prøvet en
databasetutorial?

Jeg vil afholde mig fra de dårlige undskyldninger.

Kan du eller en anden anbefale en databasetutorial? Det er nok der jeg sætte
ind i første omgang.

Michael



Flemming Jensen (06-11-2002)
Kommentar
Fra : Flemming Jensen


Dato : 06-11-02 15:42

Jens Jensen skrev:

> Kan du eller en anden anbefale en databasetutorial? Det er nok der jeg
sætte
> ind i første omgang.

Kig på www.html.dk De har en tutorial om ASP, hvor i de dækker database
delen meget godt.

--
Flemming Jensen



Raymond Skorstad (02-11-2002)
Kommentar
Fra : Raymond Skorstad


Dato : 02-11-02 10:07

Bruk en select for hvert navn

<SELECT name="<%=rs("id")%>">

Da får du en request.form for hvert navn i fil to som du bruker slik

for each value in request.form("id") do
strQ = "INSERT INTO Resultater (betalt) values('" & value & "') WHERE id =
" & id
next

Raymond Skorstad
www.gamerz.no
www.nordicdata.no


"Jens Jensen" <nogen@microsoft.com> skrev i melding
news:aptt59$jio$1@news.net.uni-c.dk...
> Hej NG,
>
> Jeg har et måske stort problem, som jeg ikke selv kan løse. Jeg vil gerne
> opdater en betaling se
> http://www.kif-atletik.dk/testsite/opdatering_betaling.asp
>
> Jeg ved bare ikke hvordan jeg gør alle felterne unikke så de kan opdateret
i
> database. Jeg har gengivet koden nedenfor
>
>
> <HTML><HEAD>
> <%
> ' Databaseforbindelse
> Dim dbconnect
> Set dbconnect = Server.CreateObject("ADODB.Connection")
> strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
> Server.MapPath("../database/betalingtest.mdb")
> dbconnect.Open strDSN
>
> 'SQL forespørgsel
> Dim strQ, rsData
> strQ = "SELECT id, fornavn, efternavn, betalt FROM Resultater"
> Set rsData = dbconnect.execute(strQ)
> %>
> </HEAD>
>
> <BODY>
> <DIV ID=H1>Opdatering af betaling - test</DIV><BR>
>
> <BR><BR>
> <FORM NAME="betaling" METHOD="post" ACTION="opdatering_betaling2.asp">
> <DIV STYLE="text-align:center">
> <TABLE BORDER="0" WIDTH="70%">
>
> <%
> Do While Not rsData.EOF
> %>
>
> <%
> 'BAGGRUNDSFARVE
> tal = tal + 1
> dim tal
> if tal MOD 2 = 0 then
> %>
> <tr bgcolor=#e5e5e5>
> <% else %>
> <tr bgcolor=#ffffff>
> <% end if %>
>
>
> <TD WIDTH="5%"><% Response.Write (rsData("ID")) %></TD>
> <TD WIDTH="45%"><% Response.Write (rsData("fornavn")) %></TD>
> <TD WIDTH="45%"><% Response.Write (rsData("efternavn")) %></TD>
> <TD WIDTH="5%"><SELECT NAME="Betalt">
> <OPTION <% if rsData("Betalt")="Ja" Then Response.Write "Selected" End if
> %> VALUE="Ja">Ja</OPTION>
> <OPTION <% if rsData("Betalt")="Nej" Then Response.Write "Selected" End if
> %> VALUE="Nej">Nej</OPTION>
> </SELECT></TD>
> </TR>
>
> <%
> rsData.MoveNext
> Loop
>
> ' Lukker databaseforbindelsen
> dbconnect.Close
> Set dbconnect = Nothing
> %>
>
> </TABLE></DIV>
> <BR><BR>
> <DIV STYLE="text-align:center">
> <INPUT TYPE="submit" VALUE="Opdater" NAME="Opdater">
> </DIV>
>
> </FORM>
> </BODY></HTML>
>
> Side 2!!!!!!
> <HTML><HEAD>
>
> <%
> ' Databaseforbindelse
> Dim dbconnect
> Set dbconnect = Server.CreateObject("ADODB.Connection")
> strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
> Server.MapPath("../database/betalingtest.mdb")
> dbconnect.Open strDSN
>
> Dim strQ, rsData
> Set rsData = Server.CreateObject("ADODB.Recordset")
> Set rsData = dbconnect.execute("SELECT * FROM Resultater")
>
> 'Der skrives til databasen
> strQ = "INSERT INTO Resultater (betalt) values('" & Request.Form("betalt")
&
> "')"
>
> ' SQL sætning eksekveres
> dbconnect.execute(strQ)
> %>
> </HEAD>
>
> <BODY>
> <DIV ID=H1>Opdatering af betaling2</DIV><BR>
>
> <BR><BR>
> <DIV ID=P>Betalingerne er nu opdateret!</DIV>
> </BODY></HTML>
>
>
>
>



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

Månedens bedste
Årets bedste
Sidste års bedste