Avatar billede bigtrouble Nybegynder
01. december 2002 - 16:18 Der er 20 kommentarer og
1 løsning

Søgning i DB

Hvordan løser jeg følgende problem?

Prøv at se på : http://www.service-info.dk/admin/test.asp

Her er det muligt at selecte felter fra min DB, nedenunder kan der skrives en søgetekst.

Hvordan laver jeg scriptet (kaldet test1.asp)
til at selecte feltet der er valgt (D1) og søge efter teksten (T1) ??

Jeg har lavet nogle forsøg, men uden held.

200 point for korrekt svar.
Avatar billede eagleeye Praktikant
01. december 2002 - 16:22 #1
Prøv med denne SQL det er ud som om du har requerst.form inde i SQL streng og ikke som variable:


sql="select * from usgdatabase where " & request.form("D1") & "='"&request.form("T1")&"'"
Avatar billede erikjacobsen Ekspert
01. december 2002 - 16:32 #2
og det har han fået at vide før : http://www.eksperten.dk/spm/289340
;)
Avatar billede eagleeye Praktikant
01. december 2002 - 16:34 #3
men du har denne linie i din kode:

sql="select * from usgdatabase where (request.form("D1")='"&request.form("T1"))&"'"

og så viser den fejl ved " lige før D1 så prøv med den SQL jeg har vist.
Avatar billede bigtrouble Nybegynder
01. december 2002 - 16:55 #4
Eagleeye:

Det giver en 500 intern server error.

Her er koden fra test1.asp

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=c:\websider\service-info.dk\db\usgdatabase.mdb"
Conn.Open DSN
sql="select * from usgdatabase where " & request.form("D1") & "='"&request.form("T1")&"'"
set record=conn.execute(sql)
If not (record.BOF Or record.EOF) Then

bla.bla.bla
Avatar billede eagleeye Praktikant
01. december 2002 - 16:59 #5
den kommer med denne fejl..

Microsoft VBScript compilation error '800a03f6'

Expected 'End'

/admin/test1.asp, line 537


Prøv i IE at slå denne fra.:
funktioner -> internetindstillinger -> avanceret -> fjern kryds i "ved meddelelse om uskadelige http-fejl"

Så skulle du få en bedre fejl kode.
Avatar billede eagleeye Praktikant
01. december 2002 - 16:59 #6
Du har en end if til denne?

If not (record.BOF Or record.EOF) Then
Avatar billede bigtrouble Nybegynder
01. december 2002 - 17:11 #7
? Ved mig giver den en 500 fejl ?
Avatar billede bigtrouble Nybegynder
01. december 2002 - 17:12 #8
Ja jeg har en end if ;)
Avatar billede bigtrouble Nybegynder
01. december 2002 - 17:13 #9
Ahh jeg har en taste fejl :(
Avatar billede bigtrouble Nybegynder
01. december 2002 - 17:16 #10
Ok det kører nu ;)

Hvordan kan jeg, hvis er er flere poster der passer på søgningen?
Feks. hvis der søges på kim hansen og der er 5 forskellige kim hansen

Er det ikke muligt at liste disse under hinanden med mulighed for klik på det ønskede.

(NB du skal nok for point for dit svar :) )
Avatar billede eagleeye Praktikant
01. december 2002 - 17:19 #11
du kan lave et loop som udskriver.:

Er det sådan noget du tænker på?


do while not rs.EOF

  response.write rs("kolonnenavn") & " "

  response.write "se mere klik <a href=""details.asp?bruger="&rs("id")&""">her</a><br>"
 
  rs.movenext
loop
Avatar billede bigtrouble Nybegynder
01. december 2002 - 17:31 #12
Ja noget i den stil, men er der kun EN post der passer på søgningen skal den bare liste denne.
Avatar billede eagleeye Praktikant
01. december 2002 - 17:36 #13
Så skal du enten lave en SQL som tælle antallet eller åbne recordet ved rs.Open

rs.Open SQL, ConnectionObject, 1, 3

Så kan man skrive

if rs.RecordCount = 1 then
  response.write rs("kolonnenavn")

else
  do while not rs.EOF

    response.write rs("kolonnenavn") & " "

    response.write "se mere klik <a href=""details.asp?bruger="&rs("id")&""">her</a><br>"
 
    rs.movenext
  loop
end if
Avatar billede eagleeye Praktikant
01. december 2002 - 17:38 #14
en SQL som tæller:

sql="select Count(*) as antal from usgdatabase where " & request.form("D1") & "='"&request.form("T1")&"'"
set record=conn.execute(sql)
antal = record("antal")

sql="select * from usgdatabase where " & request.form("D1") & "='"&request.form("T1")&"'"
set record=conn.execute(sql)
If not (record.BOF Or record.EOF) Then
  if CInt(antal) = 1 then
    response.write rs("kolonnenavn")

  else
    do while not rs.EOF

      response.write rs("kolonnenavn") & " "

      response.write "se mere klik <a href=""details.asp?bruger="&rs("id")&""">her</a><br>"
 
      rs.movenext
    loop
  end if
end if
Avatar billede bigtrouble Nybegynder
01. december 2002 - 18:17 #15
Cool det prøver eg at arbejde lidt videre med.

Point til dig.

Tak for hjælpen
Avatar billede bigtrouble Nybegynder
01. december 2002 - 18:31 #16
Lige et spørgsmål:

Jeg skriver i test1.asp
<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=c:\websider\service-info.dk\db\usgdatabase.mdb"
Conn.Open DSN
sql="select Count(*) as antal from usgdatabase where " & request.form("D1") & "='"&request.form("T1")&"'"
set record=conn.execute(sql)
antal = record("antal")

sql="select * from usgdatabase where " & request.form("D1") & "='"&request.form("T1")&"'"
set record=conn.execute(sql)
If not (record.BOF Or record.EOF) Then
  if CInt(antal) = 1 then
    response.write record("type")

  else
    do while not record.EOF

      response.write record("type") & record("password") & " "

      response.write "se mere klik <a href=""details.asp?bruger="&record("id")&""">her</a><br>"
 
      record.movenext
    loop
  end if
end if

%> 

Hvilket virker ok, hvis der er flere poster.

Men i details.asp hvor jeg skriver:
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=c:\websider\service-info.dk\db\usgdatabase.mdb"
Conn.Open DSN


sql="select * from usgdatabase where " & request.form("D1") & "='"&request.form("T1")&"'"
set record=conn.execute(sql)

Får jeg en fejl ?
Avatar billede bigtrouble Nybegynder
01. december 2002 - 18:39 #17
Ups lige en paste fejl ;)

Her er hvad jeg skriver:
sql="select * from usgdatabase order by ID"
set record=conn.execute(sql)

Men er ID feks=336 lister den ID 1
er ID = 409 lister den også nr. 1
Avatar billede eagleeye Praktikant
01. december 2002 - 19:01 #18
Så skal du hendte ID fra Querystringen og bruge det i SQL'en:

ID = request.Querystring("bruger")
sql="select * from usgdatabase where id = " & id
set record=conn.execute(sql)
Avatar billede bigtrouble Nybegynder
01. december 2002 - 19:53 #19
Jeps det virker sgu :)

Kan jeg ikke på en eller anden måde bruge wildcard under søgning?

Jeg ved godt jeg kan bruge % tegnet sammen med Like, men er det ikke muligt, hvis jeg vil søge på "Kim Nielsen" feks bare at skrive "Ki*" og så lade den inde alt der starter med Ki ?
Avatar billede eagleeye Praktikant
01. december 2002 - 20:05 #20
man kan kun bruge wildcards hvis man bruger LIKE.:

"SELECT .... WHERE kolonnne LIKE 'Ki%'"
Avatar billede bigtrouble Nybegynder
02. december 2002 - 07:18 #21
Ok.
Tak for hjælpen
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