Insert Access (Boolean) - via OLEDB

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von tomvb.

    Insert Access (Boolean) - via OLEDB

    Hallo Leute,

    ich entwickele gerade eine Quiz-Anwendung, der eine Access DB zugrunde liegt.
    Wenn ich mittels OLEDB-Command ein INSERT durchführe dann gibt mir ExecuteNonQuery zwar 1 zurück, aber die Tabelle hat keine neue Zeile.
    Wenn ich nun einen Breakpoint setze mir den SQL-String herauskopiere, ihn direkt in Access in eine Abfrage schreibe und diese ausführe ist die neue Zeile da.

    Könnt ihr mir sagen woran das liegt ? ?(

    VB.NET-Quellcode

    1. Private Sub InsertErgebnis(Richtig As Boolean)
    2. Dim Sqlconn As OleDbConnection = New OleDbConnection(My.Settings.QuizzConnection.ToString())
    3. Dim SqlStr As String = ""
    4. Dim Sqlcmd As New OleDbCommand(SqlStr, Sqlconn)
    5. Try
    6. Sqlconn.Open()
    7. SqlStr = "INSERT INTO t_Ergebnis (Schueler_ID, Session_ID, Fragen_ID, Richtig) " &
    8. "VALUES (" & UserID & ", " & SessionID & ", " & Me.lblFrageID.Text & " , " & CInt(Richtig) & ")"
    9. Sqlcmd = New OleDbCommand(SqlStr, Sqlconn)
    10. Dim AnzahlDS As Integer = Sqlcmd.ExecuteNonQuery()
    11. If AnzahlDS = 0 Then MessageBox.Show("Fehler beim Eintragen des Ergebnisses", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    12. Catch ex As Exception
    13. MessageBox.Show("Fehler: " & ex.Message.ToString() & vbNewLine & ex.InnerException.ToString())
    14. Finally
    15. If Sqlconn.State <> ConnectionState.Closed Then Sqlconn.Close()
    16. Sqlcmd.Dispose()
    17. Sqlconn.Dispose()
    18. End Try
    19. End Sub


    Vielen Dank für eure Mühe :)

    Gruß

    Schnickalodeon

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

    ​Access Anwendung
    || ... Nimm doch lieber WPF oder greif zu Windows Forms, aber wie du willst.

    ​Wenn ich mittels OLEDB-Command ein INSERT durchführe dann gibt mir ExecuteNonQuery zwar 1 zurück, aber die Tabelle hat keine neue Zeile. Wenn ich nun einen Breakpoint setze mir den SQL-String herauskopiere, ihn direkt in Access in eine Abfrage schreibe und diese ausführe ist die neue Zeile da.
    Ich verstehe das Problem nicht. Erst sagst du, die neue Zeile fehlt und dann wie du es wieder löst? Das kommt mir etwas merkwürdig vor...

    Naja, ich gebe mein bestes. Grüße, ExteNesia.de
    Nimm doch lieber WPF oder greif zu Windows Forms, aber wie du willst.


    Ich nutze WinForms. Das BackEnd ist nur Access. - Du hast Recht! Access Anwendung war blöd beschrieben (mea culpa) ^^

    ​Ich verstehe das Problem nicht. Erst sagst du, die neue Zeile fehlt und dann wie du es wieder löst? Das kommt mir etwas merkwürdig vor...


    Das Einfügen der Zeile über die Access Abfrage in Access direkt, war nur zur Überprüfung, ob mein SQL-Query stimmt

    Schnickalodeon schrieb:

    ich entwickele gerade eine Quiz-Anwendung, der eine Access DB zugrunde liegt.
    Ich würde sehr empfehlen, erstmal Datenmodellierung und Databinding zu erlernen - eine Datenbank kann man später immer noch aufsetzen (wird aber für ein Quiz nicht nötig sein).

    Also wie sieht dein Datenmodell aus - welche Tabellen gibt es, und in welchen Relationen stehen die zueinander?
    Mach am besten einen Screenshot von deim ER-Diagramm und hänge hier an, mit der Forum-Datei-Anhangs-Funktion, die man bei "erweiterte Antwort" hat.

    Weil das Datenmodell ist die erste Frage, die man an eine Datenverarbeitung stellt, noch bevor man die erste Zeile Code geschrieben, oder den ersten Button aufs Form gezogen hat.

    Falls dir Datenmodell, Databinding, ER-Diagramm nicht ganz geläufig sind, hier Artikel-Serie (3 Artikel) dazu: codeproject.com/Articles/1030969/Relational-Datamodel
    Vielen Dank für die Tipps und den Link :)

    Anbei kommt hier eine .png mit den Beziehungen meiner Tabelle.

    Vielleicht kann mir ja damit jemand sagen, wie ich mein Problem lösen kann
    Bilder
    • Beziehungen.PNG

      67,54 kB, 1.380×780, 166 mal angesehen
    mir scheint, da sind zuviele Relationen:
    Schueler ist ja schon Session übergeordnet, welche wiederum SchuelerFragen übergeordnet ist.
    Da muss man jetzt nicht noch eine zusätzliche Relation Schueler->SchuelerFrage einbasteln, denn Schueler->Session->SchuelerFrage ist ja schon eindeutig.
    Und Ergebnis ist ganz eigentümlich verdrahtet:
    Wieso kann eine Frage mehrere Ergebnisse haben?
    Wieso hat ein Ergebnis mehrere Schueler?
    Wieso hat ein Ergebnis mehrere Sessions?

    In meiner Welt ist ein Ergebnis überhaupt keine Entität, sondern die Session-Entität hätte eine Punktzahl als Integer, und das wäre das Ergebnis der Session.

    Siehst du - für genau solche Sachen rate ich sehr davon ab, mit der Datenbank die Tür ins Haus zu schmeissen.
    Erstmal ohne Db entwickeln - datasetOnly - das ist reichlich schwierig genug.