Text aus Textbox in SQL-Tabelle Schreiben

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von raist10.

    Text aus Textbox in SQL-Tabelle Schreiben

    Hallo Leute,

    hab folgendes Problem: Ich habe 3 Textboxen die mit Hilfe eines Handscanner befüllt werden, nachdem die 3. Textbox befüllt wurde rufe ich ein Modul auf, das mir den Inhalt der Textboxen in eine SQL-Tabelle schreiben soll!
    Mein Code funktioniert aber leider nicht, es kommt die Fehlermeldung "3001, Die Argumente sind vom falschen Typ, oder liegen außerhalb des Gültigkeitsbereichs"

    VB.NET-Quellcode

    1. Module mdlupdateDB
    2. Public Sub updatedb()
    3. On Error GoTo ErrHandler
    4. Dim DbCon As ADODB.Connection
    5. Dim Rs As ADODB.Recordset
    6. Dim lRowX As Long
    7. FrmScan.Label4.Text = "Bitte Warten..."
    8. DbCon = New ADODB.Connection
    9. Rs = New ADODB.Recordset
    10. DbCon.ConnectionString = "Provider = sqloledb ;Data Source=trace-db\SIPLACE_2005EXPR ;Initial Catalog=Linie3 ;User ID=sa ;Password=MS128;"
    11. DbCon.Open()
    12. Rs.ActiveConnection = DbCon
    13. With Rs
    14. .CursorTypee = ADODB.CursorTypeEnum.adOpenKeyset
    15. .LockType = ADODB.LockTypeEnum.adLockOptimistic
    16. .CursorLocation = ADODB.CursorLocationEnum.adUseServer
    17. .Source = "SELECT * FROM Paste"
    18. .Open()
    19. .AddNew()
    20. .Fields("Time").Value = FormatDateTime(Now, DateFormat.GeneralDate)
    21. .Fields("Job").Value = FrmScan.TextBox1.Text
    22. .Fields("SolderingPaste").Value = FrmScan.TextBox2.Text
    23. .Fields("Charge").Value = FrmScan.TextBox3.Text
    24. .Update() 'Neuen Datensatz anlegen und Tabelle aktualisieren
    25. End With
    26. ErrHandler:
    27. If Err.Number <> 0 Then MsgBox("Fehler mit der Nummer " & Err.Number & " ist aufgetreten." & vbCrLf & "Beschreibung:" & vbCrLf & Err.Description)
    28. On Error Resume Next
    29. If Not Rs Is Nothing Then Rs.Close()
    30. If Not DbCon Is Nothing Then DbCon.Close()
    31. Rs = Nothing
    32. DbCon = Nothing
    33. FrmScan.Label4.Text = "Bitte Warten ......."
    34. End Sub
    35. End Module


    wer kann mir bitte helfen?
    Ähm - du kannst glaub nicht recht einschätzen, wie hilfreich meine Antwort ist. Das empfohlene Buch ist das beste mir bekannte. Und bewahrt dich auch davor, den ollen Kalauern von GalileoPress auf den Leim zu gehen.

    Deim Code nach zu urteilen verfügst du über kaum VB.Net-Kenntnisse, aber ohne gründliche Kenntnisse wirst du dich gnadenlos überfordern mit dem Versuch, eine Datenbank-Anwendung zu schreiben.
    Aber das steht auch in dem Link, deshalb habich ihn einfach kommentarlos eingepastet.

    ketzei schrieb:

    Hat jemand vielleicht ein hilfreiche Antwort?


    Nö ... aber einiges anzumerken. ^^

    Bei welcher Zeile tritt der Fehler überhaupt auf? Ist ja toll das man eine Fehlermeldung hat aber die kann sich bei Dir auf mehrere Stellen beziehen: Auf den Connection-String, auf das SQL-Statement mit dem Du die Connection öffnest oder auf eines der Fields.

    Sind also 6 Stellen wo dieser Fehler auftreten kann ... woher soll ein hilfsbereiter Forums-User nun wissen welche die richtige Stelle ist? ;)

    Den Connection-String kannst Du hier mit dieser Seite schnell prüfen: connectionstrings.com/

    Dort sind alle relevanten Connection-String Möglichkeiten aufgelistet, such Dir den raus den Du brauchst und gleich es mit Deinem String-Aufbau ab. Zumindest mir kommt es auf den ersten Blick so vor als wenn Du den Connection-String für eine OLEDB-Connection anwendest auf eine ODBC-Connection ... und das kann nicht funzen. ;)

    Und bitte ... VB.NEt hat so wunderschönes Error-Handling per Try-Catch und Du wendest diese völlig veraltete Form des Error-Handlings ala VBA an. Stell das doch mal um ... ist viel effektiver und die Meldungen sind viel informativer (sogar inklusive Zeilennummer ^^). ;)

    Gruß

    Rainer

    raist10 schrieb:

    Und bitte ... VB.NEt hat so wunderschönes Error-Handling per Try-Catch und Du wendest diese völlig veraltete Form des Error-Handlings ala VBA an. Stell das doch mal um ...

    Nanu?

    Neulich hattest du mich angenehm überrascht durch deine Zustimmung zu meiner Einlassung, dass Debuggen ohne TryCatch am einfachsten ist, weil die Fehlerbehandlung der IDE (CodeStopp, Zeilenmarkierung, Einsicht in jede Variable) ist schlicht unübertrefflich, wenn man debuggen will.

    Weil normalerweise finden Programmierer immer 1000 Gründe, warum sie unbedingt die Debug-Unterstützung der IDE per TryCatch deaktivieren müssen ;)

    ErfinderDesRades schrieb:

    Neulich hattest du mich angenehm überrascht durch deine Zustimmung zu meiner Einlassung, dass Debuggen ohne TryCatch am einfachsten ist, weil die Fehlerbehandlung der IDE (CodeStopp, Zeilenmarkierung, Einsicht in jede Variable) ist schlicht unübertrefflich, wenn man debuggen will.


    Hier geht es darum das der TE noch ein altes Error-Handling nutzt und die alte Variante der Fehlerinformation ausliest (On Error Goto ErrorHandler ... Err.Description) im Gegensatz dazu ist Try-Catch und die Ausgabe der Fehlerinformation des Exception-Objektes geradezu einen Revolution. ^^

    Und letztendlich geht es hier ja auch darum was wird später veröffentlicht ... so ein altes Handling oder das moderen Try-Catch-Hanling mit den deutlich informativeren Fehlermeldungen.

    ErfinderDesRades schrieb:

    Weil normalerweise finden Programmierer immer 1000 Gründe, warum sie unbedingt die Debug-Unterstützung der IDE per TryCatch deaktivieren müssen


    Richtig, solange man an einer Funktion rumbastelt ist es tatsächlich ohne Error-Handling (für einen Release muss dann natürlich ein Error-Handling implementiert werden, meistens/hauptsächlich aus Gründen der Information was beim User wirklich schief gelaufen ist und der Programmstabilität) sinniger da die Fehlermeldungen der IDE unter .NET ja wirklich Sinn machen, aber wie gesagt ... wird bei mir dauern bis das auch angekommen ist, dafür habe ich mich zu lange mit MS-Produkten und uninformativen Fehlermeldungen rumgeschlagen. *lach*

    Gruß

    Rainer
    Habs selber hinbekommen! Aber trotzdem Danke! Ich hab mir von Galileo Computing "Einstieg in Visual Basic 2010" durchgelesen! Aber na ja wollte ja nur ein paar Anregungen von euch, meinen Code zu verbessern bzw eine kleine Hilfestellung wo bei mir ein Fehler war!!!

    VB.NET-Quellcode

    1. Module mdlupdateDB
    2. Public Sub updatedb()
    3. On Error GoTo ErrHandler
    4. Dim DbCon As ADODB.Connection
    5. Dim Rs As ADODB.Recordset
    6. DbCon = New ADODB.Connection
    7. Rs = New ADODB.Recordset
    8. DbCon.ConnectionString = "Provider = sqloledb ;Data Source=trace-db\SIPLACE_2005EXPR ;Initial Catalog=Linie3 ;User ID=sa ;Password=MS128;"
    9. DbCon.Open()
    10. Rs.ActiveConnection = DbCon
    11. With Rs
    12. .Open("Paste", DbCon, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
    13. .AddNew()
    14. .Fields("Time").Value = FormatDateTime(Now, DateFormat.GeneralDate)
    15. .Fields("Job").Value = FrmScan.TextBox1.Text
    16. .Fields("SolderingPaste").Value = FrmScan.TextBox2.Text
    17. .Fields("Charge").Value = FrmScan.TextBox3.Text
    18. .Update() 'Neuen Datensatz anlegen und Tabelle aktualisieren
    19. End With
    20. ErrHandler:
    21. If Err.Number <> 0 Then MsgBox("Fehler mit der Nummer " & Err.Number & " ist aufgetreten." & vbCrLf & "Beschreibung:" & vbCrLf & Err.Description)
    22. On Error Resume Next
    23. If Not Rs Is Nothing Then Rs.Close()
    24. If Not DbCon Is Nothing Then DbCon.Close()
    25. Rs = Nothing
    26. DbCon = Nothing
    27. FrmScan.Label4.Text = "Bitte Warten ......."
    28. End Sub
    29. End Module

    ketzei schrieb:

    Aber na ja wollte ja nur ein paar Anregungen von euch, meinen Code zu verbessern ...


    Ehrlich ... ich wüsste echt nicht wo ich vor lauter Verbesserungen anfangen sollte. ;)

    Aber mal kurz: Du programmierst in VB.NET einer Programmiersprache die für OOP optimiert wurde. Das heisst genau das was Du da machst ist ein absolutes NoGo ... einfach alles in einem prozeduralen Aufbau runter juckeln und gut ist.

    Willst Du jedes mal wenn Du auf die DB zugreifst die Connection-Erstellung neu programmieren? Die Antwort kann nur NEIN heissen.

    Also setzt Dich mal mal mit OOP und passend dazu Klassenerstellung auseinander und kapsel den DB-Zugriff sauber in einer eigenen Klasse.

    Wenn Du das hast machen wir dann weiter mit den restlichen Verbesserungen. ^^

    Gruß

    Rainer