Just nu i M3-nätverket
Gå till innehåll
Siluett

Länk i databas

Rekommendera Poster

jag gör en sökbar databas (ww.newforest.g.se/horses.asp) och behöver lite hjälp med det här.

om man är på B sida så är där en länk till A sida, men om man är på C sida så är där kanske en länk till D sida. kan sidan själv veta om D och A finns i databasen och då länka till dem. om de inte finns så ska ingen länk finnas. går det? hur gör jag om C ligger i en annan tabell?

 

Mvh Pernilla

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Om du gör en kontroll på din sida om A och D finns i databsen så kan ju sidan "veta" om den ska presentera länken eller inte?

 

Om C ligger i en annan tabell får du väl söka i den tabellen?

 

Sen beroende på om du hittar nåt eller itne så får du med en enkel ifsats visa länken, eller ej.

[inlägget ändrat 2003-12-22 16:27:04 av Jenny R]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Håller med övriga ang. svårigheten att riktigt förstå vad du är ute efter...

 

Varför ligger det länkar i olika tabeller? Logiskt sett så borde väl alla länkar ligga samlade. Om dessa länkar har relationer till andra "saker" så kopplar du mellar tabellerna.

 

Grundkod för att kolla om en fråga mot databasen returnerar något är att kolla om recordset är End Of File.

<%
SET myLinks=conn.execute("SELECT linkName, linkURL FROM links")
IF NOT myLinks.EOF THEN
Response.Write("<A HREF="&myLinks("inkURL")&">"&myLinks("linkName")&"</A>")
END IF
%>

 

Sen kan du ju förstås lägga till vilkor i selectsatsen för att välja ut specifika länkar. Koden ovan hämtar ju alla och skriver ut dem.

 

Om du tydliggör ytterligare något så kan du nog få ytterligare vägledning

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ok, jag ska försöka förklara lite enklare :-)

 

Eftersom hästarna i det här fallet har olika fäder, så kan jag väl inte bara skriva:

<td rowspan=4><font size=1><a href="sida.asp?id=x"><%=RecSet("e")%></a></td>

för på till id x och inte till id z? för då länkar det ju till samma häst hos alla...

 

Kan jag få det att länka till sidan x om det står ett namn i den kolumnen? och om inget namn - ingen länk.

 

Pernilla

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

sida a,b och c har nu fått sällskap av x och z...

vet inte om det blev klarare nu ;-)

 

Varför finns det flera olika sidor?

Om du har en sida som visar hästar (hämtar info från db) och vill visa hästens farsa så bör ju du visa samma sida men välja att begränsa de hästar som visas till just farsan.

 

Hur ser dina tabeller ut egentligen?

 

Jag skulle nog vilja ha enbart EN tabell med hästar.

Kolumnerna skulle då tex kunna vara

[id] [namn] [född] [farsa] [merInfo]

I [farsa] ligger ett id som är pekar på [id] hos en annan häst. Då skulle tabellen kunna se ut så här:

ID--NAMN------------FÖDD------FARSA
-4--Victory Tilly---1995--------3
-3--Quick Pay-------1973--------2
-2--Stars Pride-----1947--------1
-1--Worthy Boy------1940--------

 

För att sen visa hästarna kan du ha något sånt här

<table width="400" border="0" cellspacing="0" cellpadding="2">
 <tr>
   <td width="178"><strong>NAMN</strong></td>
   <td width="69"><strong>F&Ouml;DD</strong></td>
   <td width="141"><strong>EFTER</strong></td>
 </tr>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("horses.mdb")
conn.open ConnectString

IF Request("show")="" THEN
sqlStr="SELECT * FROM theHorses"
ELSE
sqlStr="SELECT * FROM theHorses WHERE id="&Request("show")&""
END IF

SET horse=conn.execute(sqlStr)
IF NOT horse.EOF THEN 
DO Until horse.EOF %>
  <tr>
	<td><%=horse("namn")%></td>
	<td><%=horse("född")%></td>
	<td><%
	SET farsan=conn.execute("SELECT namn FROM theHorses WHERE id="&horse("farsa")&"")
	IF NOT farsan.EOF THEN
		Response.Write("<A HREF=?show="&amp;horse("farsa")&amp;">"&farsan("namn")&"</a>")
	ELSE
		Response.Write("Ok&auml;nd")
	END IF%></td>
  </tr>
  <% IF Request("show")<>"" THEN %>
  <tr><td colspan="3"><%=horse("merInfo")%></td></tr>
  <% END IF %>
<%
Horse.MoveNext
Loop
ELSE
Response.Write("Hittade ingen matchande h&auml;st")
END IF
%> 
</table>

 

[inlägget ändrat 2003-12-28 22:07:35 av Cluster]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Oj :-) det var mycket!

ska kolla ordentligt på vad du skrivit, men ta en titt här:

http://www.newforest.g.se/horses.asp och sök på hästen lobsang. söker du sedan på hästen fridolf så har han ju en annan far. jag vill alltså länka till den hästen som står i kolumnen "e" i tabellen... men de har ju olika id... så det är väl lite rätt spår du är inne på iaf :-)

jag har tre tabeller för att jag har tre olika kategorier av hästar.

blev du klokare? :-)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Nu fungerar det!...nästan....

det är bara ngt litet fel på koden tror jag, men den bör visa rätt fader när det rättar till sig.

får felmedd:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

 

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id=Oakley David RNF 13'.

 

/horses.asp, line 188

 

rad 188-189 är just

 

<td rowspan=4><font size=1><%SET e=conn.execute("SELECT namn FROM hingstar WHERE id="&Recset("e")&"")

Response.Write("<A HREF=?show="&Recset("e")&">"&e("namn")&"</A>")%></td>

 

 

och så petar jag väl dit hela min kod också då...

 

<%

soknamn = "SNF Hästdatabas"

link = "horses.asp"

db = Server.MapPath("db/horses.mdb")

Tabell = "hingstar"

falt1 = "Id"

namn = "namn"

 

%>

 

<html>

<head>

<title>Svenska New Forest Föreningen - Hästdatabas</title>

<link rel="stylesheet" href="style.css" type="text/css">

 

<SCRIPT LANGUAGE="Javascript"><!--

// ***********************************************

// AUTHOR: WWW.CGISCRIPT.NET, LLC

// URL: http://www.cgiscript.net

// Use the script, just leave this message intact.

// Download your FREE CGI/Perl Scripts today!

// ( http://www.cgiscript.net/scripts.htm )

// ***********************************************

var isNS = (navigator.appName == "Netscape") ? 1 : 0;

var EnableRightClick = 0;

if(isNS)

document.captureEvents(Event.MOUSEDOWN||Event.MOUSEUP);

function mischandler(){

if(EnableRightClick==1){ return true; }

else {return false; }

}

function mousehandler(e){

if(EnableRightClick==1){ return true; }

var myevent = (isNS) ? e : event;

var eventbutton = (isNS) ? myevent.which : myevent.button;

if((eventbutton==2)||(eventbutton==3)) return false;

}

function keyhandler(e) {

var myevent = (isNS) ? e : window.event;

if (myevent.keyCode==96)

EnableRightClick = 1;

return;

}

document.oncontextmenu = mischandler;

document.onkeypress = keyhandler;

document.onmousedown = mousehandler;

document.onmouseup = mousehandler;

//-->

</script>

 

</head>

 

<body maginleft="10">

 

<TABLE><TR><TD COLSPAN="2">

<font face="Verdana" size="2">

<!-- #Include File="top.asp" -->

</font>

</TD></TR><TR><TD VALIGN="TOP" WIDTH="20%">

 

<font face="Verdana" size="2">

 

<!-- #Include File="meny.inc" -->

 

</font>

 

</TD><td width="600" colspan="5" valign="top">

 

<font face="Verdana" size="2">

 

<%If Request.QueryString("do") = "" Then%>

<table cellspacing="0" cellpadding="0" width="250" border="0">

<tr>

<td><%=soknamn%></td>

</tr>

<tr>

<td></td>

</tr>

<tr>

<form name="sok" method="post" action="<%=link%>?do=sok">

<td><input type="text" name="sokord" size="22" maxlength="20">&nbsp;

<select name="falt">

<option value="namn" name="falt">Namn

<option value="rnf" name="falt">Stamboksnummer

<option value="fodd" name="falt">Född

<option value="farg" name="falt">Färg

</select>

&nbsp;<input type="submit" name="Submit" value="Sök"></td>

</form>

</tr>

</table>

<%End If

 

If Request.QueryString("do") = "sok" Then%>

 

<table cellspacing="0" cellpadding="0" width="250" border="0">

<tr>

<td><%=soknamn%></td>

</tr>

<tr>

<td></td>

</tr>

<tr>

<form name="sok" method="post" action="<%=link%>?do=sok">

<td><input type="text" name="sokord" size="22" maxlength="20">&nbsp;

<select name="falt">

<option value="namn" name="falt">Namn

<option value="rnf" name="falt">Stamboksnummer

<option value="fodd" name="falt">Född

<option value="farg" name="falt">Färg

</select>

&nbsp;<input type="submit" name="Submit" value="Sök"></td>

</form>

</tr>

<tr>

<td></td>

</tr>

<tr>

<td><b>Sökresultat</b></td>

</tr>

<tr>

<td></td>

</tr>

<%Falt = Trim(Request.Form("falt"))

 

If Len(Request.Form("sokord")) > 0 then

 

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

Set RecSet = Server.CreateObject("ADODB.Recordset")

Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & db

 

SQL = "Select * FROM " & Tabell & " WHERE " & Falt & " Like '%" & Request.Form("sokord") & "%' ORDER BY " & falt1 & " Desc"

RecSet.Open SQL, Conn

 

If RecSet.EOF Then

Response.write "<tr><td class=normal>Sökordet <b>" & Request.Form("sokord") & "</b> gav inga fräffar!</td></tr><tr><td></td></tr>"

Else

Do Until RecSet.EOF

Response.Write "<tr height=15><td class=normal><b>»</b> <a href=" & link & "?do=visa&id=" & RecSet(falt1) & ">" & Left(RecSet(namn),30) & "</a></td></tr>"

Response.Write "<tr><td></td></tr>"

RecSet.MoveNext

Loop

 

RecSet.Close

Set RecSet = Nothing

End If

Else

Response.write "<tr><td class=normal>Du glömde skriva ett sökord!</td></tr><tr><td></td></tr>"

End If%>

</table>

 

<%End If

 

If Request.QueryString("do") = "visa" Then

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

Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & db

 

Set RecSet = Conn.Execute("Select * From " & Tabell & " Where id=" & Request.QueryString("id"))

 

%>

 

<table cellspacing="0" cellpadding="0" width="100%">

<tr>

<td><b><%Response.Write RecSet("namn") & " " & RecSet("rnf")%></b><p></td>

</tr>

<tr>

<td>

 

</td>

</tr>

<tr>

<td>Född: <%=RecSet("fodd")%><br>

Mankhöjd: <%=RecSet("mkh")%><br>

Reg. nr: <%=RecSet("reg nr")%><br>

Färg: <%=RecSet("farg")%><br>

Uppfödare: <%=RecSet("uppf")%><br>

Ägare: <%=RecSet("ag")%><p>

</td>

</tr>

<tr>

<td class="normal">Premierad <%=RecSet("prem")%>. I avel <%=RecSet("iavel")%>-<p>

<%=RecSet("utlatande")%> <p>

<%=RecSet("extindex")%><p>

</td>

</tr><tr><td>

 

<table border=0 font color="#000000"><tr>

<td rowspan=4><font size=1><%SET e=conn.execute("SELECT namn FROM hingstar WHERE id="&Recset("e")&"")

Response.Write("<A HREF=?show="&Recset("e")&">"&e("namn")&"</A>")%></td>

<td rowspan=2><font size=1><%=RecSet("ee")%></td>

<td><font size=1><%=RecSet("eee")%></td>

<tr><td><font size=1><%=RecSet("eeu")%></td>

<tr><td rowspan=2><font size=1><%=RecSet("eu")%></td>

<td><font size=1><%=RecSet("eue")%></td>

<tr><td><font size=1><%=RecSet("euu")%></td></tr>

<tr><td rowspan=4><font size=1><%=RecSet("u")%></td>

<td rowspan=2><font size=1><%=RecSet("ue")%></td>

<td><font size=1><%=RecSet("uee")%></td>

<tr><td><font size=1><%=RecSet("ueu")%></td>

<tr><td rowspan=2><font size=1><%=RecSet("uu")%></td>

<td><font size=1><%=RecSet("uue")%></td>

<tr><td><font size=1><%=RecSet("uuu")%></td></tr></table>

 

<p>

</td></tr><tr><td>

Avkommor: <%=RecSet("avk")%>

<p>

Resultat: <%=RecSet("resultat")%>

<p>

<a href="horses.asp">Ny sökning</a>

</table>

<%End If%>

 

 

</body>

 

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tja, det beror väl på att Recset("e") INTE är ett ID-nummer utan ett NAMN (Oakley David RNF 13).

Om det är Oakley David RNF 13 som är fadern så bör du använda hans ID-numnmer istället för namn i tabellen.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jo, fast det är ju just det som är problemet, olika fäder - olika id...

såhär?

<%SET e=conn.execute("SELECT id FROM hingstar WHERE id='"&Recset("e")&"'")

Response.Write("<A HREF=?show="&Recset("e")&">"&e("id")&"</A>")%>

 

vad jag vill att den ska göra är alltså att kolla om fader som står i kolumnen "e" har ett id (=finns i tabellen) och då länka dit.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Och det är det som jag försökt förklara. Alltså du bör endast ha faderns ID i kolumnen e och inte namnet.

 

Om du nu inte orkar ändra på detta så får du antingen

1) använda namnet som identifierare när du söker en häst.

Alltså typ "SELECT * FROM horses WHERE namn='"&Request("show")&"'"

2) Hämta faderns ID och sedan använda detta i länken. Typ:

<% SET farsa=conn.execute("SELECT id FROM hingstar WHERE namn='"&Recset("e")&"'")
Response.Write("<A HREF=?show="&farsa("id")&">"&Recset("e")&"</A>") %>

Men som sagt jag skulle nog åtminstonde för framtida lösningar tänka över databasstrukturen. Alla hästar i en och samma tabell med en kolumn som talar om vilken typ av häst det är; hingst, sto, valack etc.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja! Det är exakt ditt ex 2 som jag vill använda ju! :-) tack!

men varför fungerar det nu inte...

"Exception occurred.

 

/horses.asp, line 189 "

 

<%SET e=conn.execute("SELECT id FROM hingstar WHERE namn='"&Recset("e")&"'")

Response.Write("<A HREF=?visa="&e("id")&">"&Recset("e")&"</A>")%>

 

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Är du säker på att det FINNS en e("id") för alla hästar?

Du kanske ska ha en snygg kontroll innan:

if not e.eof then
Response.Write("<A HREF=?visa="&e("id")&">"&Recset("e")&"</A>")
else
Response.Write ("&nbsp;")
end if

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...