Probleme bei der Verbindung zur Access DB

  • VB.NET

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Panter.

    Probleme bei der Verbindung zur Access DB

    Hallo zusammen,

    ich habe probleme mit meinem Code,
    könnte da bitte mal jemand drüber schauen und mir weiterhelfen.
    die eigegebenen Daten kommen nicht in der DB an.

    Ich erhalte folgenden Fehler: Syntaxfehler (fehlender Operator) in Abfrageausdruck
    die DB heißt test und die Tabelle in der DB heißt auch test.

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Form1
    3. Private Sub Btn()
    4. Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\matkroll\Desktop\test.accdb")
    5. Dim name1 As String = Environment.UserName
    6. Dim wert As String = TextBox1.Text
    7. Dim Zeitstempel As System.DateTime
    8. con.Open()
    9. Dim s As String = "INSERT INTO test('ID','test','Datum') Values (" & name1 & "," & wert & "," & Zeitstempel & ")"
    10. Dim cmd As New OleDbCommand(s, con)
    11. cmd.ExecuteNonQuery()
    12. con.Close()
    13. Label2.Text = TextBox1.Text
    14. TextBox1.Clear()
    15. End Sub
    16. Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    17. If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
    18. e.Handled = True
    19. Call Btn()
    20. End If
    21. End Sub
    22. End Class
    Gruß Matze 8-)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „matze.tele“ ()

    Verwende DB-Parameter. Eventuell löst sich das Problem damit von selbst
    Tipp & Trick: DbParameter

    EDIT: Gerade noch gesehen: "Zeitstempel" bekommt keinen Wert zugewiesen und wird nur deklariert.

    LG
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Da Date/DateTime aber ein Wertetyp ist, bekommt es eh 01.01.0001 (?) von Haus aus zugewiesen.
    Als SQL-Laie vermute ich eher, dass der SQL-Teil (" & name1 & "," & wert & "," & Zeitstempel & ")" falsch ist, weil hier um die Werte herum die Hochkommata ' fehlen oder dass das Datum in einem SQL-kompatiblen Stringformat vorliegen muss.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Ich habe die SQL Anweisung geändert und mal zum testen den Zeitstempel raus gelassen,
    jetzt wird mir ein anderer Fehler angezeigt siehe Bild,
    der Feldname ist aber richtig, verstehe ich nicht.

    @fichz
    Kannst du mir bei den DB-Parametern bitte helfen, habe keinen Plan davon.
    Bilder
    • 2023-03-16 12_19_30-.png

      38,24 kB, 1.150×252, 109 mal angesehen
    Gruß Matze 8-)
    Ok, Parameter sind vergeben, aber trotz allem hab ich noch das Problem mit dem unbekannten Feldnamen. (siehe Bild im letzten Post)

    Edit: die Feldnamen müssen mit eckiger Klammer geschrieben werden, hatte ich nicht so wahrgenommen.
    den Benutzernamen bekomme ich jetzt in der Access angezeigt, leider aber nicht den Wert der eingegeben wurde und die aktuelle Zeit.
    Gruß Matze 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „matze.tele“ ()

    Hallo

    Ich habe mal ein Beispiel, dass bei einer Access Datenbank funktioniert. Ich hoffe das bringt Dich weiter:

    VB.NET-Quellcode

    1. sql = "PARAMETERS @MANr Long, @Tag DateTime, @Kompensation Long, @Vorholzeit Long, @Ferien Long;" &
    2. " INSERT INTO MA_Tag ( [Saldo],[MANr], [Datum],[Kompensation],[Vorholzeit],[Ferien],[Str_Stempelzeit] ) " &
    3. "VALUES( true ,@MANr, @Tag, @Kompensation, @Vorholzeit, @Ferien, 'Saldovortrag')"
    4. With sql_command
    5. sql_command.CommandText = sql
    6. .Parameters.Clear()
    7. .Parameters.Add("@MANr", OleDbType.Integer).Value = MaNr
    8. .Parameters.Add("@Tag", OleDbType.Date).Value = Saldo_Datum
    9. .Parameters.Add("@Kompensation", OleDbType.Integer).Value = S_KPZ + S_VZ
    10. .Parameters.Add("@Vorholzeit", OleDbType.Integer).Value = 0
    11. .Parameters.Add("@Ferien", OleDbType.Integer).Value = S_F
    12. '.Parameters.Add("@Datum_von", OleDbType.Date).Value = Format(Datum_von, "\#yyyy\-MM\-dd 00\:00\:00\#") ' Beispiel mit Datum
    13. End With
    14. sql_command.ExecuteNonQuery()


    Lg Panter
    hier ein Bild der Tabelle und die Entwurfsansicht

    EDIT: das Datum wird jetzt auch übertragen, aber leider nur das Datum ohne die Zeit, ist sicher irgend eine Einstellung,

    ja, es funktionirt alles, das Format für "Now" sollte auch für die uhrzeit richtig angegeben werden.

    ich Danke für eure Unterstützung
    Bilder
    • 2023-03-16 12_19_30-.png

      4,52 kB, 304×145, 88 mal angesehen
    • 2023-03-17 09_08_56.png

      4,2 kB, 383×126, 89 mal angesehen
    Gruß Matze 8-)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „matze.tele“ ()

    hier nocheinmal der komplette Code von mir wie ich ihn für mich funktionstüchtig brauche, fals es jemanden iteressieren sollte.
    es ist sicher nicht die Beste Lösung, aber für mich reicht das so.
    Nehme aber gern Verbesserungsvorschläge an.

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Imports System.DateTime
    3. Public Class Form1
    4. Private Sub Btn()
    5. Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\matkroll\Desktop\test.accdb")
    6. Dim name1 As String = SystemInformation.UserName
    7. Dim wert As String = TextBox1.Text
    8. Dim Zeitstempel As Date = CDate(Format(Now, "yyyy.MM.dd hh:mm:ss")) ' <---------- hier kam "CDate" dazu
    9. con.Open()
    10. Dim s As String = "INSERT INTO test([MA],[Datum],[test]) Values ('" & name1 & "','" & Zeitstempel & "','" & wert & "')"
    11. Dim cmd As New OleDbCommand(s, con)
    12. With cmd.Parameters
    13. .Clear()
    14. .AddWithValue(name1, SystemInformation.UserName)
    15. .AddWithValue(wert, OleDbType.Integer).Value = TextBox1.Text
    16. .AddWithValue(Zeitstempel, OleDbType.Date).Value = Format(Now, "yyyy.MM.dd hh:mm:ss")
    17. End With
    18. cmd.ExecuteNonQuery()
    19. con.Close()
    20. Label2.Text = TextBox1.Text
    21. TextBox1.Clear()
    22. End Sub
    23. Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    24. If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
    25. e.Handled = True
    26. Call Btn()
    27. End If
    28. End Sub
    29. End Class
    Gruß Matze 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „matze.tele“ ()

    ich muss nochmal nachfragen, eine kleinigkeit funktioniert da leider noch nicht, ich bekomme folgenden Fehler
    Bilder
    • 2023-03-17 11_12_18-ePro - Schuhe.png

      44,28 kB, 438×409, 101 mal angesehen
    Gruß Matze 8-)
    Hallo Matze

    Ich habe deinen Code kurz bei mir getestet. Das Datum wird hier mit Uhrzeit übernommen.

    Bei Datum sieht das Format sehr speziell aus. Was hat du bei der Datenbank unter Allgemein Format und Eingabeformat gewählt? Falls etwas drin ist, nimm es mal weg (Bei deinem Bild 09_08_56.png) Datum auswählen und weiter unten sind die Einstellungen

    Ich würde übrigens noch den SQL ändern:

    VB.NET-Quellcode

    1. Dim s As String = "INSERT INTO test([MA],[Test],[Datum]) Values ( ?, ?, ?)"


    Wenn Du mit Paramter arbeitest, musst du den String nicht mit den Werten verketten. Bei Access wird ? verwendet. Wichtig die Reihenfolge muss dann stimmen, daher habe ich Test mit Datum vertauscht.

    LG Panter
    @Panter
    Datum soll auch mit Uhrzeit angezeigt werden.
    die Reihenfolge ist am ende egal in der Tabelle, solange die Daten erfasst und abgelegt werden.

    für mich wäre gerade interessant warum das Prog als Released mit dem Fehler Stopt, was läuft da falsch?
    Gruß Matze 8-)
    es ist der selbe Laptop, das Program soll vom Desktop aus geöffnet werden.
    Ich habe das Program auf diesem Laptop geschrieben, mit Unterstützung, und es soll auf mehreren Pc laufen können

    Ich nutze Office 365

    im Debug läuft alles ohne Probleme.

    Fehlt mir hier vllt ein bestimmter Verweis?
    Gruß Matze 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „matze.tele“ ()

    kann mir vllt noch jemand erkläre wie ich die Zeit im 24h Format angezeigt bekomme (in der Access aus Vb.Net)

    Edit: selbst drauf gekommen, einfach die Std in Großen Buchstaben angeben
    Format(Now, "yyyy.MM.dd HH:mm:ss")
    Gruß Matze 8-)
    Wenn du ein Datum absspeicherst brauchst du keine Formatierung. Post#11 verwendet AddWithValue auch ganz falsch. Probierma

    VB.NET-Quellcode

    1. Dim s As String = "INSERT INTO test([MA],[Datum],[test]) Values (?,?,?)"
    2. Dim cmd As New OleDbCommand(s, con)
    3. With cmd.Parameters
    4. .Clear()
    5. .AddWithValue("@p1", name1)
    6. .AddWithValue("@p2", TextBox1.Text)
    7. .AddWithValue("@p3", Date.Now)
    8. End With