Avatar billede fun22 Nybegynder
08. januar 2009 - 23:05 Der er 5 kommentarer og
1 løsning

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??
Avatar billede softspot Forsker
08. januar 2009 - 23:15 #1
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...
Avatar billede softspot Forsker
08. januar 2009 - 23:20 #2
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!!
Avatar billede fun22 Nybegynder
08. januar 2009 - 23:44 #3
Den sidste kommentar havde jeg også tænkt, men hvordan finder jeg så søskende til denne??
Avatar billede arne_v Ekspert
09. januar 2009 - 01:04 #4
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.
Avatar billede fun22 Nybegynder
09. januar 2009 - 21:02 #5
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
Avatar billede fun22 Nybegynder
25. september 2009 - 19:24 #6
lukker
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



IT-JOB

De Nationale Geologiske Undersøgelser for Danmark og Grønland (GEUS)

IT-systemadministrator søges til GEUS

Netcompany A/S

Network Engineer