01. oktober 2001 - 01:17Der er
9 kommentarer og 3 løsninger
Sammenlægning af SELECT
Kan man ikke gøre dette i een select, således at der blot refereres til variablen, når man vil skrive RS(\"Name\") ud?
MenuSQL = \"SELECT * FROM Menu WHERE NameVal =\'Top\' \" Set RS = Server.CreateObject(\"ADODB.Recordset\") RS.Open MenuSQL, myConn, 1, 3 WHILE NOT RS.EOF response.write(RS(\"Name\") & \"<br>\" RS.MoveNext WEND
MenuSQL = \"SELECT * FROM Menu WHERE NameVal =\'Bot\' \" Set RS = Server.CreateObject(\"ADODB.Recordset\") RS.Open MenuSQL, myConn, 1, 3 WHILE NOT RS.EOF response.write(RS(\"Name\") & \"<br>\" RS.MoveNext WEND
MenuSQL = \"SELECT * FROM Menu WHERE NameVal =\'Left\' \" Set RS = Server.CreateObject(\"ADODB.Recordset\") RS.Open MenuSQL, myConn, 1, 3 WHILE NOT RS.EOF response.write(RS(\"Name\") & \"<br>\" RS.MoveNext WEND
MenuSQL = \"SELECT * FROM Menu WHERE NameVal =\'Top\' or NameVal=\'Bot\' or NameVal=\'Left\'\" Set RS = Server.CreateObject(\"ADODB.Recordset\") RS.Open MenuSQL, myConn, 1, 3 WHILE NOT RS.EOF response.write(RS(\"Name\") & \"<br>\" RS.MoveNext WEND
Hvis dine forespørgsler kun returnerer en række kan du lave din kode således:
MenuSQL = \" select name AS Top, \" MenuSQL = MenuSQL & \" (select name from Menu where NameVal=\'Bot\') AS Bot, \" SQL = SQL & \" (select name from Menu where nameVal=\'Left\') AS Left\" SQL = SQL & \" FROM Menu \" SQL = SQL & \" WHERE NameVal=\'Top\'\"
Set RS = Server.CreateObject(\"ADODB.Recordset\") RS.Open MenuSQL, myConn, 1, 3 IF NOT RS.EOF response.write(RS(\"Top\") & \"<br>\" response.write(RS(\"Bot\") & \"<br>\" response.write(RS(\"Left\") & \"<br>\" END IF
Select case placering Case Top:\"SELECT * FROM Menu WHERE NameVal =\'Top\' \" Case Bot:\"SELECT * FROM Menu WHERE NameVal =\'´Bot\' \" Case Left:\"SELECT * FROM Menu WHERE NameVal =\'Left\' \" End Select
MenuSQL = \"SELECT * FROM Menu WHERE NameVal =\'Top\'\" & vbCrLf & \"UNION\" & vbCrLf MenuSQL = MenuSQL & \"SELECT * FROM Menu WHERE NameVal =\'Bot\'\" & vbCrLf & \"UNION\" & vbCrLf MenuSQL = MenuSQL & \"SELECT * FROM Menu WHERE NameVal =\'Left\'\"
Dette vil returnere ét recordset, hvor Top, Bot og Left vil ligge som hhv. record 1, 2 og 3 (forudsat at der kun er én record der passer pr. kriterie)
Alternativt kan du køre 3 SQL statements og få 3 recordssets retur
MenuSQL = \"SELECT * FROM Menu WHERE NameVal =\'Top\';\" & \"SELECT * FROM Menu WHERE NameVal =\'Bot\';\" & \"SELECT * FROM Menu WHERE NameVal =\'Left\';\"
Derefter kan du loop\'e gennem dine recordsets
do unti RS is nothing do until RS.EOF response.write \"<TD>\" & RS(\"Name\") & \"</TD>\" loop set RS = RS.NextRecordset loop
Hvorfor vil du kun have een SQL-forespoergsel?? Er du bange for at det er for dyrt at kalde databasen flere gange?? I saafald boer du ogsaa aendre din SELECT-saetning til noget i stil med dette:
Men ellers vil jeg foreslaa dig at loope over dit Recordset, og saa laegge data ind i en af tre arrays, afhaegingt af hvilken NameVal det drejer sig om. Derefter kan du saa traekke data ud fra de forskellige arrays i den raekkefoelge du har brug for.
Synes godt om
Ny brugerNybegynder
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.