Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 12:36 Der er 17 kommentarer og
1 løsning

Udtræk fra db med .asp

Hej...

Jeg står i et kæmpe problem da jeg er ret grøn på asp området kan jeg ikke helt finde ud af hvordan det skal kunne lade sig gøre at trække nogle ting ud fra en database og få dem ind i nogle bestemte tabeller.

Det skal gerne komme til at se ud som følgende www.thomasnet.dk/profil1.jpg og man kan se hvad de forskellige poster hedder det er dem som er sat ind i mellem ( & )

Databasen ligger i mappen db/db.mdb.

Håber der er nogen der gider hjælpe med at lave denne asp fil så jeg selv kan se hvordan det skal laves når man mixser asp database udtræk og almindelig html.

Håber det er forståeligt ellers spørg og jeg vil prøve at omformulere.

På forhånd tak for hjælpen
- Thomas Nielsen
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 12:51 #1
OK, Du laver en fil der hedder .asp til efternavn, og så skriver du:
<%@Language=VBScript%>
<%
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
    Server.Mappath("/db/db.mdb") & ";")
   
Set Com = Server.CreateObject("ADODB.Command")
Set Rec = Server.CreateObject("ADODB.Recordset")
Com.ActiveConnection = Con

Con.Close
Set Con = nothing
Set Com = nothing
Set Rec = nothing
%>

Så Uploader du den og ser den i browseren, og så tager vi det derfra
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 12:52 #2
Siden skulle helst være helt tom, så virker det som det skal, ellers må du sende den fejlmeddelse der kommer.
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 12:56 #3
Jamen, det skal helst gerne stilles op i tabeller lidt ligesom på billedet :)
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 13:02 #4
Nu et trin ad gangen, ikke? Først skal vi have skabt forbindelsen til databasen. Ellers bliver det for forvirrende

Efter linien Com.ActiveConnection = Con er databorbindlsen klar og åben, og her kan man så indsætte det html der skal bruges til at vise data frem på den måde man ønsker.

Kan du få ovenstående til at virke?
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 13:04 #5
ja det funker, siden er bare hvid :)

sorry troede du var færdig.
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 13:18 #6
Forresten er det svært at lave sådan så den henter informationerne fra url´en ud fra en ID ? Jeg har noget kode i forvejen der ser sådan her ud :

<!--#include file="protect.inc"-->
<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("db/db.mdb")
Conn.Open DSN

' Hent fra databasen afhængig af værdien id fra URL
strSQL = "Select * From users Where userId = " & Request.Querystring("id")
Set rs = Conn.Execute(strSQL)

' Skriv personens data
Response.Write "<dt>Navn:</dt><dd>" & rs("Fornavn") & " " & rs("Efternavn") & "</dd>"
Response.Write "<dt>Side status:</dt><dd>" & rs("status") & "</dd>"
Response.Write "<dt>Klasse:</dt><dd>" & rs("Klasse") & "</dd>"
Response.Write "<dt>Email:</dt><dd>" & rs("email") & "</dd>"

Conn.Close
Set Conn = Nothing
%>
</dl>
<p><a href="adresseliste.asp">Retur til listen</a></p>

Måske noget af det kunne bruges ?

Det er sådan en adresse bog hvor den selv laver linksne til brugeren også skal man komme ind på den side som jeg gerne vil have lavet her.

Håber ikke det er lidt sent jeg kommer med det.
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 14:24 #7
Undskyld forsinkelsen.

Nej, det er ikke svært.
Nu skal vi have trukket data ud, med en SQL Sætning, så helefilen skal nu se sådan ud:

<%@Language=VBScript%>
<%
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
    Server.Mappath("/db/db.mdb") & ";")
   
Set Com = Server.CreateObject("ADODB.Command")
Set Rec = Server.CreateObject("ADODB.Recordset")
Com.ActiveConnection = Con

'Her begynder vi at trække data
Com.CommandText = "SELECT Fornavn, Efternavn FROM TabelNavn WHERE ID = " & Request.Querystring("ID")

Rec.Open Com, , 0, 1

Fornavn = Rec("Fornavn")
Efternavn = Rec("Efternavn")
Rec.Close

'Så er vi færdige
Con.Close
Set Con = nothing
Set Com = nothing
Set Rec = nothing
%>
<html>
<body>
Her er navnet:<br>
<%=Fornavn%> <%=Efternavn%>
</body>
</html>

I linien Com.CommandText = "SELECT ...
- skal du rette til, så navnet på tabellen i databasen står i stedet for "TabelNavn", og sørg for at "Navn", "Efternavn" og "ID" bliver erstattet med de korrekte navne, hvis du har valgt andre navne end dem jeg har gættet på.

Og se så filen med sådan en url: http://www.blabla.dk/filnavnet.asp?ID=1

- erstat 1 med det ID du faktisk vil se
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 14:37 #8
ahhh perfekt, vis jeg har fået det rigtig skriver jeg bare de dataer som den skal hente her : Com.CommandText = "SELECT Fornavn, Efternavn FROM TabelNavn WHERE ID = " &

Og bagefter giver dem navne her : Fornavn = Rec("Fornavn")
Efternavn = Rec("Efternavn")
Rec.Close

Er det rigtig ?
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 14:38 #9
og tilføjer dem i mine tabler med <%=Fornavn%>...
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 22:15 #10
Tak for hjælpen :) vis du smider et svar så du kan få din belønning vil det være finno :)
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 22:38 #11
Tak for det!
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 22:51 #12
he he det gik vist ikke helt som forventet :) det blev en kommentar *gg*

mens jeg har dig her er det nemt at hente info om den aktuele bruger ?
der mener jeg fornavn og efternavn ?
Avatar billede ldanielsen Nybegynder
29. januar 2004 - 23:16 #13
Hovsa!

Ja det er nemt nok, hvis du mener at han skal indtaste det og du så vil gemme det i databasen.
Avatar billede tekniskdesigner Nybegynder
29. januar 2004 - 23:26 #14
Nej jeg mener når man er logget ind, vil jeg godt have sådan en box hvor der står:

Brugernavn : Jens Jensen    Status : administrator

og der skal det selvfølgelig skifte fra bruger til bruger :)
Avatar billede ldanielsen Nybegynder
30. januar 2004 - 10:13 #15
Det der login, er det windows login, eller er det noget der skal bygges i ASP?
Avatar billede tekniskdesigner Nybegynder
30. januar 2004 - 10:15 #16
Jeg bruger følgende koder:

login.asp

<%
' Hvis der er blevet trykket på knappen "Login"
If Request.Form("Action") = "Login" Then
    ' Her forberedes de indtastede værdier til validering
    strUID = Trim(Replace(Request.Form("Brugernavn"),"'",""))
    strPWD = Trim(Replace(Request.Form("Adgangskode"),"'",""))

    ' Hvis der er skrevet noget i både brugernavn og adgangskode
    If Len(strUID) > 0 And Len(strPWD) > 0 Then

        ' DSNLess forbindelse til databasen
        Set myConn = Server.CreateObject("ADODB.Connection")
        myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/db.mdb")

        ' Opbygning af SQL streng
        strSQL = "SELECT UserID FROM Users"&_
            " WHERE (Username = '" & strUID & "')"&_
            " AND (Password = '" & strPWD & "')"

        Set rs = myConn.Execute(strSQL)
        If Not (rs.BOF Or rs.EOF) Then
            ' Hvis brugeren fandtes i databasen
            intUID = rs("UserID")
        Else
            ' Hvis brugeren ikke fandtes i databasen
            strERR = "Du blev ikke godkendt af systemet"
        End If

        ' Rydder op i vores connection objekt
        myConn.Close
        Set myConn = Nothing

        If Len(intUID) Then
            ' Hvis variablen intUID indeholder en værdi sættes denne i sessionen "UserID" og brugeren bliver sendt videre
            Session("UserID") = intUID
            Response.Redirect("beskyttet.asp")
        End If
    Else
        ' Hvis der ikke var angivet brugernavn og adgangskode
        strErr = "Du skal skrive både brugernavn og adgangskode"
    End If

    If Len(strErr) > 0 Then
        ' Her laves fejlmeddelsen om til rød skrift
        strErr = "<p><font color=red>" & strErr & "</font></p>"
    End If
End If
%>
<html><head>
<title>Login script</title>
</head><body>
<form method="POST" action="login.asp">
  <p><font size="4">Angiv brugernavn og adgangskode</font></p><%=strErr%>
  <table border="0">
    <tr>
      <td width="50%">Brugernavn:</td>
      <td width="50%"><input type="text" name="Brugernavn" size="20"></td>
    </tr>
    <tr>
      <td width="50%">Adgangskode:</td>
      <td width="50%"><input type="password" name="Adgangskode" size="20"></td>
    </tr>
  </table>
  <p><input type="submit" value="Login" name="Action"></p>
</form>
</body></html>

måske det kan hjælpe :)
Avatar billede ldanielsen Nybegynder
31. januar 2004 - 10:58 #17
Ja helt sikkert.

Det der sker på login.asp, er at UserID fra databasen huskes i Session("UserID"). Jeg går udfra at UserID er den unikke nøgle i tabellen, det som jeg kaldte ID tidligere.

Hvis du vil have Fornavn og efternavn, så gøre du det præcis som du gør i det første tilfælde, blot siger den:
Com.Commandtext = "SELECT Fornavn, Efternavn FROM Users WHERE UserID = " & Session("UserID")

Men jeg har et bedre forslag; du kan gemme fornavn/efternavne i Session-variabler ligesom du gør med UserID. Så har du dem klar på alle dine sider, uden at skulle åbne databasen blot for det.

Så i login.asp gør du dette;

<%
' Hvis der er blevet trykket på knappen "Login"
If Request.Form("Action") = "Login" Then
    ' Her forberedes de indtastede værdier til validering
    strUID = Trim(Replace(Request.Form("Brugernavn"),"'",""))
    strPWD = Trim(Replace(Request.Form("Adgangskode"),"'",""))

    ' Hvis der er skrevet noget i både brugernavn og adgangskode
    If Len(strUID) > 0 And Len(strPWD) > 0 Then

        ' DSNLess forbindelse til databasen
        Set myConn = Server.CreateObject("ADODB.Connection")
        myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/db.mdb")

        ' Opbygning af SQL streng
        strSQL = "SELECT UserID, Fornavn, Efternavn FROM Users"&_
            " WHERE (Username = '" & strUID & "')"&_
            " AND (Password = '" & strPWD & "')"

        Set rs = myConn.Execute(strSQL)
        If Not (rs.BOF Or rs.EOF) Then
            ' Hvis brugeren fandtes i databasen
            intUID = rs("UserID")
            Session("Fornavn") = rs("Fornavn")
            Session("Efternavn") = rs("Efternavn")
        Else
            ' Hvis brugeren ikke fandtes i databasen
            strERR = "Du blev ikke godkendt af systemet"
        End If

        ' Rydder op i vores connection objekt
        myConn.Close
        Set myConn = Nothing

        If Len(intUID) Then
            ' Hvis variablen intUID indeholder en værdi sættes denne i sessionen "UserID" og brugeren bliver sendt videre
            Session("UserID") = intUID
            Response.Redirect("beskyttet.asp")
        End If
    Else
        ' Hvis der ikke var angivet brugernavn og adgangskode
        strErr = "Du skal skrive både brugernavn og adgangskode"
    End If

    If Len(strErr) > 0 Then
        ' Her laves fejlmeddelsen om til rød skrift
        strErr = "<p><font color=red>" & strErr & "</font></p>"
    End If
End If
%>
<html><head>
<title>Login script</title>
</head><body>
<form method="POST" action="login.asp">
  <p><font size="4">Angiv brugernavn og adgangskode</font></p><%=strErr%>
  <table border="0">
    <tr>
      <td width="50%">Brugernavn:</td>
      <td width="50%"><input type="text" name="Brugernavn" size="20"></td>
    </tr>
    <tr>
      <td width="50%">Adgangskode:</td>
      <td width="50%"><input type="password" name="Adgangskode" size="20"></td>
    </tr>
  </table>
  <p><input type="submit" value="Login" name="Action"></p>
</form>
</body></html>
Avatar billede ldanielsen Nybegynder
31. januar 2004 - 11:09 #18
I øvrigt er der som du måske har opdaget flere måder at åbne Recordset på, og du bruger den mest simple:

Set Con = Server.CreateObject("ADODB.Connection")
Con.Open ("<ConnectionString her>")

Set Rec = Con.Execute("SELECT ....")
'Så er den åben

Con.Close
Set Con = Nothing
Set Rec = Nothing


Jeg bruger den udvidede syntaks:

Set Con = Server.CreateObject("ADODB.Connection")
Con.Open ("<ConnectionString her>")
Set Com = Server.CreateObject("ADODB.Command")
Set Rec = Server.CreateObject("ADODB.Recordset")
Com.ActiveConnection = Con
Com.CommandText = "SELECT ..."

Rec.Open Com, , 0, 1
'Så er den åben

Rec.Close
Con.Close
Set Con = nothing
Set Com = nothing
Set Rec = nothing

Forskellen er ikke stor, men "min" måde er lidt mere venlig overfor, serveren, fordi du fortæller den præcis hvad den skal foretage sig. Og via parametrene i

Rec.Open Com, , 0, 1

- kan du optimere dit recordset så det fx. bliver hurtigere at søge i, eller så du kan skrive til det, hvis data skal ændres.

Det kode du har virker velstruktureret, så 'Keep it up'
Hilsen Lars D
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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