webForumDet fria alternativet

Ändra kodstruktur

ASP

30 svar · 1 353 visningar · startad av dareknowak · sida 2 av 2

Frågan, av dareknowak

Tänkte förenkla min kodstruktur lite men har nu fastnat. Men hur förenklar man detta? Set objConn = Server.CreateObject("ADODB.Connection") Set objRS = Server.CreateObject("ADODB.RecordSet") objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sDatabasePath SQL = "SELECT FROM tabell" objConn.Execute SQL objRS.Open SQL, objConn, adOpenStatic, adLockOptimistic objRS.AddNew objR

Läs frågan i sin helhet →
Medlem sedan mars 200973 inlägg
#21

hahaha va det så enkelt? trodde man va tvungen att ha med dom vid en execute.
tack @nders :)

Medlem sedan juni 20019 519 inlägg
#22

Det är bara när du retunera något i ASP du behöver det, du kan om du verkligen vill ha kvar () använda Call framför Execute.

Call objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'",,128)
Medlem sedan juni 200032 967 inlägg
#23

Normalt sett är det så att kör man en sub (en funktion som inte returnerar någonting, utan bara utför något) så ska man inte ha parenteser. Tar man emot ett returvärde från en funktion så skall man ha med paranteserna. Ett undantag är response.write - som du kan använda både med och utan parenteser.

edit: eller använd call som i voigtanns exempel - men det är riktigt skitfult. :)

mvh

Medlem sedan dec. 20025 483 inlägg
#24

Red.

Medlem sedan mars 20041 505 inlägg
#25

@nders skrev:

Ett undantag är response.write - som du kan använda både med och utan parenteser.

Om man ska vara petnoga :e så kan man anropa alla subs med parenteser om anropet innehåller 1 argument.
Då omsluter parenteserna nämligen bara argumentets uttryck, tex. en sträng.
Att omsluta ett uttryck med parenteser påverkar ingenting. Jämför detta:

Fruit = "Banana"
Fruit = ("Banana")
Response.Write "Banana"
Response.Write("Banana")
Response.Write("Banana") & ("Apple")
Medlem sedan mars 200973 inlägg
#26

När man kan skippa paranteser brukar jag göra det med anledning att det i slutändan blir mindre kod :)

Det var bra att veta det med sub då jag tidigare inte jobbat med det utan alltid jobbat med värden som jag sedan använt för att få till funktionen (heter väl hårdkodning om jag inte har fel?) Kan väl nästan säga att all min kod är hårdkodad då jag inte inte lärt mig så många funktioner, dock är det ju fördel att använda funktioner, både för prestandans och snygghetens skull som jag uppfattat det hittills.

Trodde faktiskt inte ens att man kunde använda paranteser i Response.Write

Tack för alla svar, markerar ledels svar som slutgiltligt då han svarade först på den huvudsakliga frågan som tråden handlar om.

Medlem sedan okt. 2007446 inlägg
#27

skumt, jag har alltid kört
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'"),,128
dvs utan Call och med ",,128" utanför parantesen och aldrig fått felmess på det...

Medlem sedan juni 200032 967 inlägg
#28

Enl. Troxys inlägg kan man ha parentes runt ett enskilt argument. Provar du på att omsluta flera argument i samma parentes kommer du stöta på patrull.

Medlem sedan juni 20008 205 inlägg
#29

rhdf skrev:

skumt, jag har alltid kört
objConn.execute("DELETE FROM tabell WHERE user = '" & strUser "'"),,128
dvs utan Call och med ",,128" utanför parantesen och aldrig fått felmess på det...

Nej, det är för att paranteserna hamnar runt ett uttryck istället för runt parameterlistan.

Anropar man en funktion behöver man paranteser runt parameterlistan.

Anropar man en sub får man inte ha paranteser runt parameterlistan om man inte använder call.

Ett uttryck får alltid ha en parantes runt sig. I de fall där man anropar en sub som bara har ett argument kan det se ut som att man får ha paranteser runt parameterlistan (utan call), eftersom uttrycket som utgör parameterlistan kan omslutas av en parantes (som då blir en del av uttrycket, vilket alltså slutar med att parameterlistan inte har några paranteser runt sig).

Personligen tycker jag att man ska förstå syntaxen för så grundläggande saker som proceduranrop i det språk man kodar. VBscript är förstås lite udda som har en syntaktisk skillnad på hur man anropar procedurer med och utan returvärden, vilket gör att man måste lära sig även vad varje funktion returnerar, men det får man leva med om man sitter och jobbar med ett språk som varit på utgående i dryga sju år :)

Medlem sedan dec. 2004736 inlägg
#30

Varför varför varför får man ha paranteser runt en parameter? Finns det någon användning för det? Jag gick på det där rätt hårt som kan ses i mitt kodexempel, då jag tänkte att ASP liknade något annat normalt språk...

Medlem sedan okt. 2007446 inlägg
#31

spango skrev:

Personligen tycker jag att man ska förstå syntaxen för så grundläggande saker som proceduranrop i det språk man kodar. VBscript är förstås lite udda som har en syntaktisk skillnad på hur man anropar procedurer med och utan returvärden, vilket gör att man måste lära sig även vad varje funktion returnerar, men det får man leva med om man sitter och jobbar med ett språk som varit på utgående i dryga sju år :)

hehe
saken är nog den att jag aldrig reflekterat över just detta fall, annars så är jag på det klara över när var och hur man skall/kan ha paranteser.

men alla såna här dumheter slipper man ju numera när man kodar .net istället

Ledel skrev:

Varför varför varför får man ha paranteser runt en parameter? Finns det någon användning för det? Jag gick på det där rätt hårt som kan ses i mitt kodexempel, då jag tänkte att ASP liknade något annat normalt språk...

tekniskt sett så kan du ju ha vad fasen som helst som parameter till en funktion
tex doThings(10*(3584+354/75)+some_variabel, "en sträng", some_other_stuff)
uträkningen i första parametern kan ju då sättas inom paranteser..
det ser helt fel ut men det funkar....

269 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)