Laden...

Datenbindung von 2 Tabellen in einer 3 Tabelle

Erstellt von Herlth vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.375 Views
H
Herlth Themenstarter:in
2 Beiträge seit 2010
vor 14 Jahren
Datenbindung von 2 Tabellen in einer 3 Tabelle

verwendetes Datenbanksystem: <bitte immer angeben>
Ich benutze SQLServerexpress2008 mit VisualStudio2008.

Ich bin noch neu in der Programmierwelt.

Ich habe das Problem, dass ich eine Tabelle Namens Firma habe, wo ich Kunden anlege. Die 2 Tabelle ist die Niederlassung.

Jetzt kann es vorkommen, dass eine Firma mehrere Niederlassungen hat.

Deshalb habe ich eine dritte Tabelle mit Firma_Niederlassung_Zuordnung erstellt.
Die Tabelle Firma hat einen Primärschluesel der Auf die 3 Tabelle Spalte 2 zeigt.
Die Tabelle Niederlassung hat einen Primärschluessel, der auf die 3 Spalte der Tabelle zeigt. Die 1. Spalte ist natürlich immer eine fortlaufende ID.

Jetzt mein Problem. Leider wird in der Tabelle ..Zuordnung nichts eingetragen, wenn ich eine neue Niederlassung erstelle.

Vielleicht weiß jemand was ich falsch mache.

Vielen Dank im vorraus.

C
2.121 Beiträge seit 2010
vor 14 Jahren

Von selber wird da natürlich nichts eingetragen 😃
Und was du alles bisher machst, erzählst du uns ja nicht. Lies mal deinen Beitrag und versetz dich in jemand der überhaupt nichts über dein Projekt weiß.

M
402 Beiträge seit 2005
vor 14 Jahren

Hi,

wenn eine Firma mehrere Niederlassungen hat, ist das doch eine 1:n-Beziehung.

Dann reichen doch auch 2 Tabellen

Tabelle Firma:
==========

  • firmaID
  • firmenname
  • ...

Tabelle Niederlassung
==============

  • niederlassungId
  • firmaId
  • niederlassungname
  • ...
H
Herlth Themenstarter:in
2 Beiträge seit 2010
vor 14 Jahren

Hallo Chilic,

ich habe den Code der Tabellen MSSQL und den Code des Form angehangen.
Ich dachte, wenn die Beziehungen da sind, dann würde er die Einträge autom. machen.

Hallo M@TUK

Danke auch für Deine Info.
Ich habe das Beispiel aus der MS Beispieldatenbank.
Ist es nicht sinnvoll eine 1:n Beziehung über eine "zuordungstabelle" laufen zu lassen ?

Wenn ja, dann weiß ich nur nicht wie es funktioniert. In der Beispieldatenbank AdventureWorks ist leider keine Anwendung dabei.

Code der 3 Tabellen

USE [Herlth2]
GO

/****** Object: Table [dbo].[Firma] Script Date: 03/26/2010 09:40:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Firma](
[ID_Firma] [int] IDENTITY(1,1) NOT NULL,
[ID_Firma_Typ] [int] NULL,
[Firmenname] varchar NOT NULL,
[Bemerkung] varchar NULL,
[Firmenlogo] varchar NULL,
[Firma_Edatum] [smalldatetime] NULL,
[Firma_Ädatum] [smalldatetime] NULL,
CONSTRAINT [PK_Firma] PRIMARY KEY CLUSTERED
(
[ID_Firma] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Firma] WITH CHECK ADD CONSTRAINT [FK_Firma_Firma_Typ] FOREIGN KEY([ID_Firma_Typ])
REFERENCES [dbo].[Firma_Typ] ([ID_Firma_Typ])
GO

ALTER TABLE [dbo].[Firma] CHECK CONSTRAINT [FK_Firma_Firma_Typ]
GO

USE [Herlth2]
GO

/****** Object: Table [dbo].[NL] Script Date: 03/26/2010 09:39:37 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[NL](
[ID_NL] [int] IDENTITY(1,1) NOT NULL,
[ID_Firma] [int] NULL,
[NL_Name] varchar NOT NULL,
[NL_Tel1] varchar NULL,
[NL_Tel2] varchar NULL,
[NL_Fax] varchar NULL,
[NL_Mail1] varchar NULL,
[NL_Mail2] varchar NULL,
[NL_Bemerkung] varchar NULL,
[NL_Edatum] [smalldatetime] NULL,
[NL_Ädatum] [smalldatetime] NULL,
CONSTRAINT [PK_NL] PRIMARY KEY CLUSTERED
(
[ID_NL] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

USE [Herlth2]
GO

/****** Object: Table [dbo].[Firma_NL_ZuW] Script Date: 03/26/2010 09:39:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Firma_NL_ZuW](
[ID_Firma_NL_ZuW] [int] IDENTITY(1,1) NOT NULL,
[ID_Firma] [int] NULL,
[ID_NL] [int] NULL,
CONSTRAINT [PK_Firma_NL_ZuW] PRIMARY KEY CLUSTERED
(
[ID_Firma_NL_ZuW] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Firma_NL_ZuW] WITH CHECK ADD CONSTRAINT [FK_Firma_NL_ZuW_Firma] FOREIGN KEY([ID_Firma])
REFERENCES [dbo].[Firma] ([ID_Firma])
GO

ALTER TABLE [dbo].[Firma_NL_ZuW] CHECK CONSTRAINT [FK_Firma_NL_ZuW_Firma]
GO

ALTER TABLE [dbo].[Firma_NL_ZuW] WITH CHECK ADD CONSTRAINT [FK_Firma_NL_ZuW_NL] FOREIGN KEY([ID_NL])
REFERENCES [dbo].[NL] ([ID_NL])
GO

ALTER TABLE [dbo].[Firma_NL_ZuW] CHECK CONSTRAINT [FK_Firma_NL_ZuW_NL]
GO

Code des Forms der NL

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
public partial class NL : Form
{
public NL()
{
InitializeComponent();
}

    private void nLBindingNavigatorSaveItem_Click(object sender, EventArgs e)  
    {  
        this.Validate();  
        this.nLBindingSource.EndEdit();  
        //firmaBindingSource.EndEdit();  
        //firmaNLZuWBindingSource.EndEdit();  

       this.tableAdapterManager.UpdateAll(this.herlth2DataSet);  

       //nLTableAdapter.Update(herlth2DataSet.NL);  
       //firmaTableAdapter.Update(herlth2DataSet.Firma);  
       //firma_NL_ZuWTableAdapter.Update(herlth2DataSet.Firma_NL_ZuW);  
    }  

    private void NL_Load(object sender, EventArgs e)  
    {  
        // TODO: Diese Codezeile lädt Daten in die Tabelle &quot;herlth2DataSet.Firma_NL_ZuW&quot;. Sie können sie bei Bedarf verschieben oder entfernen.  
        this.firma_NL_ZuWTableAdapter.Fill(this.herlth2DataSet.Firma_NL_ZuW);  
        // TODO: Diese Codezeile lädt Daten in die Tabelle &quot;herlth2DataSet.Firma&quot;. Sie können sie bei Bedarf verschieben oder entfernen.  
        this.firmaTableAdapter.Fill(this.herlth2DataSet.Firma);  
        // TODO: Diese Codezeile lädt Daten in die Tabelle &quot;herlth2DataSet.NL&quot;. Sie können sie bei Bedarf verschieben oder entfernen.  
        this.nLTableAdapter.Fill(this.herlth2DataSet.NL);  

        // ID_Firmafeld für die Combobox zuweisen  
        cboFirma.DisplayMember = &quot;Firmenname&quot;;  
        cboFirma.ValueMember = &quot;ID_Firma&quot;;  
        cboFirma.DataSource = this.herlth2DataSet.Firma;  
    }  

    private void firmaBindingSource_CurrentChanged(object sender, EventArgs e)  
    {  

    }  
    }  
}
79 Beiträge seit 2005
vor 14 Jahren

Hallo,

bei der von dir dargestellt konstellation Firma -> Niederlassung ist es nicht sinnvoll, eine Relationstabelle 'zwischenzuschalten'. Durch dieses Konstrukt ist es datentechnisch denkbar, daß eine Niederlassung verschiedenen Firmen angehört, was wohl nicht sinn der Sache ist. bei einer 1:n-Relation hält man üblicherweise im Untergeordneten Element den verweis auf das Übergeordnete Element.

Viele Grüße

roses are #FF0000 violets are #0000FF
all my base are belong to you