Announcement

Collapse
No announcement yet.

Welche Spaltennamen zu anderen Tabellen Realtionen haben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Welche Spaltennamen zu anderen Tabellen Realtionen haben

    Hallo, ich möchte aus einer Tabelle rausfinden, welche Spaltennamen zu anderen Tabellen Realtionen haben und welche Tabellen es sind.
    Ich weiß, dass in der Tabelle MSysRelationships die Relationen stehen. Auf diese MSysRelationships habe ich aber keine Zugriffe, hat jemand einen Lösungsvorschlag mit dem Ansatz MSysRelationships oder auch einen anderen?
    Ich programmiere eine Webanwendung mit VB.net
    Danke

  • #2
    Hallo,

    >...Tabelle MSysRelationships die Relationen stehen.

    der direkte Zugriff auf die System-Tabellen ist generell keine gute Idee, da sich jeder Datenbank-Hersteller vorbehält, diese von Zeit zu Zeit (ServicePack oder neues Release) zu ändern. Statt dessen sieht Microsoft "offizielle" Systemprozeduren wie zum Beispiel <b>sp_fkeys</b> vor, um diese Informationen abzurufen.

    Völlig ohne Abfragen der Datenbank kommt man aus, wenn ein typisiertes DataSet verwendet wird und die verschiedenen SqlDataAdapter den Tabelleninhalt in das gleiche typisierte DataSet entladen. In diesem Fall kann man die Tabellenbeziehungen auch direkt aus dem DataSet auslesen:
    <pre>
    Dim aDT As DataTable
    Dim aNodeParent, aNodeContraint As TreeNode
    TreeView1.Nodes.Clear()
    For Each aDT In DataSet11.Tables
    aNodeParent = TreeView1.Nodes.Add(aDT.TableName)
    aNodeParent.Nodes.Add("Constraints.Count " _
    + aDT.Constraints.Count.ToString())
    aNodeParent.Nodes.Add("ParentRelations.Count " _
    + aDT.ParentRelations.Count.ToString())
    aNodeParent.Nodes.Add("ChildRelations.Count " _
    + aDT.ChildRelations.Count.ToString())
    aNodeContraint = aNodeParent.Nodes.Add("Constraints")
    Dim aCstrn As Constraint
    For Each aCstrn In aDT.Constraints
    aNodeContraint.Nodes.Add(aCstrn.ConstraintName)
    aNodeContraint.Nodes.Add(aCstrn.GetType().ToString )
    Next aCstrn
    Next aDT
    </pre>
    &#10

    Comment


    • #3
      Hallo Andreas,
      Das DataSet11 muss ich erstmal mit der Tabelle füllen,oder so in etwa:
      Beziehe mich auf die Nordwinddatenbank
      <PRE>
      Dim selStr As String = "SELECT * FROM Bestelldetails"

      conStr = "Provider=Microsoft.JET.OLEDB.4.0;Data Source= Datenbakname.mdb"
      conn = New OleDbConnection(conStr)
      DataSet11 = New DataSet

      Dim da As New OleDbDataAdapter(selStr, conn)
      conn.Open()

      da.Fill(DataSet11 , "Nordwind_data")
      conn.Close()
      </PRE>
      muss ich hier unter aDT.TableName--> aDT.Bestelldetails einsetzen oder sollte das so bleiben
      <PRE>
      TreeView1.Nodes.Add(aDT.TableName)
      </PRE>

      Wie kann ich die Information in eine String Variable speichern:Zu welche Spalte gibt es Relationen und wie heißt die Spalte?
      Ich denke die Entscheidenden Werte stehen in:
      <PRE>
      For Each aCstrn In aDT.Constraints
      aNodeContraint.Nodes.Add(aCstrn.ConstraintName)
      aNodeContraint.Nodes.Add(aCstrn.GetType().ToString )
      Next aCstrn
      </PRE>
      Ich weiß nur nicht wie ich das in String Variable packe, um damit dann weiterarbeiten zu können?
      Nochmal zum Verständnis bezogen auf Nordwind:
      Ich habe die Datenbank Nordwind, nun möchte ich z.B zur Spalte Bestelldetails analysieren welche Spalten Relationen haben. In diesem Fall sind es Bestell.- Nummer und Artikel.-Nummer--ich möchte aber alles dynamisch gestalten, deshalb ist mir nicht bekannt, dass Bestell.- Nummer und Artikel.-Nummer- Relationen besitzen. Dann hat z.B Bestell,-Nummer eine n : 1 Beziehung auf die Tabelle Betsellungen, nun sollen die Variable Bestell.- Nummer
      gespeichert werden, sowie der Tabellenname Bestellungen und wenn möglich auch die Beziehungen also 1:n oder n:1.Und das ganze dann noch zu anderen Spalten, die Realteionen haben z.B in diesem Fall Artikel.-Nummer
      Danke für die Hilf

      Comment


      • #4
        und ich hab´noch ein Problem.
        Ich denke es liegt daran, dass ich eine Webanwendung programmiere.
        <PRE>
        Dim aNodeParent, aNodeContraint As TreeNode
        </PRE>
        hier bekomme ich die Fehlermeldung TreeNode ist nicht definiert. Habe ein TreeView im Formular drin, trotzdem kommt der Fehler.

        <PRE>
        aNodeParent = TreeView1.Nodes.Add(aDT.TableName)
        </PRE>
        Und hier kommt der Fehler (aDT.Tablename)
        Der Wert des Typs "String" kann nicht zu "Microsoft.Web.UI.WebControls.TreeNode" konvertiert werden

        Comment


        • #5
          das Problem mit der Fehlermeldung TreeNode ist nicht definiert ist gelöst es fehlte nur ein Import und zwar:

          Imports Microsoft.Web.UI.WebControls

          Dafür habe ich die Fehlemeldungen:
          <PRE>
          aNodeParent =
          TreeView1.Nodes.Add(aDT.TableName)
          aNodeParent.Nodes.Add("Constraints.Count " + aDT.Constraints.Count.ToString())
          aNodeParent.Nodes.Add("ParentRelations.Count " + aDT.ParentRelations.Count.ToString())
          aNodeParent.Nodes.Add("ChildRelations.Count " + aDT.ChildRelations.Count.ToString())
          aNodeContraint = aNodeParent.Nodes.Add("Constraints")
          Dim aCstrn As Constraint
          For Each aCstrn In aDT.Constraints
          aNodeContraint.Nodes.Add(aCstrn.ConstraintName)
          aNodeContraint.Nodes.Add(aCstrn.GetType().ToString )
          </PRE>

          Fehler: Zu allen aufgeführten kommter Wert des Typs "String" kann nicht zu "Microsoft.Web.UI.WebControls.TreeNode" konvertiert werden.

          Bitte Kommentar Lisa Hahn 2 von 3 nicht übersehen.
          Danke
          Gruß Lis

          Comment


          • #6
            Hallo,
            kann man mit:
            <PRE>
            FillShema("DataSet","SchemaTypeEnumeration","Table name") </PRE>

            nicht auch die Relationen in das Dataset von der ACCESS-Tabelle übernehmen??
            habe es mal auspobiert bei Constraint.Count steht dann eine 1 aber bei ParentRelations.Count und ChildRelations.Count bleibt die Null, vielleicht mache ich aber auch was falsch???
            Gruß Lis

            Comment

            Working...
            X