Avatar billede djalfe Novice
12. marts 2006 - 01:41 Der er 10 kommentarer og
1 løsning

flere sql forsøgelser på en gang

hejsa

hvis man nu skal lave flere sql-forsørgelse til samme mdb database uden at miste den forgående sql-forspørgelse, hvordan gør man så det

f.eks

do until rs.eof = true

  -- statement --

  'ny sql-forspørgelse
  rs.excute(sql-forspørgelse)
  while not rs.eof
  -- statement --
  rs.movenext
  wend
  rs.movenext
loop

Som jeg ser det, vil den første løkke ikke blive fuldtendt på grund af at rs.excute(sql-forspørgelse). Men jeg aner ikke rigtig hvordan man så skal gøre.

Håber der er hjælp at finde :-)

Glade hilsner
Djalfe
Avatar billede kjulius Novice
12. marts 2006 - 02:33 #1
Du bliver nødt til at definere flere recordsets og give dem forskellige navne (f.eks. rs1 og rs2). Du kan godt referere til den samme connection fra flere recordsets.
Avatar billede kjulius Novice
12. marts 2006 - 02:48 #2
Nestede forespørgsler er dog ikke særligt befordrende for hastigheden. Hvis det overhovedet er muligt, er det bedre at knytte de to tabeller/forespørgsler sammen til én sql forespørgsel. Forespørgslen i den indre løkke skal jo fortolkes hver gang, hvilket tager tid og resourcer. Hvis det overhovedet er muligt, er det meget bedre at lave en kombineret forespørgsel, selv om den måske bliver lidt kompliceret. Der kan naturligvis være gode grunde til at nestede forespørgsler er at foretrække, men jeg har set mange eksempler på kode, som har været unødigt tungt eksekverende, fordi programmøren har syntes det var lettere at lave sådanne lagdelte løkker, hvor han med fordel kunne have brugt mere tid på at optimere sine SQL forespørgsler i stedet.
Avatar billede djalfe Novice
12. marts 2006 - 12:22 #3
okey okey
Men du har ikke tilfældig et eksempel på så'en en kombineret sql streng, hvor det giver mulig for at køre en lække i en lække.

mit projekt jeg var igang med at lave en menu hvor den er delt op i hovedkategorier, hvis man trykker på en at linkene i en givne hovedmenu forsvinder de andre hovedpunkter.
Der skal så lige være en undtagelse, ved at der er nogle punkter i den generelle hovedmenu der skal forblive, så som forside,profil,kontakt osv.

Alt hvad der har med database at gøre, forstår jeg mig ikke så meget på, men har nu prøvet alligevel.

min menu tabel fra db.
PRIM ID        Autonum.
      ID_parent  tal
      ID_List    tal
      ID_List_Nr tal
      Name      tekst
      Title      tekst

Hvis jeg skulle føre over i en tabel havde jeg forstillet mig noget lignende eks. her under.

1. loop: 

  Hovedkategori ->
  -------------------------------------------------
  |  select * from menu where ID_parent=0 |
  -------------------------------------------------
2. loop
 
  menulink i listeform (ID_List_Nr) med linjeafstand, hvis ID_list stiger med 1. Det er også her, jeg havde forstillet mig at styre max antal lister der skal være i de givne listeopdelinger. -->
  ------------------------------------------------
  | select * from menu where ID_list_Nr<[max] Ordre by ID_List ASC and ID_List_NR ASC |

tabel som den gerne skulle se ud, men igen skulle samtidig med at styre max antal på linkgrupperne i hver hovedkategori også have muligheden for at fjerne en hoevgruppe helt
<table id="[ID]>
<tr>
  <td id="menuId-[ID]" title="[Title]">[Name] Hovedmenu Navn</td>
</tr>
<tr>
  <td id="menuId-[ID]" title="[Title]">[Name] link Navn</td>
</tr>

[hvis ID_List stiger:
<tr>
  <td>&nbsp</td>
</tr>
</table>

Hæ hæ. Det var vist noget af en "smører", men er gået lidt i baglås, kan ikke lige se hvordan jeg skal fikse så'en en "fætter". Håber der findes en nem løsning på mit problem.
Avatar billede saudoo Nybegynder
12. marts 2006 - 14:02 #4
Du kan sagtens køre dem inden i hinanden, det sker på følgende måde:

<%
    database = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Request.ServerVariables("APPL_PHYSICAL_PATH") & "database.mdb"

    Set rs1 = Server.CreateObject("ADODB.Recordset")
    rs1.Open "SELECT * FROM menu", database
   
        Set rs2 = Server.CreateObject("ADODB.Recordset")
        rs2.Open "SELECT * FROM menu WHERE ID_parent = " & rs1.Fields("ID_List_Nr"), database
            ' bla bla
        rs2.Close
        Set rs2 = Nothing
   
    rs1.Close
    Set rs1 = Nothing
%>

Nu må du lige sige, til hvis jeg har skrevet noget helt forkert til dig. :D
Avatar billede djalfe Novice
12. marts 2006 - 14:12 #5
Jeg kunne forstå på kjulius at jo flere forbindelser der er flettet ind i de givne løkker, ville sænke hastigheden og det er jo ikke så fedt. For det er jo ikke kun menuen der skal oprette forbindelse, regner med tiden også at så som produkter, leverandøre og den alm. tekst skal være så dynamisk som mulig, hvor brugeren har mulighed for administrere det hele udfra en administrations side.

Men jo din fortolkning er da helt klart en mulighed i første omgang.

Er lidt i tvivl om det er en optimal løsning jeg har bygget f.eks. menu tabellen i databasen op på.
Avatar billede saudoo Nybegynder
12. marts 2006 - 14:42 #6
Tjaa.. Det ideelle ville nok være at benytte sig af joins. Hvis du brugte det flere steder. Men i denne situation burde du nok ikke være bange for at siden bliver langsommere. :)

Så længe du huske at lukke dine recordsets af igen, som jeg har gjort, kan du godt køre med 10-15 stykker på en side, uden at mærke forskel. Hvad serveren så siger til det, når der kommer en 2-3 tusind besøgende ind på samme tid, er så en anden sag. :P

Men som sagt så syntes jeg slet ikke det er noget du burde overveje, med mindre du vil igang med at lære joins.

Der er nogle tutorials her, hvis det er:
http://activedeveloper.dk/artikler/default.asp?articleid=323

Database relationer del1:
http://activedeveloper.dk/artikler/default.asp?articleid=293
Database relationer del2:
http://activedeveloper.dk/artikler/default.asp?articleid=295
Avatar billede djalfe Novice
12. marts 2006 - 15:00 #7
For søren Saudoo, du har lige åbnet en helt ny verden for mig. Nu har jeg virkelig nogle gode eksempler på, hvordan man kan bygge det op.

Jeg har så lige sidste spørgsmål der omhandler noget helt andet, men alligevel ikke hæ hæ.

Jeg vil utrolig gerne arbejde klasser, da det giver mig mulighed for at bruge min function over hele sitet. Men jeg kan ikke rigtig det til at virke, hvis jeg includere min (class) filer. f.eks.

<!--#include virtual="area51/dbConn.asp"-->

Men denne indclude vil serveren ikke have kendskab til min klasse, den klager sig allerede i starten med at den ikke ved hvad "class Mydb" er for noget. er der nogen forklaring på det eller skal det bare være så'en ???

/Djalfe
Avatar billede saudoo Nybegynder
12. marts 2006 - 15:12 #8
Hm.. Må indrømme jeg ikke rigtig har brugt det der class før. Har nøjes med subs.
Så den kan jeg nok ikke rigtig hjælpe dig med :)

Men jeg fundet en artikel om emnet, hvis du ikke selv finder et svar på spørgsmålet lige med det første: http://www.netcoders.dk/articles.asp?mode=show_article&article_id=195&tech_id=1
Avatar billede djalfe Novice
12. marts 2006 - 15:18 #9
Mange mange tak for det, hvis du vil have dine veltjent point, må du lige sætte svar ind :-)

endnu engang tak
Avatar billede saudoo Nybegynder
12. marts 2006 - 15:22 #10
Nej tak, tag du bare dem selv. :)
Men det var så lidt. ;)
Avatar billede djalfe Novice
12. marts 2006 - 15:26 #11
hmmm...
tak for det.
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