On 09 Jun 2007 06:53:52 GMT, Jørgen Olesen <nospam@nospam.dk> wrote:
>Jørn Andersen wrote in dk.edb.internet.webdesign.serverside.asp:
>>> >1: ForumName = Request.QueryString("Group")
>> >2: stForum = chr(34) & ForumName & chr (34)
>> >I det viste eksempel vil jeg åbne tabel navnet, som jeg henter
>> >ind fra en parameter jeg kalder siden med.
>> >I eksemplet ville jeg kalde siden med "read.asp?group=support"
>> >for at åbne tabellen support.
>
>Grunden til linie 2 er at jeg ville tilføje apostroffer, så resultatet er
>"Support"
Jamen, det er det skam også - "support" er blot repræsenteret af en
variabel, der hedder ForumName eller stForum.
>> <url:
http://www.w3schools.com/ado/met_rs_open.asp>
>> objRecordset.Open source,actconn,cursortyp,locktyp,opt
<snip>
>Har studeret w3schools site, men er ikke blevet klogere
>Der står faktisk heller ikke at man kan bruge en variabel.
Eksemplet er sådan set vist med 5 variable:
objRecordset.Open source,actconn,cursortyp,locktyp,opt
>Kan man bruge en SQL sætning som kun vælger tabellen?
>Det kunne måske være løsningen.
Muligvis, men man skulle også kunne åbne en tabel, selv om jeg aldrig
har brugt det.
>> >Hvordan får jeg fortalt den, med en variabel, hvilken tabel jeg
>> >ønsker at åbne?
>>
>> 2: stForum = ForumName
>>
>> eller bare:
>> 6: msgForum.Open ForumName, database, 2, 2
>
>Dette svare til at jeg skriver:
>6: msgForum.Open support, database, 2, 2
>Hvilket ikke er gyldigt da tabel navnet skal være omklamret af apostroffer.
Nej, det er ikke rigtigt. Når der står > support < uden apostroffer, er
det en variabel - men du har ikke en variabel, der hedder support.
Når der står ForumName, så er det en variabel med værdien "support".
Når der står "support", så betyder anførselstegnene, at det er en streng
med indholdet > support <.
>Er iøvrigt prøvet, og resultere i flg. fejlmeddelse:
>
>"ADODB.Recordset error '800a0bb9'
>Arguments are of the wrong type, are out of acceptable range, or are in
>conflict with one another. "
>
>Jeg tolker problemet som forkert type, da
D kan evt. slå fejl-nummeret op på:
<url:
http://www.aspfaq.com/>
- som giver:
<url:
http://tutorials.aspfaq.com/8000xxxxx-errors/why-do-i-get-800a0bb9/800a1391-errors.html>
I dette tilfælde giver det dog ikke ret meget nyt.
Men det fik mig dog til at tænke på, om ikke opt-værdien skal være sat,
når der åbnes en tabel og ikke en SQL-forespørgsel?
I så fald skulle:
>6: msgForum.Open ForumName, database, 2, 2
- i stedet være:
6: msgForum.Open ForumName, database, 2, 2, 2
Prøv om det gør en forskel - ?
Ellers kunne du prøve at skrælle alt det overflødige væk først og se om
det virker:
1: ForumName = "support"
2: StrDsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "
& Server.MapPath("forum.mdb") &";"
3: Set msgForum = Server.CreateObject ("ADODB.Recordset")
4: msgForum.Open ForumName, strDsn, 2, 2, 2
Eller hvis du vil lave en SQL-forespørgsel:
1: strSql = "SELECT * FROM support"
2: StrDsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "
& Server.MapPath("forum.mdb") &";"
3: Set msgForum = Server.CreateObject ("ADODB.Recordset")
4: msgForum.Open strSql, strDsn
>> Når du har den slags problemer, så test ved at udskrive dine variable,
>> inden de fejler, for at checke, om de indeholder det, du forventer - fx:
>>
>> Response.Write stForum
>
>Same procedure here!
>Altid udskriv variablen til skærmen, hvis du er i tvivl.
>Jeg kunne jo godt lave en IF..THEN eller CASE..OF som tester variablen
>ForumName, for derefter at lave hver deres åbning af tabellerne, men det er
>både klodset og ufleksibelt.
Skeln mellem, hvad du bruger til test-formål og hvad du bruger i den
endelige kode. Til test kan man lave mange underlige krumspring for at
finde fejl.
Men under alle omstændigheder skal du lave en eller anden form for
validering af, om ForumName faktisk indeholder noget fornuftigt -
specielt når det er QueryString-varaibel, du bruger:
Jeg bruger *altid* som minimum at teste for tomme strenge:
ForumName = Trim("" & Request.QueryString("Group"))
If ForumName = "" Then
' Fejl
Else
' Fortsæt
End If
I andre tilfælde skal der checkes for SQL-injection
<url:
http://www.asp-faq.dk/article/?id=95>
- eller for om resultatet er et tal eller andet - afhænger af
forholdene.
Good luck!
--
Jørn Andersen,
Brønshøj