Avatar billede aero Nybegynder
17. december 2005 - 16:17 Der er 14 kommentarer og
1 løsning

x antal recorder som skal gemmes

Hej jeg har en kode som henter nogle oplysninger fra en resultat liste fra DBU (Har fået lov at hente dem).

http://www.billundfodbold.dk/site/default.asp

Koden finder selv ud af hvor mange hold der er på en side/link og laver så en liste ud fra det.  Det jeg godt kunne tænke mig er at når det har gjordt det så skal den kunne tage alle de hold der er på listen og sætte dem ind i en database:

ID HOLD    PULJE
1  Senior  1254
2  Junior  2548
osv osv..

Mit problem er bare hvordan jeg kan lave noget som kan finde ud af hvor mange hold der er på en side og så tage dem og sætte dem ind i en database..

kan nogle hjælpe !?

Min kode som henter holdene og laver en liste er:
<-----KODE----->
<%
  Dim strResult
 
  Set HttpObj = Server.CreateObject("AspHTTP.Conn")
  HttpObj.Url = trim("  http://www.dbu.dk/sr/clubTeam.aspx?clubid=761&year=2005  ")
  HttpObj.FollowRedirects = True
  HttpObj.RequestMethod = "GET"
  HttpObj.UserAgent = "Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)"
  strResult = HttpObj.GetURL

  Dim Read, ReadEnd, Team, Pulje
  response.write "<table border=""1"">"
' spring til første tabel
    Read=instr(1,strResult,"CLUBTEAMS START")
    Read=instr(Read,strResult,"</table")

' Loop for TeamX og PuljeX *******************
' læs linjer og skriv data
    while Read > 0
      Team="&nbsp;"
      Pulje="&nbsp;"
' vi søgernavn på teamX
      Read = instr(Read,strResult,"linkSR") + 8
      ReadEnd = instr(Read,strResult,"<")
      Team = mid(strResult,Read,ReadEnd-Read)
' søger puljeX
      Read = instr(Read,strResult,"<td")
      Read = instr(Read,strResult,">")
      if mid(strResult,Read+1,3)="<a " then
          Read = instr(Read,strResult,"linkSR") + 8
            ReadEnd = instr(Read,strResult,"<")
            Pulje = mid(strResult,Read,ReadEnd-Read)
      end if
      Response.Write "<tr><td>" & Team & "</td><td>" & Pulje & "</td></tr>"
' er der flere team
      Read = instr(Read,strResult,"<table")
    wend
  Set HttpObj = nothing
  response.write "</table>"
%>
Avatar billede nielle Nybegynder
17. december 2005 - 19:38 #1
Hvorfor ikke bare indsætte dem efterhånden som du finder dem?

<-----KODE----->
<%
Dim strResult
 
Set HttpObj = Server.CreateObject("AspHTTP.Conn")
HttpObj.Url = trim("  http://www.dbu.dk/sr/clubTeam.aspx?clubid=761&year=2005  ")
HttpObj.FollowRedirects = True
HttpObj.RequestMethod = "GET"
HttpObj.UserAgent = "Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)"
strResult = HttpObj.GetURL

Dim Read, ReadEnd, Team, Pulje
Response.Write "<table border=""1"">"

' spring til første tabel
Read = InStr(1, strResult, "CLUBTEAMS START")
Read = InStr(Read, strResult, "</table")

' Loop for TeamX og PuljeX *******************
' læs linjer og skriv data
While Read > 0
    Team = "&nbsp;"
    Pulje = "&nbsp;"

    ' vi søgernavn på teamX
    Read = InStr(Read, strResult, "linkSR") + 8
    ReadEnd = InStr(Read, strResult, "<")
    Team = Mid(strResult, Read, ReadEnd-Read)

    ' søger puljeX
    Read = InStr(Read, strResult, "<td")
    Read = InStr(Read, strResult, ">")
    If Mid(strResult, Read+1, 3) = "<a " Then
        Read = InStr(Read, strResult, "linkSR") + 8
        ReadEnd = InStr(Read, strResult, "<")
        Pulje = Mid(strResult, Read, ReadEnd-Read)
    End If

    ' udskrivning
    Response.Write "<tr><td>" & Team & "</td><td>" & Pulje & "</td></tr>"

    ' indsættelse i database
    sql = "INSERT INTO dinTabel (hold, pulje) VALUES ('" & Hold & "', '" & Pulje & "')"
    conn.Execute(sql)

    ' er der flere team
    Read = InStr(Read, strResult, "<table")
WEnd

Set HttpObj = Nothing
Response.Write "</table>"
%>
Avatar billede nielle Nybegynder
17. december 2005 - 19:40 #2
...

sql = "INSERT INTO dinTabel (hold, pulje) VALUES ('" & Team & "', '" & Pulje & "')"
Avatar billede aero Nybegynder
17. december 2005 - 22:10 #3
ingen dum idée sidste ting kan du gøre sådan at hvia et hold findes så erstatter den KUN pulje med ny pulje nr. og hvis det findes så gør den intet men springer videre til næste record.

sådan så et hold kun kan være i databsen en gang men at koden så vil kigge på om puljen er den samme som den der står i databasen hvis holdet findes og hvis det er det samme så går den videre til næste hold og gemmer det hvis det ikke findes og ellers updaterer den og går videre osv osv.
Avatar billede nielle Nybegynder
17. december 2005 - 22:20 #4
Ja, det kunne se nogenlunde sådan her ud...


Erstat disse to linjer:

' indsættelse i database
sql = "INSERT INTO dinTabel (hold, pulje) VALUES ('" & Team & "', '" & Pulje & "')"
conn.Execute(sql)

- med noget i denne stil:

' update eller indsættelse i database
sql = "SELECT count(*) AS antal FROM dinTabel WHERE hold = '" & Team & "'"
Set rs = conn.Execute(sql)

If rs("antal") = 0 Then
    sql = "INSERT INTO dinTabel (hold, pulje) VALUES ('" & Team & "', '" & Pulje & "')"
Else
    sql = "UPDATE dinTabel SET pulje = '" & Pulje & "' WHERE hold = '" & Team & "'"
End If
conn.Execute(sql)
Avatar billede aero Nybegynder
17. december 2005 - 22:53 #5
Hej nielle

Jeg har kigget på det og den vil ikke lave en liste som
http://www.billundfodbold.dk/site/default.asp

men henter kun 2 frem og gemmer kun den ene i min database og det er den med kvinderne
http://www.billundfodbold.dk/site/index_db.asp

Håber du lige han hjælpe med at få det løst..

+ så skriver den 1 fejl jeg har indlagt i min dsn.asp fil hvis database laver fejl..

Min kode er:
index_db.asp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body>
<!--#include file="dsn.asp"-->
<%
Dim strResult
 
Set HttpObj = Server.CreateObject("AspHTTP.Conn")
HttpObj.Url = trim("  http://www.dbu.dk/sr/clubTeam.aspx?clubid=761&year=2005  ")
HttpObj.FollowRedirects = True
HttpObj.RequestMethod = "GET"
HttpObj.UserAgent = "Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)"
strResult = HttpObj.GetURL

Dim Read, ReadEnd, Team, Pulje
Response.Write "<table border=""1"">"

' spring til første tabel
Read = InStr(1, strResult, "CLUBTEAMS START")
Read = InStr(Read, strResult, "</table")

' Loop for TeamX og PuljeX *******************
' læs linjer og skriv data
While Read > 0
    Team = "&nbsp;"
    Pulje = "&nbsp;"

    ' vi søgernavn på teamX
    Read = InStr(Read, strResult, "linkSR") + 8
    ReadEnd = InStr(Read, strResult, "<")
    Team = Mid(strResult, Read, ReadEnd-Read)

    ' søger puljeX
    Read = InStr(Read, strResult, "<td")
    Read = InStr(Read, strResult, ">")
    If Mid(strResult, Read+1, 3) = "<a " Then
        Read = InStr(Read, strResult, "linkSR") + 8
        ReadEnd = InStr(Read, strResult, "<")
        Pulje = Mid(strResult, Read, ReadEnd-Read)
    End If

    ' udskrivning
    Response.Write "<tr><td>" & Team & "</td><td>" & Pulje & "</td></tr>"

    ' indsættelse i database
    Call OpenDB
    strSQL = "SELECT count(*) AS antal FROM tabel WHERE hold = '" & Team & "'"
    Set objRS = objConn.Execute(strSQL)

    If objRS("antal") = 0 Then
    strSQL = "INSERT INTO tabel (hold, pulje) VALUES ('" & Team & "', '" & Pulje & "')"
    Else
    strSQL = "UPDATE tabel SET pulje = '" & Pulje & "' WHERE hold = '" & Team & "'"
    End If
    objConn.Execute(strSQL)
    Call CloseDB

    ' er der flere team
    Read = InStr(Read, strResult, "<table")
WEnd

Set HttpObj = Nothing
Response.Write "</table>"
%>
</body>
</html>
*****************************************************************
Min kode er:
dsn.asp

<%
'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

Dim objConn

Set objConn = Server.CreateObject("ADODB.Connection")

Sub OpenDB
  On Error Resume Next
  Dim cnstDBPath
  cnstDBPath = ("d:\web\localuser\billundfodbold.dk\database\testerdb.mdb")
  Dim strProvider
  Dim kontaktOk

  strProvider = "" & "Provider=Microsoft.Jet.OLEDB.4.0;"
  strProvider = strProvider & "Data Source=" & cnstDBPath & ";"
  strProvider = strProvider & "Persist Security Info=False"
  objConn.Connectionstring = strProvider
  kontaktOk = true
 
  set fso = Server.CreateObject("Scripting.FileSystemObject")
  if (fso.FileExists(cnstDBPath))=true Then
    objConn.Open
    if int(objConn.State) = 0 then kontaktOk = false
  else
    kontaktOk = false
    Response.Write "Database filen kunne ikke findes!<br>"
    Response.End()
  end if
  if kontaktOk = false then
    Response.Write "Fejl kunne ikke få kontakt til databasen, prøv at reloade siden."
    Response.End()
  end if
'  On Error goto 0
End Sub

Sub CloseDB
  objConn.Close
  Set objConn = Nothing
End Sub
%>
Avatar billede nielle Nybegynder
18. december 2005 - 08:49 #6
Prøv at lade være med at åbne og lukke til databasem for hver SQL-sætning. Det belaster databasen rimeligt meget. Start dit script med at åbne, og afslut det med at lukke.
Avatar billede aero Nybegynder
18. december 2005 - 10:38 #7
Hej Nielle

Det hjælpe lidt http://www.billundfodbold.dk/site/index_db.asp nu kommer der 10 hold men der mangler stadigvæk en del og den kommer med en fejl om:

Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'hold = 'DBU's LP-Herrer, DONG CUP''.
/site/index_db.asp, line 52


den gemmer nu ikke kun 1 i min database men hele 9 hold, den gemmer dog ikke det hold hvos den laver fejl samt de hold som den ikke er kommet videre til.

fejl linje 52 = Set objRS = objConn.Execute(strSQL)

Håber du har tid til lige at se på det sidste her så det virker. og forresten go' 4. advent søndag ^^

min kode er dette pt:
<-----KODE----->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body>
<!--#include file="dsn.asp"-->
<%
Call OpenDB
Dim strResult
 
Set HttpObj = Server.CreateObject("AspHTTP.Conn")
HttpObj.Url = trim("  http://www.dbu.dk/sr/clubTeam.aspx?clubid=761&year=2005  ")
HttpObj.FollowRedirects = True
HttpObj.RequestMethod = "GET"
HttpObj.UserAgent = "Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)"
strResult = HttpObj.GetURL

Dim Read, ReadEnd, Team, Pulje
Response.Write "<table border=""1"">"

' spring til første tabel
Read = InStr(1, strResult, "CLUBTEAMS START")
Read = InStr(Read, strResult, "</table")

' Loop for TeamX og PuljeX *******************
' læs linjer og skriv data
While Read > 0
    Team = "&nbsp;"
    Pulje = "&nbsp;"

    ' vi søgernavn på teamX
    Read = InStr(Read, strResult, "linkSR") + 8
    ReadEnd = InStr(Read, strResult, "<")
    Team = Mid(strResult, Read, ReadEnd-Read)

    ' søger puljeX
    Read = InStr(Read, strResult, "<td")
    Read = InStr(Read, strResult, ">")
    If Mid(strResult, Read+1, 3) = "<a " Then
        Read = InStr(Read, strResult, "linkSR") + 8
        ReadEnd = InStr(Read, strResult, "<")
        Pulje = Mid(strResult, Read, ReadEnd-Read)
    End If

    ' udskrivning
    Response.Write "<tr><td>" & Team & "</td><td>" & Pulje & "</td></tr>"

    ' indsættelse i database
    strSQL = "SELECT count(*) AS antal FROM tabel WHERE hold = '" & Team & "'"
    Set objRS = objConn.Execute(strSQL)

    If objRS("antal") = 0 Then
    strSQL = "INSERT INTO tabel (hold, pulje) VALUES ('" & Team & "', '" & Pulje & "')"
    Else
    strSQL = "UPDATE tabel SET pulje = '" & Pulje & "' WHERE hold = '" & Team & "'"
    End If
    objConn.Execute(strSQL)
   
    ' er der flere team
    Read = InStr(Read, strResult, "<table")
WEnd

Set HttpObj = Nothing
Response.Write "</table>"
Call CloseDB
%>
</body>
</html>
Avatar billede nielle Nybegynder
18. december 2005 - 11:14 #8
Det skyldes sikkert det der '-tegn midt i:

DBU's LP-Herrer, DONG CUP

Da en tekst i SQL skal omgives med '-tegn, giver det problemer hvis der også er '-tegn inde midt i teksten. Løsningen er at "escape" den:

DBU\'s LP-Herrer, DONG CUP

Dette kan gøres med en Replace:

' indsættelse i database
Team = Replace(Team, "'", "\'")

strSQL = "SELECT count(*) AS antal FROM tabel WHERE hold = '" & Team & "'"
Set objRS = objConn.Execute(strSQL)

If objRS("antal") = 0 Then
    strSQL = "INSERT INTO tabel (hold, pulje) VALUES ('" & Team & "', '" & Pulje & "')"
Else
    strSQL = "UPDATE tabel SET pulje = '" & Pulje & "' WHERE hold = '" & Team & "'"
End If
objConn.Execute(strSQL)

Jeg har kun gjort det for Team. Egentlig burde man også gøre det for Pulje, men siden at der ikke optræder '-tegn der, er det lidt overflødigt.
Avatar billede aero Nybegynder
18. december 2005 - 11:23 #9
samme fejl kom men du havde jo lige forklaret fejlen det kunne være så rettede:
Team = Replace(Team, "'", "\'")
til
Team = Replace(Team, "'", "\")

og så virkede det....1000 mange gange tak vil du være venlig at smide et svar !?
Avatar billede nielle Nybegynder
18. december 2005 - 11:33 #10
Nej, det skal ikke ændres til:

Team = Replace(Team, "'", "\")

Det er nemlig forkert - prøv selv at se efter hvad der ligger i databasen! Men det kan være at denne version virker bedre for dit tilfælde:

Team = Replace(Team, "'", "''")
Avatar billede nielle Nybegynder
18. december 2005 - 11:33 #11
Altså at erstatte et enkelt '-tegn med 2 på hinanden følgende '-tegn.

... og et savr :^)
Avatar billede aero Nybegynder
18. december 2005 - 11:44 #12
ja det sidste du lavede virker også...

et lille spm hvis du vil svare..

hvis jeg nu skal søge efter et link så er det href jeg søger efter men et link slutter jo med " bør jeg søge efter det eller skal jeg søge efter style som er efter href og så sige - TAL som der er hen til linket før " !?

eks.
<a href="hsjdhfkh.asp?hdfghsdf" Style="noget">noget</a>

vi snakker ang asphttp.
Avatar billede nielle Nybegynder
18. december 2005 - 11:49 #13
Jeg er ikke sikker på at jeg har forstået problemet? Siden at url'et (i dette tilfælde) afsluttes med et "-tegn så er det vel det du skal søge efter.
Avatar billede aero Nybegynder
18. december 2005 - 11:58 #14
ja men er det:

Read = InStr(Read, strResult, """) hvilket jeg har prøvet uden held
eller
Read = InStr(Read, strResult, "'"'")
Avatar billede nielle Nybegynder
18. december 2005 - 14:18 #15
Hverken eller...

Det er:

Read = InStr(Read, strResult, """")
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