[SQL][ASP]While... in een SQL statement

Pagina: 1
Acties:

  • 418O2
  • Registratie: November 2001
  • Niet online
Ik heb een probleem, welke moeilijker is dan ik van te voren dacht. Lees eerst het verhaal dus ook goed voor je UTFS ensow gaat roepen, want het zit redelijk ingewikkeld in elkaar.

Ik heb in mijn database meerdere tabellen. Ik heb een formulier gemaakt dat automatisch wordt gegenereerd dmv het volgende script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<% 
    teller=0
    WHILE NOT RS1.EOF 
    
    IF rs1(0) = 2 THEN
%>  
<tr colspan="6">
    <td colspan="6"><center><h2><b><%=RS1(1)%><b></h2></center></td>
</tr>   
<%
    RS1.MoveNext
    End IF
%>
    
<%  
    IF RS1(0) = 1 THEN
%>
<tr colspan="6"><td colspan="6"></td></tr>
<tr colspan="6"><td colspan="6"></td></tr>
<tr colspan="6">
    <td colspan="6"><b><%=RS1(1)%><b></td>
</tr>
<%
    teller=teller - 1
    ELSE

%>
<tr>
    <td><%=RS1(1)%></td>
    <td><%=RS1(2)%></td>
    <td><%=RS1(3)%></td>
    <td><%=rs3(teller)%></td>
    <td><input type="text" name="<%=rs1(8)%>" value="<%=rs3(teller)%>" size="20"><%=RS3(teller)%></td>
    <td><%=RS1(6)%></td>
</tr>

<%
    END IF
    RS1.MoveNext
    teller=teller + 1
    WEND
%>


hij maakt dus keurig netjes een formulier.....

Uitleg:

de database bevat tabellen met gegevens over instellingen van apparaten. Er zijn 7 lijnen met ongeveer 6 apparaten per lijn.

RS1 bevat de tabel met : beschrijving van een veld, eenheid, grootheid en de veldnaam in de tabel met gegevens.. er zijn dus per apparaat 2 tabellen: 1 met de pure instellingen en 1 met beschrijving van het veld (ik heb extreem korte namen gebruikt voor de pure instellingen) en de groot- en eenheden. Maar dat maakt op zich niets uit..

nu moet ik dus uit een tabel gegevens halen. in het 8e veld van de tabel uit RS1 staan de veldnamen in de database. Daarin moeten de gegevens uit het formulier dus worden geplaatst. Nu wil ik dus een insert string maken. Maar, nu moet je dus die string ook compilen, omdat ik dan geen 25 insert strings hoef te maken, maar maar 1 omdat hij die compiled.

Nu haal je de tabelnaam uit de url, die kan je dus requesten.

nu gaat het dus zo:

tabel = Request("tabel")

dan weet je de tabelnaam. Dan kan je dus de string al zo maken:

code:
1
sql="UPDATE " & tabel & " SET


nu komt het echte probleem!!!

je moet nou de string genereren. Dit doe ik met het tabel dus met
code:
1
2
3
4
<% 
    teller=0
    WHILE NOT RS1.EOF 
%>


Maar hoe voeg ik dit zo in mijn string in dat hij die tabelnamen goed aanmaakt ? (rs1(8) is het veld met de namen van de velden in de database waar de gegevens ge-insert moeten worden). Diezelfde veldnamen kan ik wel gewoon requesten in mijn script via de WHILE. Dus ik moet dus al die gegevens nou in mijn string zetten. hoe doe ik dat ? Want je moet nl in de sql string een paar keer inbreken.

ik heb het volgende geprobeerd:
code:
1
2
3
4
sql="UPDATE " & tabel & " SET &_
<%WHILE NOT RS1.EOF%>
<%=rs1(8)%>=Request<%=rs1(8)%> 
<% rs1.MoveNext %>


nou zou er toch een string moeten worden gegenereerd. Maar dit gebeurt niet (wat ik al verwachtte).

HOE moet ik nou een while integreren in mijn SQL string ?


(sorry voor het onduidelijke verhaal, ik wist niet hoe ik het leuk en liev kom verwoorden)

Verwijderd

code:
1
2
3
4
5
6
7
sql="UPDATE " & tabel & " SET "
Do WHILE NOT RS1.EOF
 sql = sql & rs1(8) & "=" & Request(rs1(8).name) & ", "
 rs1.MoveNext
Loop

response.write sql


Probeer dit es.. het is het niet helemaal maar als je het nu nog niet snapt: rtfm :)

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

je moet het anders oplossen:

pseudo-code
code:
1
2
3
4
5
6
7
sql = "update tabel set"

while (not rs.eof) 
  sql = sql + ", bla = bla"
end

execute(sql)



of zie de post hierboven

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • 418O2
  • Registratie: November 2001
  • Niet online
Verwijderd schreef op 22 oktober 2002 @ 14:33:
code:
1
2
3
4
5
6
7
sql="UPDATE " & tabel & " SET "
Do WHILE NOT RS1.EOF
 sql = sql & rs1(8) & "=" & Request(rs1(8).name) & ", "
 rs1.MoveNext
Loop

response.write sql


Probeer dit es.. het is het niet helemaal maar als je het nu nog niet snapt: rtfm :)
ermmm....

Nou zal je zoiets krijgen:

sql="update lijn_1_granulator SET sql = sql datum = datum

dat klopt toch niet ?

Verwijderd

Ja ik weet niet hoe jou datamodel in elkaar steekt..

maar:
code:
1
rs1(8) & "=" & Request(rs1(8).name) & ", "


geeft:
naampje=waardeuitrequest, naampjeX=waardeuitrequest2,

dus aan het einde heb je een , teveel ja.. maar daar verzin je toch wel wat op...

  • 418O2
  • Registratie: November 2001
  • Niet online
:P die veldnamen moeten dus ook automatisch gevuld worden....

Maar als je iets boven in je script iets request dan hoef je toch alleen maar
in de string aan te geven

datum=request.form("Datum")

dan kan je toch gewoon in je string aangeven dat veld aangeven en dan hoef je toch niet formuliernaam aan te geven in de string ?

code:
1
sql="UPDATE lijn_1_reactor SET produkt='"&produkt&"', (and so on)


dat werk en daar gaf ik ook geen formulier naam mee (of wat jij dan ook bedoelt met :
code:
1
Request(rs1(8).name)

Verwijderd

wat wel leuk is als je het zo doet,
stel iemand vult in een box in:

;drop database;/*

wat zou er dan gebeuren :*)

  • 418O2
  • Registratie: November 2001
  • Niet online
:? :? :? :? :?

wat bedoel je?

als je niet serieus wil reply'en ga dan ff in de huiskamer klooien, hier ben ik niets mee geholpen.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

418O2 schreef op 22 oktober 2002 @ 15:31:
:? :? :? :? :?

wat bedoel je?

als je niet serieus wil reply'en ga dan ff in de huiskamer klooien, hier ben ik niets mee geholpen.


Dat is anders een redelijk serieuse reply. Waneer je die zelf niet op z'n waarde kunt schatten betekend dat nog neit dat ie in de HK hoort. Waar hier namelijk naar wordt gerefereerd is de meest gemaakte security fout op het gebied van webscripten...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

418O2 schreef op 22 oktober 2002 @ 15:31:
:? :? :? :? :?

wat bedoel je?

als je niet serieus wil reply'en ga dan ff in de huiskamer klooien, hier ben ik niets mee geholpen.
Als jij je code zo implementeerd kan ik vanaf de website je database wissen/tabellen weggooien en nog veel meer leuks..

dat bedoel ik..

  • 418O2
  • Registratie: November 2001
  • Niet online
En wat heeft dat met mijn probleem te maken ?

(ik wil best offtopic lullen, maar dit is wel een serieus probleem. PM me dan ff op irc ofsow, dan wil ik wel ff ot praten ;] )

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

het heeft misschien niet *direct* met jouw (beetje vage) probleem te maken, maar wij helpen je graag ook met andere gerelateerde dingen (zoals security). Dat scheelt strax namelijk weer een topic met "Hee, m'n hele database is leeg!"

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Het is een serieus probleem voor jou ja, als je enige ervaring met ASP hebt is dit trivial stuff.. sorry dat ik je probeer verder te helpen.

Maar ik denk dat je dit nodig hebt.. was een .name vergeten..
code:
1
2
3
4
5
6
7
sql="UPDATE " & tabel & " SET "
Do WHILE NOT RS1.EOF
 sql = sql & rs1(8).name & "=" & Request(rs1(8).name) & ", "
 rs1.MoveNext
Loop
'code die de laatste , verwijderd uit sql
response.write sql

  • 418O2
  • Registratie: November 2001
  • Niet online
nofi ! maar ik dacht dat je gewoon wat offtopics zei. ik bedoelde er niks mee, maar het gebeurt nogal es dat iemand compleet offtopic ging praten. Maargoed, dat was niet zo dus sorry, mijn fout....

wat doet die .name eigenlijk ?

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

418O2 schreef op 22 oktober 2002 @ 16:00:
wat doet die .name eigenlijk ?
waarom probeer je de oplossingen die hier gegeven worden niet eens uit? Dan weet je ook meteen wat die .name doet :)

trial & error is nog steeds een goede manier om te leren hoor!

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • 418O2
  • Registratie: November 2001
  • Niet online
ik probeer het nu, maar het werkt nog niet echt

Verwijderd

Werkt .name niet? ik ben een beetje uit die ouwe ASP meuk (.NET roelt :) ) maar ik dacht dat dat je columnname teruggaf.. ofwel het naampje dat je nodig hebt voor een update columnname=value etc.

  • 418O2
  • Registratie: November 2001
  • Niet online
ermm we zijn enigzins verder gekomen. We kunnen nu een lijst met de veldnamen genereren. Dit doen wij met deze code :

ASP:
1
2
3
4
5
6
7
8
For teller = 0 TO rs1.fields.count - 2
        
        naam = RS1(teller).name
        Response.Write naam = Request.Form ("Response.Write naam") %>&nbsp;<%
        naam = Request.Form("naam")
        Response.Write naam
        Response.Write "<br>"
    next

We krijg hiermee een lijst met veldnamen voorgeschoteld. Maar je wil de veldnamen niet lezen je wilt dat je de waardes kan requesten. MAAAAAR in de regel waarin je Request.Form doet kan je uiteraard geen response.write gebruiken want dan krijg je gewoon die veldnaam voor je neus..... Maar hoe kunnen we er nou voor zorgen dat je die veldnamen in een Request.Form krijgt?

De veldnamen in de database zijn gelijk aan de veldnamen in het formulier.

Je zou dus moeten krijgen:
ASP:
1
2
3
naam = Request.Form ("naam")
datum = Request.Form ("datum")
etc etc


maar dat wil dus niet...Die datum en naam moet hij dus uit het script halen. Wat er nou gebeurt is het volgende:
ASP:
1
2
naamnaam
datumdatum

Tussen die twee veldnamen krijgen we dus geen request.form.... Hoe voegen we dus die variabele veldnamen in het Request.Form statement ?

Verwijderd

naam=Request.Form(Rs("naamwaarde"))
datum=Request.Form(Rs("datumwaarde"))

  • 418O2
  • Registratie: November 2001
  • Niet online
die eerste waarde, die je wil requesten, moet ook uit de database sleuren, want die veldnamen kunnen elke keer anders zijn omdat er verschillende tabellen worden gebruikt. Dus het moet worden
ASP:
1
rs1("naam") = Request.Form rs1("naam")

Maar het probleem is dat je de eerst aan de linkerkant dus een veldnaam zijn, die je uit de database. Maar aan de rechterkant wil je dus dat je de variabele wil hebben dus je moet de veldnaam uit je formulier requesten maar hij moet dus niet de veldnaam hebben maar de waarde uit dat veld hebben.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 30-08 15:34

gorgi_19

Kruimeltjes zijn weer op :9

418O2 schreef op 23 oktober 2002 @ 15:47:
die eerste waarde, die je wil requesten, moet ook uit de database sleuren, want die veldnamen kunnen elke keer anders zijn omdat er verschillende tabellen worden gebruikt. Dus het moet worden
ASP:
1
rs1("naam") = Request.Form rs1("naam")

Maar het probleem is dat je de eerst aan de linkerkant dus een veldnaam zijn, die je uit de database. Maar aan de rechterkant wil je dus dat je de variabele wil hebben dus je moet de veldnaam uit je formulier requesten maar hij moet dus niet de veldnaam hebben maar de waarde uit dat veld hebben.
:? Wil je nu tegelijkertijd een veldnaam gaan vullen en een veldnaam gaan opvragen in dezelfde query?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

gorgi_19 schreef op 23 oktober 2002 @ 16:00:
[...]

:? Wil je nu tegelijkertijd een veldnaam gaan vullen en een veldnaam gaan opvragen in dezelfde query?
De bedoeling is een formulier te genereren vanuit de database. Er is dus één asp bestand dat iedere keer wordt gebruikt om dat formulier te genereren.

Wanneer nu de gegevens uit dit formulier doorgestuurd worden naar een volgende pagina, dienen alle velden meegenomen te worden, alleen bij een gegenereerd formulier heb je dus te maken met variabele veldnamen.

Nu hebben we het zover dat de veldnamen bekend zijn in de volgende pagina, dus op de volgende manier:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
<%
    Set con =  Server.CreateObject("ADODB.Connection")
    con.Open Application("bva_ConnectionString")
    
    Set RS1= server.createobject( "adodb.recordset" )
    RS1.activeconnection = con
    RS1.Open "SELECT * FROM lijn_1_granulator"
 
    For teller = 0 TO rs1.fields.count
        naam = RS1(teller).name
    next
%>


Nu willen we met behulp van deze veldnamen de gegevens uit het vorige formulier bekend maken in de nieuwe pagina. Dus door middel van de volgende constructie:

ASP:
1
        naam = Request.Form(naam)


Dit gaat dus niet. Maar hoe kan dit dan wel?! 8)7


Ik en catch zijn beiden stagairs bij hetzelfde bedrijf en werken aan het zelfde project, daarin word er wel eens met verschillende usernames gepost

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06-2025
Heb je nog nooit gehoord van een string opbouwen??
string = "ditte"
string = string & "datte"
Response.Write(string) ===> wat komt daar uit: dittedatte
string = "en ditte dan? " & string
Response.Write(string) ===> wat komt daar uit: en ditte dan? dittedatte

Zoek gewoon je informatie bij elkaar en plak het in je sql string.
Je kunt zelfs al je informatie eerst vergaren en in variabelen vastleggen en daarna al die variabelen dan in de juiste volgorde in je sql string plakken.
Kind kan de was doen :)

Fuck me if I'm wrong, but isn't your name Gretchen?

Pagina: 1