Oprettet tor. d. 08. januar 2009 kl. 23:05:31

fun22
fun22 (13.509 point. Point ude: 195)

Hvordan gribes det an??

Hej E

Jeg skal have lavet en Stamtavle over nogen dyr...

Men jeg kan ikke lige greje hvordan jeg skal starte..

Jeg skal have dyrene med navne forældre brødre osv. til at ligge i en mssql database..

Men hvordan skal jeg gemme dem så de står i den rigtige orden når jeg henter dem ud??

Skal vel have noget parentID osv. men jeg kan simpelt hen ikke få hul på bylden til hvordan det gøres nemmest?

Nogen goderåd??

Skrevet tor. d. 08. januar 2009 kl. 23:15:20| #1

softspot
softspot (101.915 point)
www.softspot.dk
Nu ved jeg ikke så meget om dyreavl og stamtavler for sådanne, men din egen idé lyder da nærliggende. Hvilken orden er det du vil have dem ud i? Skal søskende komme i en bestemt rækkefølge og hvordan holder man styr på dem i det virkelige liv...?

Et bud på en datamodel for stamtavle kunne være (feltnavnene skal naturligvis gøre mere teknisk kompatible :-)):

dyr =
  id
+ parentid
+ navn
+ født dato
+ whatever!!

Så kan du i det mindste trække dem ud efter datoorden og få søskende listet i kronologisk orden.

Hvis du så også skal vide hvem der er parret med hvem, skal du nok bruge en tabel mere som danner relation mellem dyr.

avl =
  id
+ handyrid
+ hundyrid
+ dato

hvor handyrid og hundyrid peger på de respektive dyr som er avlet. Jeg mener denne relationstabel er nødvendig, da hvert dyr velsagtens kan parres med flere andre dyr...

Skrevet tor. d. 08. januar 2009 kl. 23:20:33| #2

softspot
softspot (101.915 point)
www.softspot.dk
I virkeligheden burde der vel være to parentid (morid og farid) i dyr-tabellen, da man vel gerne vil kende begge forældrene for et givet dyr... i så fald kunne man måske helt undlade avl-tabellen, da afkommet så afspejler, hvem der er avlet for at komme til dette dyr...? Altså bare én tabel:

dyr =
  id
+ handyrid
+ hundyrid
+ navn
+ født dato
+ whatever!!

Skrevet tor. d. 08. januar 2009 kl. 23:44:48| #3

fun22
fun22 (13.509 point)
Den sidste kommentar havde jeg også tænkt, men hvordan finder jeg så søskende til denne??

Skrevet fre. d. 09. januar 2009 kl. 01:04:43| #4

arne_v
arne_v (1.016.169 point)
søskende er dem med samme far og mor (halvsøskende hvis kun en af dem er den samme)

SELECT d2.*
FROM dyr d1,dyr d2
WHERE d1.id=X AND d1.handyrid=d2.handyrid AND d1.hundyrid=d2.hundyrid

finder søskende til X.

Hvis det er muligt så bør du overveje at lave meget af logikken i applikationen
fremfor i SQL. OOP er langt bedre end SQL til træstrukturer.

Skrevet fre. d. 09. januar 2009 kl. 21:02:44| #5

fun22
fun22 (13.509 point)
Jeg har fundet følgende som sådan set virker..
Jeg skal så bare have det til at ligne en stamtavle og ikke et treeview.. Hvordan gøres det?

Imports System.Data.SqlClient
Imports System.IO
Imports System.Data

Partial Class _Default
    Inherits System.Web.UI.Page

    Dim constr As String = System.Configuration.ConfigurationManager.ConnectionStrings("CON").ToString()

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        PopulateTree()
    End Sub

    Public Sub PopulateTree()
        Dim con As New SqlConnection(constr)

        Dim cmd As New SqlCommand()

        cmd.CommandText = "Select * from Tree"

        cmd.Connection = con

        Dim dtMenu As New DataTable()

        Dim da As New SqlDataAdapter(cmd)

        da.Fill(dtMenu)

        Dim dv As New DataView(dtMenu)

        dv.RowFilter = "ParentID=0"

        Dim i As Integer

        TreeView_Control.Nodes.Clear()



        For i = 0 To dv.Count - 1

            Dim node As New TreeNode()

            node.Value = dv(i)("ID").ToString()

            node.Text = dv(i)("Name").ToString()

            TreeView_Control.Nodes.Add(node)

            RecFillTree(dtMenu, node)
        Next
    End Sub


    Public Sub RecFillTree(ByVal dtMenu As DataTable, ByVal ParentNode As TreeNode)

        Dim dv As New DataView(dtMenu)

        dv.RowFilter = "ParentID =" & ParentNode.Value

        Dim i As Integer

        If (dv.Count > 0) Then
            For i = 0 To dv.Count - 1

                Dim node As New TreeNode()

                node.Value = dv(i)("ID").ToString()

                node.Text = dv(i)("Name").ToString()

                ParentNode.ChildNodes.Add(node)

                RecFillTree(dtMenu, node)
            Next

        End If
    End Sub

    Protected Sub TreeView_Control_SelectedNodeChanged1(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView_Control.SelectedNodeChanged
        LblTreeNode_Text.Text = TreeView_Control.SelectedNode.Text

        LblTreeNode_Value.Text = TreeView_Control.SelectedNode.Value
    End Sub
End Class

Skrevet fre. d. 25. september 2009 kl. 19:24:52| #6


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

GridView og RowCommand

Oprettet den 22. maj 2012 kl. 17.34
faran giver 30 point for svar | Giv et svar »

Flere betingelser i repeater.

Oprettet den 15. maj 2012 kl. 21.45
fuldstop giver 60 point for svar | Giv et svar »

kombinere code behind og Javascript

Oprettet den 6. maj 2012 kl. 09.02
tjacob giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger