Zum Inhalt springen

Daten von VB.NET in Access Datenbank schreiben


Empfohlene Beiträge

Geschrieben (bearbeitet)

Guten Morgen zusammen!

Ich verzweifle und hoffe das ihr mir helfen könnt :)

Und zwar habe ich eine Windows Form in VB.NET (Visual Studio 2010) in die ich verschiedene Daten schreibe (Textbox, Checkbox und RichTextBox).

Diese Daten sollten daraufhin in eine Access 2010 Datenbank geschrieben werden.

Habe nun schon mehrere Befehle zum befüllen der Datenbank ausprobiert aber habe immer die gleichen Fehler, komme jedoch nicht auf die Lösung des Problems:

Fehlermeldung:

Invalid SQL statement; expected 'Delete', 'Insert', 'Procedure', 'Selet', or 'Update'.

1. Versuch:


Dim conn As New OleDbConnection("Provider =" & "Microsoft.ACE.OLEDB.12.0;Data Source = P:\garantien.accdb")

            Dim sqlString As String = "INSERT INTO Erfassung (Bearbeiter, Fehlerbeschreibung, Erledigt)" & "VALUES ('" & Me.txtZeichen.Text & "', '" & Me.rtxFehlerbeschreibung.Text & "', '" & Me.chxErledigt.Checked = True & "')"

            Dim cmd As New OleDbCommand(sqlString, conn)


            Try

                conn.Open()

                cmd.ExecuteNonQuery()

            Catch ex As Exception

                MessageBox.Show(ex.Message)

            End Try

            conn.Close()

            MessageBox.Show("Neuer Datensatz eingetragen")

2. Versuch:

Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=P:\garantien.accdb")

            Dim cmd As New OleDb.OleDbCommand

            cmd.Connection = con

            cmd.CommandText = "INSERT INTO Erfassung (Bearbeiter, Fehlerbeschreibung, Erledigt) VALUES ('" & Me.txtZeichen.Text & "', '" & Me.rtxFehlerbeschreibung.Text & "', '" & Me.chxErledigt.Checked = True & "')"



            Dim data As New OleDb.OleDbDataAdapter(cmd)

            Dim ds As New DataSet


            data.Fill(ds)


            MsgBox("Gespeichert")

            Me.Close()

Zuoberst habe ich noch folgende Imports durchgeführt:

Imports System.Data.OleDb

Imports System.Data.SqlClient

Imports System.Data

Ich hoffe echt ihr könnt mir helfen. Es wird sicher nur wieder ein kleiner Fehler sein aber ich seh ihn :( :upps

EDIT:

Uups hab grad gesehen das es hier in eigenes Forum für .NET gibt. Kann man das noch dahin verschieben?

Bearbeitet von Chlochou
Geschrieben

Was spricht dagegen ein Access Formular zu verwenden? Ansonsten kann ich nur davon abraten Access zu nutzen.

Wenn du es in .Net machen willst nimm eine ordentliche Datenbank (MySQL, MSSQL, Postgres, Oracle) oder falls es eine Single-User Anwendung ist nimm eine embedded DB.

Geschrieben

Hm dagegen? Es sollte so gemacht werden damit ich was lerne und damit ich etwas zu programmieren habe ;)

Es ist einfach so das es eine interne Applikation werden sollte worauf ca. 4 Leute Zugriff haben (lokal installiert). Mit der Software kann man neue Garantien von Geräten eintragen, Garantiefälle auslösen, Suchen und ähnliches.

Das komische ist eben das ich den genau gleichen Code in einem anderen Projekt verwendet habe (Einfach andere Übergabe Texte) und es da funktioniert hat :(

Die Verbindung zur Datenbank funktioniert.

Geschrieben

Natürlich habe ich nichts dagegen. Für das Szenario ist Access allerdings trotzdem ungünstig, da es eine Single-User Datenbank ist (vllt haben sie es bei 2010 endlich geändert - aber ich bezweifel es). Sprich: Greift jemand drauf zu ist es für die anderen gesperrt. Bei 4 Leuten wohl vernachlässigbar aber sollte man trotzdem beachten.

Zum lernen gehört aber nicht nur das programmieren, sondern auch das konzipieren. Meines Erachtens sogar der wichtigere Part.

Lass dir das erstellte Statement aus der Variable komplett ausgeben. Kopier es in den Access SQL Editor und er sollte dir eine genauere Fehlermeldung geben. Ansonsten gib uns das generierte Statement. Im Code finde ich keinen Fehler. Könnte höchstens an '' oder "" liegen.

Geschrieben

Hm klar. Es ist eben so das theoretisch wirklich nur jmd drauf sein sollte. Ist es denn möglich es auch relativ simpel mit MySQL oder so zu lösen? Mit MySQL hab ich noch recht wenig Erfahrung, kann da nur eben Datenbanken erfassen etc.

Und die Verbindung ist da auch wieder so "kompliziert"?

Geschrieben (bearbeitet)

Imports MySql

Imports MySql.Data

Imports MySql.Data.MySqlClient


'...


Dim conn As New MySqlConnection

Dim myConnectionString As String

myConnectionString = "server=host;uid=user;pwd=pw;database=db; "

conn.ConnectionString = myConnectionString

Try

conn.Open()

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

conn.close

Quelle: http://www.vb-paradise.de/allgemeines/tipps-tricks-und-tutorials/datenbanken/6300-mysql-datenbanken-mit-vb-net-vb2005-vb2008/

Würde fast sagen es ist leichter als zu einer Access DB. Das arbeiten mit MySQL ist ähnlich wie bei Access, da die "Datenbanksprache" bei allen gängigen Datenbank fast identisch ist.

Bearbeitet von trollr
Geschrieben

okay.. jetzt schäm ich mich grad ein wenig vor euch :floet:

Mein Fehler liegt bei der Checkbox..

Hab jetzt alles nur mit textbox und RichTextBox getestet -> Wunderbare Daten in meiner DB.. Also muss wohl was an meiner Checkbox nicht passen

Tut mir echt verdammt Leid das ich euch damit belästigt hab.

Aber kannst du mir noch dabei helfen? Ich hab ne normale Checkbox die bei mir chxErledigt heisst. In der Access Datenbank hab ich Wahr oder Falsch genommen. Wenn die Checkbox angehäckelt ist, dann ist der Fall erledigt, sonst eben nicht. Hab mal zur Übersicht die Textboxen etc. rausgenommen..

Nun mach ich den Insert so:


Dim sqlString As String = "INSERT INTO Erfassung (Erledigt)" & "VALUES ('" & chxErledigt.Checked & "')"

Dann kommt die Fehlermeldung:

Data type mismatch in criteria expression

Geschrieben (bearbeitet)

 Me.chxErledigt.Checked = True
und
Me.chxErledigt.Checked 

sollte eigentlich beides den selben Bool Wert ergeben.

Das erste ist ne Expression, aber Wert ist der gleiche.

Ich würd jetzt mal ungesehen, ungestestet, raten (educated guess) dass der OLEDB Treiber das nicht sauber zu Access Boolean übersetzt. In Access wäre checkbox.checked ein -1 statt einer 1...

Offen gesagt, bevor ich freiwillig Access verwend, parse und schreib ich mir XML.... selbst das ist imo besser als Access.

Ps.: Schäm dich nich, wirklich nich. Da gabs schon GANZ andere Fragen.

Gruß

Sven

Bearbeitet von streffin
Geschrieben

 

Me.chxErledigt.Checked = True

Also wenn ich das nehme kommt wieder folgender Fehler: Invalid SQL statement; expected Delete, insert, procedure, select or update und

Me.chxErledigt.Checked

Und hier bekomme ich wieder den Fehler:

Data type mismatch in criteria expression

Geschrieben

Hallo

so wie es aussieht weißt du deinem Boolean in der Access- DB einen String zu

Dein Code


Dim sqlString As String = "INSERT INTO Erfassung (Erledigt)" & "VALUES ([COLOR="red"]'[/COLOR]" & chxErledigt.Checked & "[COLOR="red"]'[/COLOR])"

So denke ich sollte es gehen Code

Dim sqlString As String = "INSERT INTO Erfassung (Erledigt)" & "VALUES (" & chxErledigt.Checked & ")"

Und schämen braucht man sich nie, man sieht ja, dass du dir schon vorab deine gedanken gemacht hast, HILFE bekommt man in diesem Fall hier eigentlich immer.

Gruß Hans-Jörg

Geschrieben

Wooow danke viel viel mals!! Es funktioniert nun endlich :D

Was so ein doofes Hochkomma nicht alles anrichten kann :floet:

Da ist bei mir noch eine Frage aufgetaucht.

Und zwar sind das ja eig. SQL Statements, oder?

Jetzt wäre es doch möglich eig. den Code zu "kopieren" und einfach statt Insert into eine Suche daraus zu generieren (Select * from..)?

Geschrieben

Hallo

ja das sind SQL- Statements und man könnte diese entsprechend anpassen und alle möglichen SQL- Statements draus "basteln".

Ich würde dir aber empfehlen die SQL- Statements mit PARAMETERN zusammen zu bauen, das erhöht die Leserlichkeit, ich weiß aber nicht ob ACCESS das unterstützt.


Dim sqlString As String = "INSERT INTO Erfassung (Erledigt) VALUES ([COLOR="red"]@WERT[/COLOR])"

Dim cmd As New OleDbCommand(sqlString, conn)

cmd.Parameters.AddWithValue("[COLOR="red"]@Wert[/COLOR]", [COLOR="blue"]SqlDbType.Bit[/COLOR]).Value = chxErledigt.Checked

Die rote Markierung muss jeweils Identische sein, soll heißen wenn du mehrere Parameter brauchst einfach immer unterschiedlichen Namen geben

Die blaue Markierung musst du vielleicht an ACCESS anpassen.

Wie du auch siehst, ist der SQL- String komplett ein String ohne "&" auch die ' brauchst nicht setzen da der TYP mitgegeben wird.

Viel Spass beim ausprobieren

Gruß Hans-Jörg

Geschrieben

Ah danke dann werde ich das so versuchen. Und bei dem @Wert kann ich auch eine Textbox eintragen?

Mir ist nämlich eingefallen das ich auch ein Formular habe bei dem ich auslesen muss mit einem DatagridView. Da müssen jedoch abfragen gemacht werden

Einfache Abfragen wie Select Datum, Verfasser from Erfassung where Verfasser = txtVerfasser.Text geht nämlich auch nicht :(

Mit dem Abfragen Generator kann ich zwar alles rausfiltern aber keinen Textbox Wert vergleichen.

Schon jetzt Danke für die vielen Tipps und Lösungen :) Galileo Openbook hilft eben doch nicht überall ;)

Geschrieben

Welcher Datentyp benutzt wird definierst du ja in unten angegebenen Code- Teil, kann also alles sein, also auch txtVerfasser.Text


cmd.Parameters.AddWithValue("@Wert", [COLOR="red"]SqlDbType.Bit[/COLOR]).Value = <Wert ensprechend dem Datentyp>

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...