Avatar billede sirtiger Nybegynder
19. marts 2004 - 21:28 Der 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

Håber der er nogen der kan hjælpe mig.
Avatar billede sirtiger Nybegynder
19. marts 2004 - 21:34 #1
Hov - lidt rodet kode. Rigtigt så ser den sådan her ud.

var = request.QueryString("firma")
                                    sql = "SELECT Beskrivelse FROM UdstyrTabel WHERE Selskab = " & var & "'"

                                    Set RSLinks = Server.CreateObject("ADODB.Recordset")
                                    RSLinks.Open sql,conn
Avatar billede nute Nybegynder
19. marts 2004 - 21:41 #2
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 ?
Avatar billede sirtiger Nybegynder
19. marts 2004 - 21:51 #3
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.
Avatar billede sirtiger Nybegynder
19. marts 2004 - 21:53 #4
Hov - og jeg bruge get, så jeg kan også se hvad der kommer med i adressen - og det ser også fint ud.
Avatar billede nute Nybegynder
19. marts 2004 - 22:02 #5
så det vil sige at hvis du laver en

Response.write( request.QueryString("firma") )

så får du værdien skrevet ud ??
Avatar billede sirtiger Nybegynder
19. marts 2004 - 22:04 #6
Ja, præcis.
Avatar billede nute Nybegynder
19. marts 2004 - 22:09 #7
ehh ... det giver da ingen mening ... har du prøvet:

sql = "SELECT Beskrivelse FROM UdstyrTabel WHERE Selskab = '" & request.QueryString("firma") & "'"
Avatar billede sirtiger Nybegynder
19. marts 2004 - 22:16 #8
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å?
Avatar billede nute Nybegynder
19. marts 2004 - 22:21 #9
en request er en request er en request uanset hvilken IIS man kører på.

har du åbnet dit 'conn' objekt? med

conn.open "[DINE CONNECTION DETAILS]"
Avatar billede sirtiger Nybegynder
19. marts 2004 - 22:36 #10
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.....
Avatar billede nute Nybegynder
19. marts 2004 - 22:44 #11
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

/nute
Avatar billede kimovitch Nybegynder
20. marts 2004 - 00:19 #12
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 & "'"

M.v.h.
Kim
Avatar billede sirtiger Nybegynder
20. marts 2004 - 13:43 #13
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")
Avatar billede nute Nybegynder
20. marts 2004 - 13:53 #14
oki ... det er den mest "kryptiske" connection jeg har set ... er det virkelig nødvændig at gøre det så besværlig ?? hvorfor ikke kun bruge:

hvordan

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath( DBName )

men... to ting:

- 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.
Avatar billede nute Nybegynder
20. marts 2004 - 13:54 #15
hovsa .. en lille smutter :-) ordet 'hvordan' skal ikke være med som endel af koden ;o]
Avatar billede sirtiger Nybegynder
20. marts 2004 - 14:04 #16
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?
Avatar billede nute Nybegynder
20. marts 2004 - 14:36 #17
du kan lave en Trim på din variabel:

var = Trim( Request.QueryString("firma") )

det lyder *meget* mystisk dette her. hvis din kode ikke fylder altfor meget, så smid den herind, så kan jeg teste den og se hvad der kan være galt.
Avatar billede sirtiger Nybegynder
20. marts 2004 - 14:40 #18
<%

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 ;-)
Avatar billede sirtiger Nybegynder
20. marts 2004 - 14:43 #19
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...
Avatar billede nute Nybegynder
20. marts 2004 - 15:11 #20
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.

Den kode du har postet fungerer helt fint for mig

/nute
Avatar billede sirtiger Nybegynder
20. marts 2004 - 15:16 #21
Tja, men nu virker den også for mig med den lille modifikation. Men 1000 tak or hjælpen
Avatar billede nute Nybegynder
20. marts 2004 - 16:58 #22
godt ... anytime :o]

/nute
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