Form2 lasst keine Verbindung zu Datenbank zu

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

Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von Akanel.

    Ich denke ich habe gefunden was mir mit auf den Weg gegeben hast, bin aber gerade zu blöd das umzusetzen.

    Ich behaupte einfach mal das Du die ArtikelRow as RechnungsProgramm.RechDts.ArtikelRow in der Postenklasse meinst. Ich tue mich da gerade echt schwer.

    Habe aber auch nochmal den Artikel "Typed Programming - The Typed Dataset" gelesen. Dort sagst Du ja auch das jede ParentRow immer ihr ChildRows kennt, und auch umgekehrt.

    Demnach muss ich versuchen mir GetChildRows auf die Artikel zu zugreifen.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    Akanel schrieb:

    Ich denke ich habe gefunden was mir mit auf den Weg gegeben hast, ... das Du die ArtikelRow as RechnungsProgramm.RechDts.ArtikelRow in der Postenklasse meinst.
    Genau. :thumbsup: Hast du das zielstrebig im ObjectBrowser gefunden, oder eher zufällig durch Herumklicksen?


    Akanel schrieb:

    Dort sagst Du ja auch das jede ParentRow immer ihr ChildRows kennt, und auch umgekehrt.
    Demnach muss ich versuchen mir GetChildRows auf die Artikel zu zugreifen.
    Mehrmals nein.
    1. PostenRow.ArtikelRow ist eine Property, und das ist schon, was du suchst - da musst du nix weiter zugreifen.

      VB.NET-Quellcode

      1. dim rwArtikel = rwPosten.ArtikelRow
      feddich. Wie (im Artikel) gesagt: Jede PostenRow kennt ihre ArtikelRow. :D
    2. mit GetChildRows() kannst du natürlich keine ArtikelRow kriegen, denn Artikel ist die ParentTable. Wie du die ArtikelRow kriegst - siehe 1) - also du hast sie bereits.
    3. GetChildRows() ist sowieso vollkommen verboten - mann, ich zeter da den halben Artikel lang darüber, dass man gefälligst die typisierten Methoden nehmen soll, und nicht den untypisierten Kram.
      Wie gesagt, ein typisierter Zugriff auf Child-Artikel ist logisch unmöglich, aber andersrum wäre denkbar: Eine ArtikelRow kennst selbstverständlich alle ihre (Child-)PostenRows, und holen tut man die mit rwArtikel.GetPostenRows()
    Vielen Dank für Deine Antwort.
    Nimm es mir bitte nicht übel wenn ich den kompletten zusammenhang noch nicht verstanden habe, ich habe mir den Artikel mehrmals durchgelesen, aber mein Englisch ist nicht das beste, so dass ich mir unklare stellen anhand paktischer beispiele beibringen muss/kann.
    Mit deiner "Aufgabenstellung" und deiner obigen erklärung habe ich nun wieder eine ganze Menge gelernt. Danke dafür.

    Genau. Hast du das zielstrebig im ObjectBrowser gefunden, oder eher zufällig durch Herumklicksen?


    Das habe ich schon zielstrebig gemacht. Ich denke mit wahllosem herumklicksen kommt man nicht darauf.
    Auch hier habe ich mir den Artiel wieder zur Brust genommen, denn dort erklärst Du ja ziemlich gut wie man den OB nutzt und auch gescheit "Einstellt". Das hat mir wiederum sehr dabei geholfen, und wird es auch in zukunft.


    :thumbsup: :thumbsup:
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Nun kommen 2 für mich sehr grosse baustellen.
    Ich möchte zu den Kunden eine Kundennummer und zu den Rechnungen die Rechnungsnummern generieren.

    Zu den Rechnungsnummern habe ich hier schon mal einen Beitrag gelesen. Es gibt ja mehrere Möglichkeiten, aber wie schaut das ganze aus wenn man versucht sich an die Rechtslage zu halten?
    Die Nummern müssen ja ein gewisses Format haben , müssen lückenlos aufsteigen und natürlich keinesfalls doppelt vorhanden sein.

    Wie kann man sowas nun am besten bewerkstelligen?
    Nehmen wir an ich möchte folgendes Format haben: 2016_0001
    Kann ich da mit der RechnungsID arbeiten? Quasi, aktuelles Datum (Jahr) auslesen und die ID Formatiert anhängen?

    Bewusst ist mir auch das man keine Rechnung löschen darf, nur stornieren. Das kommt dann auch noch hinzu.

    Das wird noch eine richtige herausforderung.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Mit der Rechnungs-Id kannste da nicht arbeiten, weil die Auto-Generierung hält sich nicht an gesetzliche Vorgaben

    Zu deine Frage: Schwer (unmöglich) zu beantworten, denn es sind mehrere Fragen gleichzeitig.
    Ich hab irgendwann mal einen Algo gemacht, der hat in einer Liste das Maximum gesucht, und dann einen noch höheren Wert generiert.

    Aber man braucht als Eingabe halt eine Liste der bisherigen Werte, es sei denn, man hat das bisherige Maximum bereits abgerufen.
    Also da musst du erstmal konzipieren, wie das konkret vonstatten gehen soll.
    fertig konzipiert ist, wenn du die Signatur der Methode angeben kannst, also welche Parameter erwartet sie, und was gibt sie zurück?
    Aktuell habe ich mir folgendes gedacht. Nicht perfekt aber ich bekomme schon mal den höchsten Wert ausgegeben. Und dieser wird auch immer um 1 erhöht.

    VB.NET-Quellcode

    1. Private Sub WertErmitteln()
    2. Dim tabelle = RechDts1.Rechnung
    3. If tabelle.Rows.Count < 1 Then
    4. MessageBox.Show("Tabelle enthält keine Daten!")
    5. Return
    6. End If
    7. Dim kleinster = tabelle.First, groesster = kleinster
    8. For Each row In tabelle
    9. If Not row.IsRechNrNull Then
    10. If row.RechNr < kleinster.RechNr Then
    11. kleinster = row
    12. ElseIf row.RechNr > groesster.RechNr Then
    13. groesster = row
    14. End If
    15. Else
    16. MessageBox.Show("Noch keine Rechnungsnummer vergeben!")
    17. End If
    18. Next
    19. Dim abstand = groesster.RechNr - kleinster.RechNr
    20. Dim neueNummer = groesster.RechNr + 1
    21. lblHoechsteRechNr.Text = groesster.RechNr.ToString
    22. lblKleinsteRechNr.Text = kleinster.RechNr.ToString
    23. lblAbstand.Text = abstand.ToString
    24. lblNaechsteNummer.Text = neueNummer.ToString
    25. End Sub


    Jetzt muss ich mir nur noch überlegen wie ich es gescheit einbaue wenn ein Rechnung angelegt werden soll. Ich denke aber das es noch weit elegantere Lösungen als meine gibt. Übung macht den meister.

    Die Labels sind für mich nur zur Kontrolle gedacht. Kein wesentlicher Teil des Programms.
    Ebenso die Benamung "tabelle" und "row" sind nur so damit ich Übung bekomme wie ich wo auf bestimmte Sachen zugreifen kann... Lerneffekt.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Hallo,nach einer kleinen Pause habe ich mich wieder an das Programm begeben.Nun habe ich allerdings noch ein ganz anderes Problem. Und zwar möchte ich die Rechnungserstellung auf einer eigenen Form erledigen.Kunden und Artikel funktionieren ja einwandfrei mit folgendem Code:

    VB.NET-Quellcode

    1. Private Sub ArtikelBearbeiten()
    2. Using frmArtikel As New dlgArtikel
    3. frmArtikel.ArtikelBindingSource.DataSource = ArtikelBindingSource.Current
    4. If frmArtikel.ShowDialog(Me) = DialogResult.OK Then
    5. frmArtikel.ArtikelBindingSource.EndEdit()
    6. Else
    7. frmArtikel.ArtikelBindingSource.CancelEdit()
    8. End If
    9. End Using
    10. End Sub


    Nur wie stelle ich es nun an das ich auf einem weiteren Form ( dlgRechnung) die Rechnung komplett bearbeiten kann? Sprich das ich das Datum angeben kann und entsprechen die Posten hinzufügen kann.
    Auf der Übersicht ,in einem DGV klappt dies ja. Aber ich hätte es gerne in einer eigenen Form. Bindingsource umstöpseln wird wohl der knackpunkt sein. Nur Komme ich nicht darauf WIE, da ich denke das ich 2 Bindingsources brauche.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.