Fehlermeldung aber kA warum..

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Fehlermeldung aber kA warum..

    Ich hab ne datenbank erstellt die verbindung herstellen geht aber dann bekomm ich ein prob. mit speichern....

    VB.NET-Quellcode

    1. Private Sub Kunden_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ConnADO.ConnectionString = "Provider=SQLOLEDB; Data Source=.\SQLEXPRESS; Database=DVD-Datenbank; Trusted_Connection=Yes"
    3. ConnADO.Open()
    4. End Sub


    VB.NET-Quellcode

    1. Private Sub cmd_speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_speichern.Click
    2. Try
    3. con.Open()
    4. cmd.CommandText = "Insert Into tbl_Kunden (Vorname, Nachname, Geburstag, Telefon) Values ('" & tb_vorname.Text & "', '" & tb_nachname.Text & "', '" & tb_geb.Text & "', '" & tb_tel.Text & "')" & "Insert Into tbl_ort (PLZ, Straße, Ort, hausnummer) Values ('" & tb_plz.Text & "', '" & tb_str.Text & "', '" & tb_ort.Text & "', '" & tb_hn.Text & "')"
    5. anzahl = cmd.ExecuteNonQuery()
    6. If anzahl > 0 Then
    7. MsgBox("Es wurde ein Datensatz hinzugefügt")
    8. End If
    9. Catch ex As Exception
    10. MsgBox(ex.Message)
    11. End Try
    12. con.Close()
    13. End Sub

    da kommt nämlich diese Fehlermeldung
    img16.imageshack.us/my.php?image=unbenanntbjm.jpg
    und kA was das fehler is =( könnt ihr mir pls weiter helfen

    Peace
    Der Fehler ist, dass "ConnADO" irgendwie nicht dasselbe wie "con" ist.

    Davon abgesehen scheint dein SQL-Befehl aber auch fehlerhaft zu sein:

    VB.NET-Quellcode

    1. tb_tel.Text & "')" & "Insert Into

    Da fehlt zumindest sowas wie ein Semikolon vor dem "Insert".
    jetzt hab ich das con auf connADO.Open geändert und sql-befehl hab auch jetzt richtig

    VB.NET-Quellcode

    1. Private Sub cmd_speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_speichern.Click
    2. Try
    3. ConnADO.Open()
    4. cmd.CommandText = "Insert Into tbl_Kunden (Vorname, Nachname, Geburstag, Telefon) Values ('" & tb_vorname.Text & "', '" & tb_nachname.Text & "', '" & tb_geb.Text & "', '" & tb_tel.Text & "');" & "Insert Into tbl_ort (PLZ, Straße, Ort, hausnummer) Values ('" & tb_plz.Text & "', '" & tb_str.Text & "', '" & tb_ort.Text & "', '" & tb_hn.Text & "')"
    5. MsgBox("Es wurde ein Datensatz hinzugefügt")
    6. Catch ex As Exception
    7. MsgBox(ex.Message)
    8. End Try
    9. ConnADO.Close()
    10. Else
    11. End Sub


    jetzt kommt aber dieser fehler =(
    img3.imagebanana.com/view/nvxaojv1/Unbenannt.JPG
    Clevererweise überprüft man ggfs ob eine Verbindung die man öffnen will vlt schon auf ist ...

    BTW: Deine nächste Frage wird vlt sein:

    "Ich bekomme keinen Fehler, aber der Datensatz wird nicht gespeichert"

    -> cmd.executenonquery ...


    Dann kommt vermutlich ein SQL-Fehler. Warten wir's mal ab ;)
    also die verbindung steht so wird es halt im Login formular gesagt....

    VB.NET-Quellcode

    1. Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
    2. verb_string = "Provider=SQLOLEDB; Data Source=.\SQLEXPRESS; Database=DVD-Datenbank; Trusted_Connection=Yes"
    3. Try
    4. 'Datenbankverbindung aufbauen
    5. ConnADO.ConnectionString = verb_string
    6. ConnADO.Open()
    7. 'Command-Objekt instanzieren
    8. CmdADO = New ADODB.Command
    9. 'Verbindungsobjekt erstellen
    10. CmdADO.ActiveConnection = ConnADO
    11. MsgBox("Datenbankverbindung hergestellt")
    12. Catch ex As Exception
    13. MsgBox(ex.Message)
    14. MsgBox("Datenbankverbindung fehlgeschlagen", MsgBoxStyle.OkOnly & MsgBoxStyle.Critical, "DB-Verbindungsfehler")
    15. Exit Sub
    16. End Try
    17. Start.Show()
    18. Me.Close()
    19. End Sub

    also die verbindung steht

    oiii ....

    Du hast ein offene Verbindung. Du macht auf diese Verbindung ein (erneutes) "open". Und bekommst den Fehler "nicht erlaubt für offene Objekte".
    Wenn dir jetzt nicht die Schuppen von den Haaren fallen, ist dir nicht zu helfen und du solltest besser nen Bonsai bei Wachsen beobachten ...

    BTW: in .Net sollte man die Verbindung je nach Bedarf öffnen und schließen (und auch nicht unbedingt als globales Objekt vorhalten).
    Also Verbindung öffnen, Sachen machen, Verbindung schließen. "Global" merken muss man sich nur den ConnString
    stimmt ja vergessen es zu schliessen... danke

    aber jetzt kommt noch ein fehler...

    VB.NET-Quellcode

    1. Try
    2. ConnADO.Open()
    3. cmd.CommandText = "Insert Into tbl_DVD (Name, Beschreibung, Erscheinungsdatum, DVD_Typ, Sprache, FSK, Format, Preis) Values ('" & tb_name.Text & "', '" & tb_beschreibung.Text & "', '" & tb_datum.Text & "', '" & cb_typ.Text & "', '" & tb_sprache.Text & "', '" & cb_FSK.Text & "', '" & cb_format.Text & "', '" & tb_preis.Text & "')"
    4. 'MsgBox(cmd.CommandText)
    5. anzahl = cmd.ExecuteNonQuery()
    6. If anzahl > 0 Then
    7. MsgBox("Es wurde ein Datensatz hinzugefügt")
    8. End If
    9. Catch ex As Exception
    10. MsgBox(ex.Message)
    11. End Try
    12. ConnADO.Close()


    nämlich ExecuteNonQuery: connection-eigenschaft wurde nicht initialisiert.....

    Peace

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

    Der Oberschnellmerker bist du auch nicht gerade, oder?

    Ist derselbe Fehler wie bei deiner Connection vom Anfang. Wenn du schon globale Variablen verwendest, solltest du dir vlt mal merken welche was macht. cmd = cmdADO ?
    also hier nochmal das ganze code von formular...

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ConnADO.ConnectionString = "Provider=SQLOLEDB; Data Source=.\SQLEXPRESS; Database=DVD-Datenbank; Trusted_Connection=Yes"
    3. ConnADO.Open()
    4. Me.RsADO = New ADODB.Recordset
    5. With Me.RsADO
    6. .CursorType = ADODB.CursorTypeEnum.adOpenKeyset
    7. .LockType = ADODB.LockTypeEnum.adLockOptimistic
    8. .let_Source("Select Max(DVD_ID) AS hoechste_DVDid from tbl_DVD")
    9. End With
    10. Me.RsADO.Open(, Me.ConnADO)
    11. anzahlid = Me.RsADO.Fields("hoechste_DVDid").Value
    12. anzahlid = anzahlid + 1
    13. lb_dvdid.Text = anzahlid
    14. RsADO.Close()
    15. ConnADO.Close()
    16. End Sub

    das funktioniert...... also wird in Label die gewünschte zahl angezeigt

    dann möcht ich speicher aber hab kA wie...

    VB.NET-Quellcode

    1. Try
    2. ConnADO.Open()
    3. CmdADO.CommandText = "Insert Into tbl_DVD (Name, Beschreibung, Erscheinungsdatum, DVD_Typ, Sprache, FSK, Format, Preis) Values ('" & tb_name.Text & "', '" & tb_beschreibung.Text & "', '" & tb_datum.Text & "', '" & cb_typ.Text & "', '" & tb_sprache.Text & "', '" & cb_FSK.Text & "', '" & cb_format.Text & "', '" & tb_preis.Text & "')"
    4. CmdADO.Execute.AddNew()
    5. MsgBox("Es wurde ein Datensatz hinzugefügt")
    6. Catch ex As Exception
    7. MsgBox(ex.Message)
    8. End Try
    9. ConnADO.Close()

    so gehts nicht =( und so auch nicht....

    VB.NET-Quellcode

    1. ConnADO.Open()
    2. neue_dvd = "Insert Into tbl_DVD (Name, Beschreibung, Erscheinungsdatum, DVD_Typ, Sprache, FSK, Format, Preis) Values ('" & tb_name.Text & "', '" & tb_beschreibung.Text & "', '" & tb_datum.Text & "', '" & cb_typ.Text & "', '" & tb_sprache.Text & "', '" & cb_FSK.Text & "', '" & cb_format.Text & "', '" & tb_preis.Text & "')"
    3. With Me.CmdADO
    4. .CommandText = neue_dvd
    5. .Execute(.CommandText)
    6. End With
    7. ConnADO.Close()


    bitte helft mir.... danke

    Peace

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

    Me not likes ADO. Me like OleDB ;)

    Mit OleDB sähe das ganze so aus:

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class OleDBSample
    3. Public Sub test()
    4. Try
    5. Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\hosting.mdb;User Id=admin;Password=;")
    6. cn.Open()
    7. Using cmd As New OleDbCommand
    8. cmd.Connection = cn
    9. cmd.CommandText = "INSERT INTO personen (Vorname, Nachname) VALUES (?, ?)"
    10. Dim pVor As New OleDbParameter
    11. pVor.Value = "Max"
    12. cmd.Parameters.Add(pVor)
    13. Dim pNach As New OleDbParameter
    14. pNach.Value = "Mustermann"
    15. cmd.Parameters.Add(pNach)
    16. Dim numrecs As Integer = cmd.ExecuteNonQuery()
    17. If numrecs = 1 Then
    18. MessageBox.Show("Datensatz hinzugefügt")
    19. Else
    20. MessageBox.Show("War wohl nix ...")
    21. End If
    22. cn.Close()
    23. End Using
    24. End Using
    25. Catch ex As Exception
    26. ' normalerweise mehr als nur ...
    27. MessageBox.Show(ex.Message)
    28. End Try
    29. End Sub
    30. End Class


    funzt problemlos ...