ForeignKeyConstraint FK_

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 81 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.

    @Maffi

    Habe den SQL mal nachgebaut aber das DGV bleibt leer.
    Alle Datensätze neu erstellt und auch " verheiratet " ;)

    Mein SQL: Was übersehe ich?

    VB.NET-Quellcode

    1. Private Sub dataview()
    2. GetSQL("SELECT Kunden.KdNr, Kunden.KdVorname, Kunden.KdNachname, Kunden.KdeMail, Kunden.KdTel, Kunden.KdInstagram, Address.PLZ, Address.Stadt, Address.Strasse, Address.Nr FROM Kunden JOIN KUAD ON Kunden.ID = KUAD.ID_Kunden JOIN Address ON KUAD.ID_Address = Address.ID")
    3. End Sub
    Bilder
    • dgv2.jpg

      464,39 kB, 1.209×711, 107 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Ich habe das jetzt mal in Visual Studio nachgebaut für dich.^^

    Aufgebaut ist es wie in deinen Code. Ich habe einen 'button1' auf die Form gezogen.
    Dieser ruft die Methode 'DataView()' auf welche den Select an die Methode 'GetSQL' übergibt.

    Wie gesagt mache ich solche 'Dinge' anders - aber zum besseren Vergleichen habe ich es genauso geschrieben wie du.

    Es stellt sich die Frage ob du die richtige Methode aufrufst. Du könntest den ganzen Code posten.
    Bei mir funktioniert es auf jeden fall.

    @Maffi

    Hier mein Code:
    Das seltsame ist ja, das die Tabellenüberschrieften angezeigt werden, nur der Inhalt nicht. hmmmm ;(
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_kundeneu
    2. Private rnd As Random = New Random()
    3. Private i_kdnummer As Integer
    4. Private s_kdnummer As String
    5. Private KdNr As String
    6. Private Sub SetSQL(ByVal SQL As String)
    7. Dim conn As New SqlCeConnection
    8. Dim cmd As New SqlCeCommand
    9. conn.ConnectionString = "datasource=B:\Dokumente\EAR\EAR\DB_1.sdf"
    10. cmd.Connection = conn
    11. cmd.CommandText = SQL
    12. conn.Open()
    13. cmd.ExecuteNonQuery()
    14. conn.Close()
    15. End Sub
    16. Private Sub GetSQL(ByVal SQL As String)
    17. Dim conn As New SqlCeConnection
    18. Dim cmd As New SqlCeCommand
    19. conn.ConnectionString = "datasource=B:\Dokumente\EAR\EAR\DB_1.sdf"
    20. cmd.Connection = conn
    21. cmd.CommandText = SQL
    22. Dim da As New SqlCeDataAdapter(cmd)
    23. Dim dt As New DataTable
    24. conn.Open()
    25. da.Fill(dt)
    26. conn.Close()
    27. KUAD_View.DataSource = dt
    28. End Sub
    29. Private Sub dataview()
    30. GetSQL("SELECT Kunden.KdNr, Kunden.KdVorname, Kunden.KdNachname, Kunden.KdeMail, Kunden.KdTel, Kunden.KdInstagram, Address.PLZ, Address.Stadt, Address.Strasse, Address.Nr FROM Kunden JOIN KUAD ON Kunden.ID = KUAD.ID_Kunden JOIN Address ON KUAD.ID_Address = Address.ID")
    31. End Sub
    32. Private Sub Kundennummer()
    33. i_kdnummer = rnd.[Next](1000, 100000)
    34. Dim vn As String = KdVornameTextBox.Text
    35. Dim nn As String = KdNachnameTextBox.Text
    36. KdNr = vn.Substring(0, 1) & nn.Substring(0, 1) & "-" & i_kdnummer
    37. KdNrTextBox.Text = KdNr
    38. End Sub
    39. Private Sub textboxoff()
    40. For Each TextBox In Me.Controls.OfType(Of TextBox)() : TextBox.Enabled = False : Next
    41. End Sub
    42. Private Sub Textboxon()
    43. For Each TextBox In Me.Controls.OfType(Of TextBox)() : TextBox.Enabled = True : Next
    44. End Sub
    45. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    46. textboxoff()
    47. Timer1.Stop()
    48. End Sub
    49. Private Sub counters()
    50. With Me.BindingContext(Me.DB1ds.Kunden)
    51. lbl_counters.Text = "Datensatz " & (Me.KundenBindingSource.Position + 1).ToString & " von " & .Count.ToString & " Datensätzen."
    52. End With
    53. dataview()
    54. End Sub
    55. Private Sub speichern()
    56. Me.Validate()
    57. Me.KundenBindingSource.EndEdit()
    58. Me.AddressBindingSource.EndEdit()
    59. Me.KuAdBindingSource.EndEdit()
    60. Me.TableAdapterManager.UpdateAll(Me.DB1ds)
    61. counters()
    62. End Sub
    63. Private Sub frm_kundeneu_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    64. Me.AddressTableAdapter.Fill(Me.DB1ds.Address)
    65. Me.KundenTableAdapter.Fill(Me.DB1ds.Kunden)
    66. Me.KuadTableAdapter.Fill(Me.DB1ds.KUAD)
    67. counters()
    68. buttons()
    69. textboxoff()
    70. dataview()
    71. End Sub
    72. Private Sub btn_save_Click(sender As Object, e As EventArgs) Handles btn_save.Click
    73. Kundennummer()
    74. speichern()
    75. textboxoff()
    76. buttons()
    77. End Sub
    78. Private Sub buttons()
    79. If KundenBindingSource.Count = Nothing Then btnKuAdneu.Enabled = False Else btnKuAdneu.Enabled = True
    80. If KundenBindingSource.Count = Nothing Then btnKuAdsave.Enabled = False Else btnKuAdsave.Enabled = True
    81. If KuAdBindingSource.Count = Nothing Then btnKuAdsave.Enabled = False Else btnKuAdsave.Enabled = True
    82. If KundenBindingSource.Count = Nothing Then btn_delete.Enabled = False Else btn_delete.Enabled = True
    83. If KundenBindingSource.Count = Nothing Or IDTextBox.Text = "" Then btn_save.Enabled = False Else btn_save.Enabled = True
    84. End Sub
    85. Private Sub btn_new_Click(sender As Object, e As EventArgs) Handles btn_new.Click
    86. Textboxon()
    87. btn_save.Enabled = True
    88. Me.AddressBindingSource.AddNew()
    89. Me.KundenBindingSource.AddNew()
    90. Me.TableAdapterManager.UpdateAll(Me.DB1ds)
    91. End Sub
    92. Private Sub btn_prev_Click(sender As Object, e As EventArgs) Handles btn_prev.Click
    93. Me.KundenBindingSource.MovePrevious()
    94. Me.AddressBindingSource.MovePrevious()
    95. counters()
    96. End Sub
    97. Private Sub btn_next_Click(sender As Object, e As EventArgs) Handles btn_next.Click
    98. Me.KundenBindingSource.MoveNext()
    99. Me.AddressBindingSource.MoveNext()
    100. counters()
    101. End Sub
    102. Private Sub btn_delete_Click(sender As Object, e As EventArgs) Handles btn_delete.Click
    103. Me.KundenBindingSource.RemoveCurrent()
    104. Me.AddressBindingSource.RemoveCurrent()
    105. Me.TableAdapterManager.UpdateAll(Me.DB1ds)
    106. counters()
    107. buttons()
    108. End Sub
    109. Private Sub btnKuAdneu_Click_1(sender As Object, e As EventArgs) Handles btnKuAdneu.Click
    110. btnKuAdsave.Enabled = True
    111. Me.KuAdBindingSource.AddNew()
    112. End Sub
    113. Private Sub btnKuAdsave_Click(sender As Object, e As EventArgs) Handles btnKuAdsave.Click
    114. btnKuAdsave.Enabled = False
    115. Dim kunde As Integer = Convert.ToInt32(cboKunde.SelectedValue)
    116. Dim adresse As Integer = Convert.ToInt32(cboAdresse.SelectedValue)
    117. Dim dv As DataRowView = CType(Me.KuAdBindingSource.Current, DataRowView)
    118. dv(0) = kunde
    119. dv(1) = adresse
    120. speichern()
    121. End Sub
    122. End Class

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Maffi schrieb:

    ​KUAD_View.DataSource = dt


    KUAD_View ist ein Datagridview.

    An was ist dieses Datagridview gebunden. Kannst du einen Screenshot von der Datasource von KUAD_View posten.


    Ja das ist das große DGV. Ist an NICHTS gebunden.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    OK
    Hier ist die Appconfig

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <configuration>
    3. <configSections>
    4. </configSections>
    5. <connectionStrings>
    6. <add name="dbcon" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\DB_1.sdf;Integrated Security=True" providerName="System.Data.SqlClient" />
    7. </connectionStrings>
    8. <startup>
    9. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    10. </startup>
    11. </configuration>
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Hallo

    Das hatte ich auch schonmal gemacht aber jetzt nochmal und der selbe fehler wie ich ihn schon hatte.
    Bilder
    • fehlerserv13.jpg

      481,56 kB, 835×818, 106 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Eben schnell gemacht.
    Danke
    Dateien
    • EAR.zip

      (56,03 kB, 116 mal heruntergeladen, zuletzt: )
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ () aus folgendem Grund: dateianhang

    Eine Sache die mir Aufgefallen ist:

    Dein ConnectionString ist in der AppConfig, in den Projekteinstellungen und in deinem Code verschieden.

    AppConfig - "Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\DB_1.sdf;Integrated Security=True"
    Projekteinstellungen - "Data Source=|DataDirectory|\DB_1.sdf"
    Im Code - "datasource=B:\Dokumente\EAR\EAR\DB_1.sdf"

    Bei mir steht dort überall der selbe Connectionstring.

    Wichtige Frage noch: Wenn du deine Anwendung startest und deine Dummy-Daten eingibst, danach Beendest und die Anwendung wieder neu startest, sind die dann gespeichert in der DB?
    Oder sind die Datagridviews wieder leer?
    Hallo
    Wenn ich in der Entwicklungsumgebung starte und Dummidaten eingebe bleiben die solange in der DB bis ich "Neu erstellen" lasse.

    KOMANDO zurück!!
    Heute sind die Daten weg in der Entwicklungsumgebeung.
    Im Ordner Debug, wenn ich das laufen lasse bleiben die Daten in der DB!!

    ABER wenn ich das

    VB.NET-Quellcode

    1. ​GetSQL("Select * From Kunden")
    nehme müßten doch zumindest die Daten aus der einen Tabelle zu sehen sein???
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Amelie“ ()

    @Maffi

    So habe mal ein Test gemacht. Daten in die DB geschrieben ein neues Project gestartet.
    So geht es nun. Bin gespannt wie es ist wenn ich nun das andere alles wieder einbaue.
    Bilder
    • test1.jpg

      536,86 kB, 1.173×801, 98 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    OK.

    Ich vermute, dass dein Projekt durch die drei unterschiedlichen Connectionstrings, 'zerschossen' ist. Es ist nicht normal, dass in der AppConfig, in den Projekteinstellungen und im Code drei verschiedene Connectiostrings verwendet werden. Ich würde ein komplett neues Projekt erstellen. Den Code aus deinen Sub's kannst du ja kopieren um dir ein wenig Arbeit zu sparen.

    Eventuell besser wäre es als Dataset only (Anleitung von @ErfinderDesRades) neu zu bauen.
    Mit seinen Tutorials hab ich auch begonnen, nur hab ich danach nie diese Dienstbasierten Datenbanken usw. verwendet.
    Für kleine Projekte mache ich heute noch Dataset only, und für aufwendigere verwende ich SQL Server und Entity Framework.

    Aber um die Grundlagen der Relationalen Datenbankerei zu erlernen (die SEHR wichtig sind) ist Dataset only am Anfang definitiv am besten geeignet.

    Mit deinen Test-Programm siehst du zumindest mal, dass dein Join funktioniert - und das ist ja schon mal ein 'kleiner' Fortschritt. :)
    Hey
    Ja jetzt hatte ich etwas verändert und dann ging im Project nichts mehr. ;(
    Also nochmal von vorne beginnen.

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ ()

    So nachdem ich alles was die Verbindungen zu den DBs DS und Tabels betrifft erst gelöscht habe und dann von Hand eingetragen klappt es nun.

    Auch werden nun die Neuen Kunden gleich " verheiratet " ;)

    Jetzt muss ich zuerst einen Weg finden das z.B. meine DummiUser nicht 2mal angelegt werden , also eine Prüfung.

    Aber auf was sollte ich da prüfen? Anschrift, Name oder??
    Bilder
    • dgv3.jpg

      404,07 kB, 866×601, 92 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Es kommt etwas drauf an, für was die Anwendung explizit gedacht ist.
    Wenn du bspw. einen Onlineshop hast, verheiratest du den Loginnamen mit der Rechnungsadresse. Wobei natürlich die Adresse nie unique ist.
    Alle mir bekannten Datenbanken lassen doppelte Namen und Adressen zu. Es ist nicht auszuschließen, dass derselbe Name in der selben Adresse wohnt.
    Die Kundennummer gibts ja nicht umsonst....


    In meinen Anwendungen können doppelte Namen und deren Adressen erfasst werden. Jedoch stelle ich dem User einen Hinweis bereit, dass dieser Name bereits vorliegt.