19. marts 2004 - 21:28Der er
21 kommentarer og 1 løsning
Problem med en SQL forespørgsel mod Acces
Hej JEg har lavet en forespørgsel hvor jeg putter en variabel ind som kommer med i i request objektet. Det giver ikke resultat bare. Jeg får ikke hentet noget. Hvis jeg derimod hardcoder forespørgslen virker det. Kan det være fordi der kommer noget mellemrum omkring parametren? Min kode ser ud som følger: var = request.QueryString("firma") sql = "SELECT Beskrivelse FROM UdstyrTabel WHERE Selskab = 'Mærsk'" '" & var & "'"
Set RSLinks = Server.CreateObject("ADODB.Recordset") RSLinks.Open sql,conn
hvordan sendes 'firma' med over til din side ? fra en link du har klikket på, eller fra et formular der bliver postet ? hvis det er fra et formular, hvilken method bruger du ? POST eller GET ?
Jeg har en drop down menu hvor jeg bruge en onchange funktion. Jeg kan se at der kommer et firma navn over. Jeg har prøvet at skrive det ud. Det er bare når jeg forsøger at bruge det i min forespørgsel at det går galt. Eller, det går ikke galt, men der kommer ikke noget med overhovedet. Meget mærkeligt.
ja. Nu har jeg prøvet at flytte siden over på en anden server. Der får jeg en fejl der hedder no value given for one or more required parameters. Og det sker i den linie hvor jeg bruger sætningen. Meget mærkeligt. Er der forskel på hvilken IIS man kører på?
Ja, det har jeg. Siden er som følger. Jeg henter en liste over nogle selskaber. Her bruger jeg forbindelsen til at hente. Det gøres hver gang. Efter dette lukker jeg forbindelsen og det samme med RSLinks. Dem åbner jeg så igen. Jeg kalder også den sub hvor jeg åbner forbindelsen til DB. Hvis jeg ligger siden på en 2000 IIS giver den en fejl der hedder No value given for one or more required parameters. Hvis jeg derimod kører det på XP IIS giver den ikke en fejl. Jeg bliver snart Microsoft sindsyg.....
hmm ... hvis det er indenfor samme side, så giver det da ingen mening i at åbne og lukke din forbindelse flere gange. Du åbner den i starten af din side, og lukker den i slutningen af din side.
har du prøvet at lave en *meget* simpel side, der ser sådan ud:
<% Set conn = Server.CreateObject("ADODB.connection") conn.open "[DINE CONNECTION DETAILS]" var = request.QueryString("firma") sql = "SELECT Beskrivelse FROM UdstyrTabel WHERE Selskab = " & var & "'" Set RSLinks = Server.CreateObject("ADODB.Recordset") RSLinks.Open sql,conn while not RSLinks.EOF Response.Write( RSLinks("Beskrivelse" ) & "<br>" ) RSLinks.MoveNext wend conn.close %>
kald denne side med det samme parameter som du gør på den anden side.
hvis ikke dette fungerer ... vis så din connection string. det kunne måske være noget galt i den
Hej sirtiger Øh nu spørger jeg forsigtigt om du har kopieret din SELECT sætning direkte fra koden til dit spørgsmål...for der mangler en gnyf (enkelt apostrof) før 'var' Altså: WHERE Selskab = " & var & "'" Ændres til WHERE Selskab = '" & var & "'"
Nå, men mystikken breder sig. Det er det samnme når jeg laver en ny simpel side. Men her er min connection string i hvert fald
dim conn,sql 'Det følgende trækker stien ud - så den kan bruges til noget. sti=request.servervariables("PATH_TRANSLATED") arrSti = Split(sti, "\")
For i = 0 To UBound(arrSti) -1 strSti = strSti & arrSti(i)&"\" Next
'Denne function laver en forbindelse til databasen. Den bruger stien fra det ovenstående til at finde DB function OpenConn( DBName ) Set conn = Server.CreateObject("ADODB.Connection") ODBCpath = left(request.servervariables("PATH_TRANSLATED"),instrrev(request.servervariables("PATH_TRANSLATED"),""))
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& strSti & DBName end function OpenConn("Gate gourmet.mdb")
- hvor Dim'er du dit 'conn' objekt ? Det ser umiddelbart ikke ud som om du Dim'er nogen steder, dermed så vil ikke din connection være synlig udenfor din function. Hvis du sætter 'Dim conn' i linien over din function, så kunne det være at det hjalp (med mindre du har Dim'et den udenfor din function allerede)
- Du laver "Set conn = Server...", men du åbner med "Conn". Det har nok ingen betydning, da VBScript ikke er case sensitive, men det er dårlig kodeskik at gøre det.
Det kan du have ret i - det er god gedigent genbrug. Har dog nu lavet den om. Der er ikke en centimeter forskel. Jeg får det samme. Jeg har som du foreslog lavet en meget simpel siden som bliver kaldt med samme argument. Hvis jeg direkte koder forespørgslen, så fungere det fint, men hvis jeg bruger variablen sker der ikke noget. Jeg har dog lige fundet ud af at resultatet bliver det samme hvis jeg direkte koder, men indsætter et mellemrum som det første i det som den søger på. Er der en måde at sørge for at man slipper for at der er mellemrum nogen steder i en variabel?
dim conn,sql,var Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("gategourmet.mdb")
var = request.form("firma") response.write(var)
sql = "SELECT Beskrivelse FROM Equiptment WHERE Selskab ='" & var &"'" Set RSLinks = Server.CreateObject("ADODB.Recordset") RSLinks.Open sql,conn while not RSLinks.EOF Response.Write( RSLinks("Beskrivelse" ) & "<br>" ) RSLinks.MoveNext wend conn.close %> Dette er den simple kode som jeg sidder og piller med. JEg er enig i at det lyder mystisk. Jeg er tæt på at kaste mig ud fra altanen. godt jeg bor i stuen ;-)
Nå, men jeg prøvede lige at bruge Trim funktionen. DET VIRKER....... JEg er lykkelig. Hvis du har en forklaring, jamen så vil jeg da gerne høre den. Smid lige et svar, så kan du få dine meget velfortjente point - og jeg kan komme videre i mit liv...
hmm ... jeg kan ikke give en forklaring på at du får de fejlmeddelelser du opgiver, bare fordi det er et mellemrum i din variabel. Normalt ville dette kun resultere i at sit søg ikke giver noget resultat ... hmm .. mystisk.
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.