Avatar billede ripley Nybegynder
16. maj 1999 - 20:21 Der er 19 kommentarer og
2 løsninger

do...loop ( VBScript)

Hej!
Kan man lave en løkke i en løkke i VBScript?
Noget i stil med:
Do...until rs1.EOF  -løkke 1
//Og så forskellige ting, der udføres
(do..until..rs2.movenext loop)-løkke 2
rs1.movenext -slut løkke1

Jeg har brug for at køre et recordset igennem og for hver post undersøge, om dens id er gemt som fremmednøgle i en anden tabel (som jeg så bliver nødt til at køre igennem).
Avatar billede vanggaard Nybegynder
16. maj 1999 - 22:21 #1
Det kan man nemt, du skriver bare følgende:
do while not Rd.eof
            response.write "<hr>"
Rd.movenext
loop
Avatar billede vanggaard Nybegynder
16. maj 1999 - 22:23 #2
ups
response.write "<hr>" er selvfølgelig noget sluder, der skal du indsætte den kode som du bruger når du gennemløber et recordsæt.
Avatar billede ripley Nybegynder
16. maj 1999 - 22:26 #3
Øh? Er det mig eller var det ikke svar på mit spørgsmål?
Det ser da ud til bare at være en enkelt løkke, med en programlinje - jeg har brug for 2 løkker indeni hinanden!!!
Avatar billede ripley Nybegynder
16. maj 1999 - 22:27 #4
Nu kom dit svar nr. 2 først - men jeg kan stadigvæk ikke helt se, hvordan jeg laver de to løkker indeni hinanden.
Hvis jeg prøver, så kommer der en fejl i stil med "loop without do"
Avatar billede websharx Nybegynder
17. maj 1999 - 09:19 #5
Omformulér dit spørgsmål

Du vil lave en løkke i en løkke?

Do while not oRs.EOF
  [ statment 1 ... ]
  For I = 1 to 10
    [ statment 2 ... ]
  Next
Loop

Eller .. ? :)
Avatar billede ripley Nybegynder
17. maj 1999 - 10:20 #6
Så prøver jeg at omformulere det:
Til at starte med havde jeg en ganske almindelig løkke, der gennemløb et recordsæt (for et enkelt produkt, hvor oplysningerne skulle skrives ud til skærmen).
Altså:
do until rs.EOF
[statement1]
[statement2]
..etc.
rs.movenext
loop

Så kom jeg i tanker om, at man samtidig skulle kunne se, om dette produkt var på tilbud. Jeg har en tilbudtabel i min db og jeg satte så et nyt recordsæt til at være "select * from tilbud".
Nu kommer problemet: Når jeg er inde i den føromtalte løkke, så er jeg nødt til for hver post at gennemløbe tilbud-tabellen for at undersøge, om det pågældende produkt er på tilbud. Det vil sige, at jeg skal gennemløbe et recordsæt inde i gennemløbet af et recordsæt - og det kan jeg ikke finde ud af. Er det tydeligt nok nu?
Avatar billede thorvald Nybegynder
17. maj 1999 - 10:51 #7
opret et nyt recordset rs2, og brug det med en ny løkke
do until rs.EOF
    [statement1]
    [statement2]
    do until rs2.EOF
      [statement1]
      [statement2]
        ..etc.
      rs2.movenext
    loop      ..etc.
    rs.movenext
loop
Avatar billede websharx Nybegynder
17. maj 1999 - 11:18 #8
Ah! Hvorfor sagde du så ikke det med det samme? :)

Noget i den her stil?

'## INITIAL LOOP
Do while not oRs.EOF

  '## FØRSTE STATEMENT
  Response.Write (oRs("Overskrift") & "<BR>")

  '## ÅBEN DATABASE
  Set oConn = Server.CreateObject("ADODB.Connection")
  oConn.Open "DatabaseNavn"
  Set oRsTemp = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT * FROM tilbud WHERE ID = " & oRs("id")
  oRsTemp.Open strSQL, oConn, 2, 4

  '## TJEK OM DER ER TILBUD ELLER LOOP?
  Do while not oRsTemp.EOF
    '## LOOP STATEMENT
    oRsTemp.MoveNext
  Loop

  oRsTemp.MoveFirst
  If NOT oRsTemp("id") = "" Then

    '## TILBUD STATEMENT
    Response.Write("Tilbud!")
  End If

  '## LUK TEMP FORBINDELSER
  oRsTemp.Close
  Set oRsTemp = Nothing
  oConn.Close
  Set oConn = Nothing

  '## FORTSÆT FØRSTE LOOP
  oRs.MoveNext
Loop

(Uargh det er svært at overskue ens kode i det her lille textarea .. håber det giver mening, det er direkte fra hovedet - og DET siger det hele =)
Avatar billede ripley Nybegynder
18. maj 1999 - 00:27 #9
Jeg afviser lige svaret, så jeg kan acceptere et af de andre, hvis de virker (har ikke testet det endnu)
Avatar billede a Nybegynder
22. maj 1999 - 14:41 #10
Jeg tror at det du er ude efter er noget ligende det jeg har brugt:

SELECT * FROM Vtitle, Vinfo WHERE vtitlekey LIKE '" _
& Request.QueryString("titel") & "%' AND Vtitle.vtitleid=Vinfo.vinfotitleid

Den sidste (AND Vtitle.vtitleid=Vinfo.vinfotitleid)
sørger for at de RECORDS der bliver fundet har samme id nr. (UNIQUE KEY).

PS jeg har prøvet med optil 7 tabeller på samme tid med den måde (med forskellige UNIQUE KEYS
Avatar billede a Nybegynder
22. maj 1999 - 14:47 #11
hovsa den blev sendt afsted
...men..
mit formål med det var/er at finde en vares navn (i en tabel) og derefter prisen i en anden tabel pris(efter varenr(vtitleid)) i en anden tabel.

Jeg håber at det kan bruges.
Avatar billede jpk Nybegynder
24. juli 2000 - 18:44 #12
Ideen med at gennemløbe et helt recordset for hver tuple i et andet er ikke særlig god! Det tager tid...
Brug i stedet en simpel algoritme som denne:

WHILE NOT ProdukterRS.EOF
  \"Udskriv produktet\"
  WHILE UdsalgRS(\"Id\") < ProdukterRS(\"Id\")
  UdsalgRS.MoveNext
  IF ProdukterRS(\"Id\") = UdsalgRS(\"Id\") THEN
    \"Ja der er på tilbud\"
  END IF
  WEND
ProdukterRS.MoveNext
WEND

Herved løbes hvert recordset kun igennem 1 gang!
Jeg går her ud fra at du kun har Id\'erne i din Tilbudstabel, på de produkter der ER på tilbud. Men ellers ville der jo ikke være grund til at lave det i en seperat tabel...
Avatar billede januskh Nybegynder
26. juli 2000 - 22:03 #13
Jeg har blot en lille kommentar et dette indslag... VBSCRIPT er et sprog som anvendes på samme måde som JAVASCRIPT. VBSCRIPT afvikles af brugeren i browseren og derfor kan man også se koden, hvis du i din browser vælger at se sourcecoden. Jeg har aldrig hørt om at nogen ville være så tåbelige at åbne databaser vha. vbscript. Her kommer ASP (Active Server Pages) ind i billedet. Denne form for kode bliver afviklet af serveren inden browseren modtager det endelig resultat. Så skulle det vist være på plads.

/Januskh
Avatar billede jpk Nybegynder
27. juli 2000 - 00:53 #14
=> Januskh
JavaScript afvikles som standard på klientsiden, dette sker med mindre man angiver Script-tag\'ets attribut \"Runat\" til at være server!
VBScript derimod afvikles som standard på serveren, så man kan altså ikke se den oprindelige kode på klienten, kun den fortolkede, i HTML-format!
Hvis du aldrig har hørt om at bruge VBScript til at håndtere DB-adgang, har du vist ikke hørt ret meget...
Det forholder sig nemlig således at ASP IKKE er en specifik form for kode, men et begreb der dækker over en måde at implementere webpages på. (Microsofts løsning til at lave dynamiske web pages) ASP dækker således også over flere script sprog, heriblandt JavaScript, JScript OG VBScript
Så skulle det vist være på plads.
Avatar billede januskh Nybegynder
27. juli 2000 - 08:27 #15
=> jpk
Så forklar mig lige det her? Se:
http://msdn.microsoft.com/scripting/default.htm?/scripting/vbscript/samples/calculator/vbscalc.htm

Højreklik og vis kilde.. søg efter <SCRIPT LANGUAGE=\"VBScript\">. Hov?!? Man kan se al koden...?!? Microsoft bug?!? Not! vbSCRIPT!

.. og et eksempel på at åbne en database i VBSCRIPT vil jeg meget gerne. MEGA MEGET. Lav et lige et eksempel og få det til at virke. Uden at sætte <%  %> omkring.

<% = Active Server Pages Section Start
%> = Active Server Pages Section End


Avatar billede jpk Nybegynder
27. juli 2000 - 10:55 #16
=> Januskh
Den side du henviser til er jo slet ikke en asp-side!!! Det er en HTML-side, hvis indhold slet ikke fortolkes af serveren, men sendes direkte til klienten.
Og jo naturligvis når man angiver <SCRIPT LANGUAGE=\"VBScript\">, køres scriptet på samme måde som ex. et JavaScript.
Til sidst, fordi man tilføjer <% og %>, ændrer det IKKE på det faktum, at det er VBScript!
Avatar billede januskh Nybegynder
27. juli 2000 - 11:09 #17
=> jpk
Jo, så hedder det netop Active Server Pages. Ellers har de skrevet forkert 2 bøger af Wrox og en af IDGs.

Men hvis du ikke er overbevist.. og skal have en ASP side og se det på.... her! For h*!?*..
http://www.microsoft.com/downloads/search.asp?

Gør det samme åbn og søg efter VBSCRIPT

Fatter du det så... desuden tror ikke at der er nogen som er så tåbelige at de åbner databaser i VBSCRIPT medmindre det er i GLOBAL.ASA. Ellers har de eddermandme et kæmpe hacker problem.

EOD (End of discussion)
Avatar billede jpk Nybegynder
27. juli 2000 - 11:37 #18
=> Januskh
Hvis du ikke længere vil deltage i diskussionen, er det din sag...
Microsofts definition på ASP er:

(Active Server Pages) An open application environment in which HTML pages, scripts, and ActiveX components can be combined to create Web-based applications.

Altså, fordi man bruger ex. VBScript i en ASP-side, ER VBScript ikke lige pludselig ASP! VBScript kan indgå som en del i en ASP-side...
Avatar billede januskh Nybegynder
27. juli 2000 - 12:03 #19
VBScript er som JavaScript er i HTML. På samme måde som VBA er i Microsoft Word og/eller Microsoft Access.

Bevis: Start => Indstillinger => Kontrol Panel => Tilføj fjern programmer. Remove Microsoft Internet Explorer. Geninstaller Microsoft Internet Explorer via custom og undlad at installere punktet Visual Basic Scripting Support.

Når du har installeret browseren igen, så går du ind på følgende side:
http://msdn.microsoft.com/scripting/default.htm?/scripting/vbscript/samples/calculator/vbscalc.htm

Så vil du se at Internet Explorer vil have installeret VBSCRIPT... og det er selvom det ikke er en ASP-side... Går du derimod ind på en hvilken som helst Active Server Pages side, så vil du få vist siden uden problemer.

Afvikles VBSCRIPT stadig på serveren? Nej, i din browser.
Avatar billede zaknafein Praktikant
28. juli 2000 - 18:02 #20
=>januskh

Nu bliver jeg nødt til at blande mig. Janus din opførsel herinde virker ikke særlig professionel. \"Fatter du det så\" og EOD(især da du IKKE har ret, og ikke vil lytte til andre!) er for mig, ikke en brugbar tone, at diske op med!

Du har misforståe nogle begreber alvorligt.....Men du er så overbevist at du ikke lytter til andre.

Altså VBScript kan afvikles på 2 måder:
1.
på klienten. Indsat i et Script tag hvor attributten RunAt er = Client(client er defult). Du henviser til nogle sider, hvor man ved at vælge Vis Kilde, kan se koden : Ja selvfølgelig kan du se koden, for det er jo lavet som klient side script, og klient script bliver sendt ud til browseren. Når man laver klient scripting kan man vælge at bruge JavaScript eller VBScript. Lige meget hvad du vælger accepteres det IKKE at du kalder metoder som  \"Response.Write(\"Janus har ikke ret\")\" da det IKKE er et gyldigt Klient side script. Klienten har jo ikke adgang til Response objektet

2.
Eller på severen. Afvikles det på serveren er det enten i <%%> eller i <Script> Tag\'et med attrubutten \"RunAt=Server\". Lige for begge måder er at de IKKE kan ses i vis kilde, da den enkelte ScriptEngine(VBScript JScript) fortolker koden og sender outputtet ud til klienten.

Du siger<<VBScript er som JavaScript>> NEJ det er to forskellige sprog med hver deres syntaks. Begge kan processeres som klient side scripts, men VB kan også processeres som server side script (Ligesom JScript kan).


Det hele startede med at du så jpk\'s kode :
WHILE NOT ProdukterRS.EOF
....
....
WEND
osv

Men da det er VB syntaks tænkte du måske \"man kan da ikke køre VB systaks på serveren\". Nu fortæler jeg dig \"jo man kan, det bestemmer man selv\".

I Internet Service Manager kan man angive et default ASP language, og det kan være VBScript eller f.eks. JScript. Det man vælger er den script engine som Default\" skal fortolke det der står i <%.....%>.
Hvis du laver VBScript default kan da sagtens åbne databaser i VBScript, hvilket du påstår man ikke kan. Du kan også \"override\" default sproget, ved at gøre følgende
<%@ LANGUAGE=JScript %>
Det vil gøre at JScript fortolkerer frem over i ASP siden, tager sig af kode indsat i <%....%>

Prøv at smide denne sætning ind når default er sat til VBScript
<%
for(i=1;i<10;i++
)%>

Eller denne når Default er sat til JScript
<%IF i = 10 THEN
i = 10
END IF
%>

Begge fejler, da Ingen af Script-fortolkerne forstår hinandens syntaks.
Måske tror du at Script sproget hedder ASP, fordi der ikke er noget der hedder f.eks. Response.Write i VB, MEN det er jo bare objekter med metoder som både er tilgængelige for JSCript og VBScript.

Du fejler ved at tro at VBScript KUN kan afvikles på klienten!


Det sidste eksempel du kommer med, hvor man ska fjerne Visual Basic Scripting Support, understøtter lige nøjagtigt min version af sagen. Det er jo klart at du UDEN visual basic support kan browse mange hjemmesider uden problemer, så længe at der IKKE bliver sendt VB Klient side scripts ud til din computer. Det fortæller jo ikke dig noget om hvad sprog server side scriptet er!!

Håber det kunne være til hjælp :)
Avatar billede ripley Nybegynder
14. marts 2001 - 07:50 #21
Jeg er lige vendt tilbage til dette spørgsmål og blev lidt forvirret over svarene - jeg giver jer hver en håndfuld points, og håber så, at alle er glade??!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester