Avatar billede oleodder Nybegynder
09. november 2002 - 11:29 Der er 29 kommentarer og
1 løsning

Hjælp til et script der trækker nogle oplysninger ud fra DB.....

Nogen der kan hjælpe med at lave et udtræk ?

Jeg har en accessdatabase med nogle medlemsoplysninger, disse er FORNAVN, EFTERNAVN, BIRTHDATEDD, BIRTHDATEMM og BIRTHDATEYY. Som altså beskriver navn samt dag, måned og år personen er født.

Jeg kunne godt tænke mig et udtræk som skrev:
DEN NÆSTE DER HAR FØDSELSDAG ER
TRINE OHLSSON, DEN 7 MAJ 2003

Altså med brug af oplysningerne fra databasen. Hvis der er to eller tre der har samme dag, kan vel skrives
DE NÆSTE DER HAR FØDSELSDAG ER
EMMA ARNHOLT, DEN 21 JUNI 2003
OLE OLSEN, DEN 21 JUNI 2003

Eller sådan noget..... Måske mere avanceret !!

Noget der kan hjælpe med lidt script hjælp ??

Mange tak og fortsat god week-end
Avatar billede Slettet bruger
09. november 2002 - 11:43 #1
www.htmt.dk/tutorials/asp , er der lige det du søger en lilel hurtig guide til at lære at trække data ud af en tabel
Avatar billede susannegraumann Nybegynder
09. november 2002 - 11:48 #2
Avatar billede eagleeye Praktikant
09. november 2002 - 15:08 #3
Sådan her kommer koden til at se ud.. Giver lidt kode for eks hvis har føstes dag den 10-12 og det idag er den 15-11 så kan man ikke bare søge efter hvor både BIRTHDATEDD > 15 og BIRTHDATEMM > 11 for så finder den ikke den rigtige fødselsdag... Så der kommer en del SQL sætniger til at finde de(n) næste som har fødselsdag.:

Du skal rette tabel nanet til at passe med dit tabel navn, jeg har brugt: spm281201
Ligeledes skal du rette database connection til at passe med din database.



<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Session.LCID = 1030 'Sæt dansk dato format.
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db5.mdb")

dag = Day(Date)
maanede = Month(Date)

'Prøv føste om en/flere har fødselsdag i denne månede
SQL = "SELECT TOP 1 * FROM spm281201 WHERE birthdatedd >= " & dag & " AND birthdatemm = " & maanede & " ORDER BY birthdatemm ASC, birthdatedd ASC"
set rs = Conn.Execute(SQL)
'Tjek om der var nogle som har fødselsdag i denne månede
if rs.EOF then
  'Det var der ikke.
  'Tjek om der er nogle som har fødselsdag i næste månede og dag >= 1 og ikke dags dato
  SQL = "SELECT TOP 1 * FROM spm281201 WHERE birthdatedd >= 1 AND birthdatemm > " & maanede & " ORDER BY birthdatemm ASC, birthdatedd ASC"
  set rs = Conn.Execute(SQL)
end if
if rs.EOF then
  'Tjek om nogle har fødselsdag til næste år.
  SQL = "SELECT TOP 1 * FROM spm281201 WHERE birthdatedd >= 1 AND birthdatemm >= 1 ORDER BY birthdatemm ASC, birthdatedd ASC"
  set rs = Conn.Execute(SQL)
end if
rs.Close
rs.Open SQL, Conn, 1

Response.Write "<table align=""center"">"
if rs.EOF then
  Response.Write "<tr><td>Inden fødslesdage fundet!!</td></tr>"
elseif rs.RecordCount = 1 then
  Response.Write "<tr><td>Den næste der har fødelsdag er:</td></tr>"
else
  Response.Write "<tr><td>De næste der har fødelsdag er:</td></tr>"
end if
Response.Write "</table><table align=""center"">"
do while not rs.EOF
  Response.Write "<tr>"
  Response.Write "<td>" & rs("fornavn") & " " & rs("efternavn") & ",</td>"
  Response.Write "<td>Den " & rs("birthdatedd") & " " & MonthName(rs("birthdatemm")) & "</td>"
  Response.Write "</tr>"
  rs.MoveNext 
loop
Response.Write "</table>"
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
%>
</BODY>
</HTML>
Avatar billede psyco01 Nybegynder
09. november 2002 - 15:21 #4
Det ville være en del nemmere hvis du samlede fødselsdatoen i et enkelt felt i formatet dd-mm.
Udtræk:
strSQL = "select * from medlemmer WHERE date >= Now order by BIRTHDATE"

Script:
intBDate = 1
While Not RS.EOF
    If strBDate = "" Then
        strBDate = RS("BIRTHDATE")
    Else
        If strBDate = RS("BIRTHDATE") Then intBDays = intBDays + 1
    End If
    RS.MoveNext
Wend
RS.MoveFirst

If intBDays = 1 Then
    Response.Write "Den næste der har fødselsdag er<br>"
Else
    Response.Write "De næste der har fødselsdag er<br>"
End If

For i = 1 to intBDays
    Response.Write RS("FORNAVN") & " " & RS("EFTERNAVN") & ", DEN " & RS("BIRTHDATE") & "<br>"
    RS.MoveNext
Next
Avatar billede psyco01 Nybegynder
09. november 2002 - 15:24 #5
intBDate = 1 i første linie af scriptet skal rettes til intBDays = 1
Avatar billede oleodder Nybegynder
09. november 2002 - 23:13 #6
Det funker ikke !!! Jeg har prøvet og prøvet, men enten står den bare og tænker i 100 år eller også er der fejl, et par gange har fejlen været i linien med:
set rs = Conn.Execute(SQL) !!!!

Herunder er min ASP fil, nogen der kan optimere/finde fejlen ???
Tak...


<% language=VBscript%>

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Session.LCID = 1030 'Sæt dansk dato format.
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("adressekartotek.mdb")

dag = Day(Date)
maanede = Month(Date)

'Prøv føste om en/flere har fødselsdag i denne månede
SQL = "SELECT TOP 1 * FROM personer WHERE birthdatedd >= " & dag & " AND birthdatemm = " & maanede & " ORDER BY birthdatemm ASC, birthdatedd ASC"
set rs = Conn.Execute(SQL)
'Tjek om der var nogle som har fødselsdag i denne månede
if rs.EOF then
  'Det var der ikke.
  'Tjek om der er nogle som har fødselsdag i næste månede og dag >= 1 og ikke dags dato
  SQL = "SELECT TOP 1 * FROM personer WHERE birthdatedd >= 1 AND birthdatemm > " & maanede & " ORDER BY birthdatemm ASC, birthdatedd ASC"
  set rs = Conn.Execute(SQL)
end if
if rs.EOF then
  'Tjek om nogle har fødselsdag til næste år.
  SQL = "SELECT TOP 1 * FROM personer WHERE birthdatedd >= 1 AND birthdatemm >= 1 ORDER BY birthdatemm ASC, birthdatedd ASC"
  set rs = Conn.Execute(SQL)
end if
rs.Close
rs.Open SQL, Conn, 1

Response.Write "<table align=""center"">"
if rs.EOF then
  Response.Write "<tr><td>Inden fødslesdage fundet!!</td></tr>"
elseif rs.RecordCount = 1 then
  Response.Write "<tr><td>Den næste der har fødelsdag er:</td></tr>"
else
  Response.Write "<tr><td>De næste der har fødelsdag er:</td></tr>"
end if
Response.Write "</table><table align=""center"">"
do while not rs.EOF
  Response.Write "<tr>"
  Response.Write "<td>" & rs("fornavn") & " " & rs("efternavn") & ",</td>"
  Response.Write "<td>Den " & rs("birthdatedd") & " " & MonthName(rs("birthdatemm")) & "</td>"
  Response.Write "</tr>"
  rs.MoveNext 
loop
Response.Write "</table>"
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
%>
</BODY>
</HTML>
Avatar billede eagleeye Praktikant
09. november 2002 - 23:19 #7
Din kode virker fint på min maskine....

Kan du ikke skrive hvilken fejl kode/tekst du får?
Avatar billede eagleeye Praktikant
09. november 2002 - 23:52 #8
Prøv evt at ænde:

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("adressekartotek.mdb")

Til:

Conn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("adressekartotek.mdb")


Men jeg tror bare ikke det bliver bedre.
Avatar billede oleodder Nybegynder
10. november 2002 - 17:48 #9
Jeg ændrede, men desværre.....

Det der sker:
Siden er virkelig 100 år om at komme frem og derefter skriver den:
Ingen fødselsdag fundet !!
(Dette på trods af, at databasen er fyldt med personer !!!)
Efter/Under meddelsen kommer fejlmeddelsen:
Active Server Pages error 'ASP 0113'
Script timed out

/testside3.asp

The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.
Avatar billede oleodder Nybegynder
10. november 2002 - 20:46 #10
Har siddet og prøvet nu et stykke tid !!!

Er du sikker på at der ikke er nogle fejl ovenover ????
Avatar billede eagleeye Praktikant
10. november 2002 - 22:36 #11
Jeg har prøvet flere gange og jeg kan ikke få siden til at loade langsomt eller komme med fejl.
Jeg kan ikke se noget som skulle give script timeout, da der kun er et loop på siden og der er MoveNext med. Jeg kan lige prøve at fylde en masse i databasen.
Avatar billede eagleeye Praktikant
10. november 2002 - 22:50 #12
Jeg har prøvet at sætte nogle rs.Close ind i if sætningerne hvis det skulle give et problem:


<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Session.LCID = 1030 'Sæt dansk dato format.
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("adressekartotek.mdb")

dag = Day(Date)
maanede = Month(Date)

'Prøv føste om en/flere har fødselsdag i denne månede
SQL = "SELECT TOP 1 * FROM personer WHERE birthdatedd >= " & dag & " AND birthdatemm = " & maanede & " ORDER BY birthdatemm ASC, birthdatedd ASC"
set rs = Conn.Execute(SQL)
'Tjek om der var nogle som har fødselsdag i denne månede
if rs.EOF then
  'Det var der ikke.
  'Tjek om der er nogle som har fødselsdag i næste månede og dag >= 1 og ikke dags dato
  rs.Close
  SQL = "SELECT TOP 1 * FROM personer WHERE birthdatedd >= 1 AND birthdatemm > " & maanede & " ORDER BY birthdatemm ASC, birthdatedd ASC"
  set rs = Conn.Execute(SQL)
end if
if rs.EOF then
  'Tjek om nogle har fødselsdag til næste år.
  rs.Close
  SQL = "SELECT TOP 1 * FROM personer WHERE birthdatedd >= 1 AND birthdatemm >= 1 ORDER BY birthdatemm ASC, birthdatedd ASC"
  set rs = Conn.Execute(SQL)
end if
rs.Close
rs.Open SQL, Conn, 1

Response.Write "<table align=""center"">"
if rs.EOF then
  Response.Write "<tr><td>Inden fødslesdage fundet!!</td></tr>"
elseif rs.RecordCount = 1 then
  Response.Write "<tr><td>Den næste der har fødelsdag er:</td></tr>"
else
  Response.Write "<tr><td>De næste der har fødelsdag er:</td></tr>"
end if
Response.Write "</table><table align=""center"">"
do while not rs.EOF
  Response.Write "<tr>"
  Response.Write "<td>" & rs("fornavn") & " " & rs("efternavn") & ",</td>"
  Response.Write "<td>Den " & rs("birthdatedd") & " " & MonthName(rs("birthdatemm")) & "</td>"
  Response.Write "</tr>"
  rs.MoveNext 
loop
Response.Write "</table>"
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
%>
</BODY>
</HTML>
Avatar billede oleodder Nybegynder
11. november 2002 - 13:07 #13
Det funker desværre ikke endnu, kan det måske skyldes min database opbyning ??

Feltnavn: birthdatedd Datatype: Tekst - Indhold angives med tal på to cifre
Feltnavn: birthdatemm Datatype: Tekst - Indhold angives med tal på to cifre
Feltnavn: birthdateyy Datatype: Tekst - Indhold angives med tal på fire cifre

Kan det være en årsag til det ikke virker ???

PS: Jeg kan godt se nu, at i mit eksempel angiver jeg månederne som bogstaver (NOV,MAJ...) og det er jo ikke det jeg har i databasen, men pyt med det, det vigtigste er at det virker, så må vi se senere, om man kan lave tallene om til månedsbetegnelser ??

Tak
Avatar billede eagleeye Praktikant
11. november 2002 - 17:15 #14
Ja det kan forklare lidt men så ville jeg forvendte en type fejl og ikke at den står i lang tid og loader siden..


Prøv med denne tilrettede kode:


<% language=VBscript%>

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Session.LCID = 1030 'Sæt dansk dato format.
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db5.mdb")

dag = Day(Date)
maanede = Month(Date)

'Prøv føste om en/flere har fødselsdag i denne månede
SQL = "SELECT TOP 1 * FROM personer WHERE Int(birthdatedd) >= " & dag & " AND Int(birthdatemm) = " & maanede & " ORDER BY Int(birthdatemm) ASC, Int(birthdatedd) ASC"
set rs = Conn.Execute(SQL)
'Tjek om der var nogle som har fødselsdag i denne månede
if rs.EOF then
  'Det var der ikke.
  'Tjek om der er nogle som har fødselsdag i næste månede og dag >= 1 og ikke dags dato
  rs.Close
  SQL = "SELECT TOP 1 * FROM personer WHERE Int(birthdatedd) >= 1 AND Int(birthdatemm) > " & maanede & " ORDER BY Int(birthdatemm) ASC, Int(birthdatedd) ASC"
  set rs = Conn.Execute(SQL)
end if
if rs.EOF then
  'Tjek om nogle har fødselsdag til næste år.
  rs.Close
  SQL = "SELECT TOP 1 * FROM personer WHERE Int(birthdatedd) >= 1 AND Int(birthdatemm) >= 1 ORDER BY Int(birthdatemm) ASC, Int(birthdatedd) ASC"
  set rs = Conn.Execute(SQL)
end if
rs.Close
rs.Open SQL, Conn, 1

Response.Write "<table align=""center"">"
if rs.EOF then
  Response.Write "<tr><td>Inden fødslesdage fundet!!</td></tr>"
elseif rs.RecordCount = 1 then
  Response.Write "<tr><td>Den næste der har fødelsdag er:</td></tr>"
else
  Response.Write "<tr><td>De næste der har fødelsdag er:</td></tr>"
end if
Response.Write "</table><table align=""center"">"
do while not rs.EOF
  Response.Write "<tr>"
  Response.Write "<td>" & rs("fornavn") & " " & rs("efternavn") & ",</td>"
  Response.Write "<td>Den " & rs("birthdatedd") & " " & MonthName(rs("birthdatemm")) & "</td>"
  Response.Write "</tr>"
  rs.MoveNext 
loop
Response.Write "</table>"
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
%>
</BODY>
</HTML>
Avatar billede oleodder Nybegynder
11. november 2002 - 23:55 #15
Det er noget værre noget....Det funker stadig væk overhovedet ikke !!!!!

Jeg tror det er noget med databasen....
Har prøvet at lave en connectionstreng i stedet for, der siger (connection.asp):
( Jeg ved connection stringen virker !!! )

<%
CONST ConnectionString = "Driver={Microsoft Access Driver (*.MDB)}; DBQ=D:\www\..........database.mdb;UID=;PWD=;"
Set conn = Server.Createobject("ADODB.Connection")
conn.Open ConnectionString
%>

Jeg har så indsat
<!--#include file="connection.asp"-->
i starten af scriptet.

Dette erstatter da;
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db5.mdb")

ikke ??

Det virker stadig ikke, på trods af, at min connection string helt sikkert virker......

PS:
Er du sikker på at det ikke spiller nogen rolle, at feltnavn er af datatypen: Tekst  ??
Avatar billede eagleeye Praktikant
12. november 2002 - 18:35 #16
Det spiller en rolle men jeg har sat Int omkring kolonnenavne Int(xxx) så den bliver konvereter til et tal.

Hvis du ikke får nogle SQL fejl eller siden er meget lang tid om at loade ville jeg tror det var en connection problem...

Prøv for test at lave en fil med dette i og se om den er lang tid om at loade.:


<%
CONST ConnectionString = "Driver={Microsoft Access Driver (*.MDB)}; DBQ=D:\www\..........database.mdb;UID=;PWD=;"
Set conn = Server.Createobject("ADODB.Connection")
conn.Open ConnectionString

SQL = "SELECT TOP 10 * FROM personer WHERE Int(birthdatedd) = 11"
Set rs = Conn.Execute(SQL)
do while not rs.EOF
  Response.write rs("fornavn") & "<br>"
  rs.Movenext
loop
Conn.Close
%>
Avatar billede oleodder Nybegynder
12. november 2002 - 22:54 #17
Ingen problemer, dit lille eksempel virkede perfekt.

Jeg prøver lige en gang til at integrere det i ovenstående......

;-)
Avatar billede oleodder Nybegynder
12. november 2002 - 23:03 #18
Arhhhh !!!!
Så får jeg fejlmeddelsen:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/test5.asp, line 21

(Det er den med "set rs = Conn.Execute(SQL)")  !!!

???????
Avatar billede eagleeye Praktikant
12. november 2002 - 23:05 #19
Hvilken SQL = "SELECT ...

er lige foran?
Avatar billede eagleeye Praktikant
12. november 2002 - 23:09 #20
Bruger du koden fra min sidste kommentar ?  (11/11-2002 17:15:31)
Avatar billede oleodder Nybegynder
12. november 2002 - 23:10 #21
Det er den alleførste....

SQL = "SELECT TOP 1 * FROM personer WHERE Int(birthdatedd) >= " & dag & " AND Int(birthdatemm) = " & maanede & " ORDER BY Int(birthdatemm) ASC, Int(birthdatedd) ASC"

set rs = Conn.Execute(SQL)
Avatar billede eagleeye Praktikant
12. november 2002 - 23:11 #22
Hvad står der i en kolonnehvis det er den 9. man har fødselsdag??

står der 09 eller 9 ?
Avatar billede oleodder Nybegynder
12. november 2002 - 23:12 #23
JA - Jeg bruger den fra (11/11-2002 17:15:31)
Avatar billede oleodder Nybegynder
12. november 2002 - 23:14 #24
Der står 01,02,03 etc...
Avatar billede oleodder Nybegynder
12. november 2002 - 23:15 #25
Både i måned og dag kolonnen.....
Avatar billede eagleeye Praktikant
12. november 2002 - 23:17 #26
Det skulle stadig virke med Int.. Prøv evt at rette Int til CInt i SQL sætningen:


SQL = "SELECT TOP 1 * FROM personer WHERE CInt(birthdatedd) >= " & dag & " AND CInt(birthdatemm) = " & maanede & " ORDER BY CInt(birthdatemm) ASC, CInt(birthdatedd) ASC"
Avatar billede eagleeye Praktikant
12. november 2002 - 23:25 #27
Kan kolonnerne være tomme?
Avatar billede oleodder Nybegynder
12. november 2002 - 23:31 #28
UPS !! De burde ikke kunne udfylde uden der blev spurgt på føds.dato - MEN, jeg syntes jeg kan se nogle tomme !!!!!

Jeg vender tilbage.........
Avatar billede oleodder Nybegynder
12. november 2002 - 23:49 #29
Hurra - Det var det......

Jeg skal vist lige have strammet op på medlemsindtastningen !!

Men så skal jeg lige høre - hvilken en af alle de ovenstående forskellige script udgaver, er den optimale ??

Kan være jeg lige kommer på flere spørgsmål omkring udtrækket, men under alle omstændigheder -> Tak for hjælpen.
Avatar billede eagleeye Praktikant
12. november 2002 - 23:56 #30
det må være den sidste.
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