Eigene Funktion erstellen

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Steamy2010.

    Eigene Funktion erstellen

    Guten Morgen @ all :) ,

    ich habe hier folgenden Code, bei dem ich etwas in eine eigene Funktion schreiben möchte und zwar das was ich hier auskommentiert habe, damit ich bei weiteren If-Abfragen nur noch dann die Funktion aufrufen muss. Wie ich mir das vorgestellt habe ist im zweiten Code-Bsp. zu sehen.

    Quellcode

    1. If ComboBox1.SelectedIndex = 0 Then
    2. Dim cm As New SqlClient.SqlCommand("SELECT * FROM Tabelle1 JOIN Tabelle2 ON Tabelle1.PERSON_NR = Tabelle2.PERSON_NR WHERE convert(char(3),sparte) = '110' AND (" & SQL & ") AND (" & SQL1 & ") AND (" & SQL2 & ")", cn)'Dim adapter As SqlDataAdapter = New SqlDataAdapter()
    3. 'adapter.SelectCommand = cm
    4. 'DataGridView2.Columns.Clear()
    5. 'Dim table As New DataTable'table.Locale = System.Globalization.CultureInfo.InvariantCulture
    6. 'adapter.Fill(table)
    7. 'DataGridView2.DataSource = table
    8. End If




    Quellcode

    1. Public Function verbindung()
    2. Dim adapter As SqlDataAdapter = New SqlDataAdapter()
    3. adapter.SelectCommand = cm
    4. DataGridView2.Columns.Clear()
    5. Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture
    6. adapter.Fill(table)
    7. DataGridView2.DataSource = tableReturn DataGridView2.DataSource
    8. End Function
    9. If ComboBox1.SelectedIndex = 0 Then
    10. Dim cm As New SqlClient.SqlCommand("SELECT * FROM Tabelle1 JOIN Tabelle2 ON Tabelle1.PERSON_NR = Tabelle2.PERSON_NR WHERE convert(char(3),sparte) = '110' AND (" & SQL & ") AND (" & SQL1 & ") AND (" & SQL2 & ")", cn)
    11. verbindung ()
    12. End If


    ich bekomme bei der Ausführung keine Fehlermeldung, aber die Funktion wird irgendwie nich aufgerufen ?(

    Habt ihr vielleicht noch eine Idee oder einen Tip für mich? :whistling:
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    1. sagt dir "option strict on" etwas ?
    2. MUSS eine Funtciton immer einen Returnwert haben!

    VB.NET-Quellcode

    1. Public Function verbindung() as Boolean
    2. Dim adapter As SqlDataAdapter = New SqlDataAdapter()
    3. adapter.SelectCommand = cm
    4. DataGridView2.Columns.Clear()
    5. Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture
    6. adapter.Fill(table)
    7. DataGridView2.DataSource = tableReturn DataGridView2.DataSource
    8. return(true)
    9. ''Mach einen Fehlerabfang, das er ein False zurück gibt, wenn was schief geht
    10. End Function


    des weiteren empfehle ich dir ZUERST alles zu deklarieren, und DANN auf die sachen zuzugreifen. ( ist übersichtlicher )
    wenn nichts passiert, mach mal ein try / catch rum

    VB.NET-Quellcode

    1. Public Function verbindung() as Boolean
    2. try
    3. Dim adapter As SqlDataAdapter = New SqlDataAdapter()
    4. Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture
    5. adapter.SelectCommand = cm
    6. DataGridView2.Columns.Clear()
    7. adapter.Fill(table)
    8. DataGridView2.DataSource = tableReturn DataGridView2.DataSource
    9. return(true)
    10. Catch ex As Exception
    11. MessageBox.Show(ex.ToString)
    12. return(false)
    13. End Try
    14. end Function


    dann siehst du ob da was schief geht oder nicht.

    Wo du die Funktion aufrufst, machst du auch eine messagebox rum
    dann kreigst du ein "True" wenn alles OK war oder ein "False" ( zzgl. Fehlermessagebox ) wenn was schief gelaufen ist


    gruß, annoxoli
    Try / Catch ist gaaaaanz schlecht!
    Wenn es knallt, knallt es genau da, wo der Fehler auftritt. Da kannst Du den Fehler direkt beheben.
    Üblicherweise wird dann nämlich nur die MessageBox auskommentiert, und dann wird jegliche Fehlerinformation vergessen, d.h., der Fehler wird nicht mehr bemerkt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Annoxoli schrieb:

    aber erstmal um zu sehen obs da knallt oder nicht,

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private feld() As Integer = {1, 2, 3, 4, 5}
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. Debug.Print(feld(-1).ToString)
    5. End Sub
    6. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    7. Try
    8. Debug.Print(feld(-1).ToString)
    9. Catch ex As Exception
    10. MessageBox.Show(ex.Message)
    11. End Try
    12. End Sub
    13. End Class
    Was findest Du nun besser?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du hast dein cm lokal in der aufrufenden Sub deklariert, verwendest es aber in deiner Funktion. Da sollte eigentlich schon die IDE meckern. Du solltest das also entweder global deklarieren oder als Argument dem Aufruf mitgeben.

    @Annoxoli,
    ich kann deiner Argumentation nicht folgen.
    1. Wenns knallt bekommst du eine Fehlermeldung mit Hervorhebung der fehlerhaften Zeile. Mit Try/Catch knallts nicht, du weist also ganix. Darum wird so häufig vor dessen Verwendung gewarnt. Try/Catch ist GERADE in der Enrwicklungsphase die allerschlechteste Möglichkeit zur Fehlersuche. Wenn deine Tankanzeige im Auto aufleuchtet, was ist da besser:
    A erstmal die Lampe rausdrehen und gucken wie weit man kommt?
    B an der nächsten Tankstelle tanken
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Herzlichen Dank an Euch, nun Storch mir einer einen Brat, wieso wird denn in Zeile 2 und 6 eine end-of Anweisung erwartet?? ?(

    Quellcode

    1. Public Function verbindung() As Boolean
    2. TryDim adapter As SqlDataAdapter = New SqlDataAdapter()Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture
    3. adapter.SelectCommand = cm
    4. DataGridView2.Columns.Clear()
    5. adapter.Fill(table)
    6. DataGridView2.DataSource = tableReturn DataGridView2.DataSource
    7. Return (True)
    8. Catch ex As ExceptionMessageBox.Show(ex.ToString)
    9. Return (False)
    10. End Try
    11. End Function
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    @Steamy2010: Kannst Du bitte mal die entsprechenden Zeilenumbrüche reinmachen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Steamy2010 schrieb:

    TryDim adapter As SqlDataAdapter = New SqlDataAdapter()Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture

    ==>

    VB.NET-Quellcode

    1. Try
    2. Dim adapter As SqlData
    3. Adapter = New SqlDataAdapter()Dim table As New DataTable
    4. table.Locale = System.Globalization.CultureInfo.InvariantCulture
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    oh ja, sorry..

    VB.NET-Quellcode

    1. Public Function verbindung() As Boolean
    2. Try
    3. Dim adapter As SqlDataAdapter = New SqlDataAdapter()
    4. Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture
    5. adapter.SelectCommand = cm
    6. DataGridView2.Columns.Clear()
    7. adapter.Fill(table)
    8. DataGridView2.DataSource = tableReturn DataGridView2.DataSource
    9. Return (True)
    10. Catch ex As ExceptionMessageBox.Show(ex.ToString)
    11. Return (False)
    12. End Try
    13. End Function


    mag mir jemand helfen, wieso in den Zeilen 4 und 8 eine end-of Anweisung verlangt wird? ?(
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)

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

    Steamy2010 schrieb:

    Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture
    System.Globalization.CultureInfo.InvariantCulture stellt die Eigenschaft InvariantCulture eines Cultureinfo-Objectes dar. Du müsstest also erstmal eine Instanz einer Cultureinfo erstellen und der einen Wert zuweisen. Schau dir mal dieses Beispiel von MSDN an.

    Steamy2010 schrieb:

    DataGridView2.DataSource = tableReturn || DataGridView2.DataSource
    Da fehlt ein Zeilenumbruch (alternativ geht auch nen Doppelpunkt.

    Steamy2010 schrieb:

    @Vatter --> ich habe cm so global deklariert... Dim cm AsSqlCommand
    Das wäre ja schon gut. Dies ist also eine globale Instanz von cm. In deiner aufrufenden Funktion steht aber wieder Dim cm as SqlCommand = blablabla und dies ist eine neue lokale lokale Instanz Instanz, der du ein Command mitgibst. In der Funktion kannst du auf diese lokale Instanz aber nicht zugreifen. Deshalb wird auch das Command nicht ausgeführt.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    @ Vatter :vielen Dank für die umfangreichen Tipps, ich hoffe es so richtig verstanden und umgesetzt zu haben, aber leider

    wird die Zeile 4 immernoch angemeckert. ?(

    VB.NET-Quellcode

    1. Public Function verbindung() As Boolean
    2. Try
    3. Dim adapter As SqlDataAdapter = New SqlDataAdapter()
    4. Dim Instanz As CultureInfo = New CultureInfo("es,ES")
    5. Dim table As New DataTabletable.Locale = System.Globalization.CultureInfo.InvariantCulture
    6. adapter.SelectCommand = cmd
    7. DataGridView2.Columns.Clear()
    8. adapter.Fill(table)
    9. DataGridView2.DataSource = table
    10. Return (DataGridView2.DataSource)
    11. Return (True)
    12. Catch ex As ExceptionMessageBox.Show(ex.ToString)
    13. Return (False)
    14. End Try
    15. End Function
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)

    Vatter schrieb:

    Auch in Zeile 5 haste nicht aufgepasst..


    nun, ich will ehrlich sein..... nicht verstanden trifft´s dann schon eher.

    ich wusste nicht welcher Wert eingetragen werden soll. Habe eine Aufgabe bekommen und bin dabei anhand dieser mir gerade Visual Basic
    beizubringen. War vorher nur mit PHP unterwegs (prozedual) und nun schwimm ich hier völlig objektorientiert mit VB rum ;(

    Wäre schön falls Du konkreter werden könntest ?(
    Danke !
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)

    Steamy2010 schrieb:

    nicht verstanden trifft´s dann schon eher.

    wohl wahr.
    Nun könnte man einfach sagen: "machs New weg", aber das wäre eine vertane Chance für dich, zu lernen, was dieses Schlüsselwort eigentlich bedeutet. Und das geht ganz tief ins Verständnis von OOP hinein, also ich empfehle dieses Buch Lesen - kann man auch nach Stichworten durchsuchen (aber bei deim Wissensstand ist komplett durchlesen vmtl. letztlich effizienter)