Fehler im Code?!

Angelika_25

Mitglied
Hallo, ich habe mit .NET einen SQL Befehl mit insert into geschrieben und irgend wo scheint da ein Fehler zu sein. Wenn ich den Button klicke, kommt folgender Fehler:
"Datentypen in Kriterienausdruck unverträglich"

Also in der Access Tabelle habe ich bei jedem Feldnamen "Text" und bei "UrlaubVom" und "UrlaubBis" habe ich als Format "Datum, lang", weil ich in meinem Formular ja einen DateTimePicker habe, der das Datum so anzeigt: z.B.: Montag, 21. Juli 2008.

Hier mein Code:
Code:
 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If Not Saveable() Then Return


        Try
            Con.Open()

            Dim cmd As OleDbCommand = Con.CreateCommand

            Dim INSERTString As String = _
            "INSERT INTO " & _
                "Drucktabelle " & _
                    "(Mitarbeitername, UrlaubVom, UrlaubBis, Urlaubstage, Urlaubsanspruch1, Urlaubsanspruch2, AbbauUeberstunden, AnzahlUeberstunden, UeberstundenTage, UebrigUeberstunden, VertretungNotwendig, Vertreter) " & _
            "VALUES " & _
                "(@Mitarbeitername, @UrlaubVom, @UrlaubBis, @Urlaubstage, @Urlaubsanspruch1, @Urlaubsanspruch2, @AbbauUeberstunden, @AnzahlUeberstunden, @UeberstundenTage, @UebrigUeberstunden, @VertretungNotwendig, @Vertreter)"

            cmd.CommandText = INSERTString



            cmd.Parameters.AddWithValue("@Mitarbeitername", cb_Name.Text)

            cmd.Parameters.AddWithValue("@UrlaubVom", DTP_Datum_Vom.Value)
            cmd.Parameters.AddWithValue("@UrlaubBis", DTP_Datum_Bis.Value)

            cmd.Parameters.AddWithValue("@Urlaubstage", txt_Tage.Text)
            cmd.Parameters.AddWithValue("@Urlaubsanspruch1", lbl_Urlaubstage.Text)
            cmd.Parameters.AddWithValue("@Urlaubsanspruch2", lbl_Urlaubstage2.Text)
            cmd.Parameters.AddWithValue("@AbbauUeberstunden", cb_Abbau.Text)
            cmd.Parameters.AddWithValue("@AnzahlUeberstunden", txt_Stunden.Text)
            cmd.Parameters.AddWithValue("@UeberstundenTage", lbl_Überstunden.Text)
            cmd.Parameters.AddWithValue("@UebrigUeberstunden", lbl_Resttage.Text)
            cmd.Parameters.AddWithValue("@VertretungNotwendig", cb_Vertretung.Text)
            cmd.Parameters.AddWithValue("@Vertreter", cb_Vertreter.Text)

            cmd.ExecuteNonQuery()


           
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            Con.Close()
        End Try
        Form2.Show()
    End Sub
Wo liegt hier denn der Fehler?

Liebe Grüße
 
Ehm, du gibst als Parameter überall den Wert von Text-Attributen (ich tipp mal auf Eingabeboxen) mit. Sind tatsächlich überall (z.B. Urlaubstage o. VertretungNotwendig, wo sich ja Zahlen bzw. Boolean anbieten würde) als Datentyp was Textartiges gegeben?

*edit*
Hm, was sind das alles denn für Elemente, von denen du da ausliest? Sind das denn (mal abgesehen von den beiden DateTimePickern) Textboxen?
 
Zuletzt bearbeitet:
Bei Access habe ich überall Text angegeben, ich hab gedacht das geht, weil ich ja nicht mit den Zahlen rechnen muss.
-"Mitarbeitername" ist eine ComboBox, bei der ein Name ausgewählt wird
-"UrlaubVom" ist ein DateTimePicker (Datumsformat Montag, 11. Juni 2007)
-"UrlaubBis" ist ein DateTimePicker (Datumsformat Montag, 11. Juni 2007)
-"Urlaubstage" ist eine Textbox, in der eine Zahl eingetragen wird
-"Urlaubsanspruch1" ist ein Label, das mit einer Zahl gefüllt wird
-"Urlaubsanspruch2" ist ein Label, das mit einer Zahl gefüllt wird
-"AbbauUeberstunden" ist eine ComboBox, die entweder mit "Ja" oder "Nein" gefüllt wird
-"AnzahlUeberstunden" ist eine Textbox, die mit einer Zahl beschrieben wird
-"UeberstundenTage" ist ein Label, das auch mit einer Zahl gefüllt wird
-"UebrigUeberstunden" ist ein Label, das mit Zahlen gefüllt wird
-"VertretungNotwendig" ist eine ComboBox, die entweder mit "Ja" oder "Nein" gefüllt wird
-"Vertreter" ist eine ComboBox, die mit einem Namen gefüllt wird

Was müsste ich denn ändern? Einfach in Access die Felder ändern, in denen Zahlen stehen und Boolean?

Liebe Grüße
 
Naja, der erste Schritt wäre, zu überprüfen, ob alle diese Elemente (DropDown-Boxen etc.) einen String zurückliefern. Wenn ja, ist das tricky, da das dann in die Text-Spalten reinpassen müsste. Sieht aber erst mal so aus, ich würd da aber speziell die DropDown-Boxen erst mal überprüfen.
*edit*
Aber wenn die Datentypen tatsächlich nicht zueinanderpassen, müsstest du halt entsprechend in Access das ganze ändern oder bei der Übergabe der Parameter im SQLCommand entsprechend auf den Datentyp achten und evt. eine Typkonvertierung vornehmen.
*edit2*
Evt. auch mal im Debug gucken, ob das Exception-Objekt nähere Informationen enthält, was denn da nicht zueinander passt...Ich würd mir da aber keine großen Hoffnungen machen, ich meine, mich zu erinnern, dass bei der Exception auch mal wieder ein paar Informationen zu wenig drin stehen.
 
Zuletzt bearbeitet:
Ich bin noch eine Anfängerin, was die ganze Programmierung angeht. Deswegen wahrscheinlich jetzt die "blöden" Fragen. Ich soll überprüfen, ob ein String zurückgeliefert wird? Was meinst du genau damit?
Soll ich das jetzt in Access ändern?
 
:-) Du entwickelst mit Visual Studio, oder? Dann einfach mal die Maus über so ein cb_Vertretung.Text halten. Dort müsste ein Fenster aufgehen, der Details zu dieser Eigenschaft anzeigt. Als erstes müsste da der Datentyp stehen. Wenn dort String steht, stellt das einen Text dar, der kompatibel zu dem Datentyp Text in Access ist. Wenn dort nicht String steht, wird das wahrscheinlich nicht funktionieren. In dem Fall musst du etwas ändern, entweder den Datentyp in Access oder im Programm (z.B. mit der Methode .ToString(), die jedes Objekt hat und das ganze in einen Text umwandelt).
 
Ja in Visual Studio. Wenn ich mit der Maus z.B. über eine ComboBox fahre, dann passiert gar nichts., Wenn ich drauf klicke, dann öffnen sich die Eigenschaften. Dort steht weder was von Datentyp oder sonstiges. Soll ich jetzt einfach in Access die Felder ändern, bei denen eine Zahl eingegeben wird?
 
Hm, unten mal ein Bild, das müsste passieren. Der Datentyp, der da markiert ist, ist in diesem Fall String. Wenn Zahlen in einem String gespeichert werden, passt das zu einem Text-Datentyp aus der Access-Datenbank. Du musst überprüfen, ob die in diesem gelbem Kästchen angezeigten Datentypen zu der in der Access-Datenbank passen und dann ggf. anpassen.
*edit*
Folgende Tabelle gibt dabei an, wie die Datentypen von Access und .Net zusammenpassen:
http://support.microsoft.com/kb/320435/de
 

Anhänge

  • BeispielBild.jpg
    BeispielBild.jpg
    76 KB · Aufrufe: 11
Zuletzt bearbeitet:
Ach, so meintest du das....

Also ich hab jetzt mal bspw. bei cb_Name geschaut, da kommt ein Fenster mit folgendem Text:
Code:
Friend Dim WithEvents cb_Name As System.Windows.Forms.ComboBox

Das steht bei allen Elementen so da....



Liebe Grüße
 
Okay, nahe dran. :-) Was wir jetzt brauchen, ist nicht der Datentyp von der ComboBox, sondern von der Eigenschaft Text (objComboBox.Text). Dabei geht es speziell um die Eigenschaft Text und welchen Datentypn das gute Stück hat. Daher einmal versuchen, die gelbe Box, die bei mir da gekommen ist, ebenfalls aufzurufen.
Dafür musst du halt die Maus über die Zeile
Code:
cmd.Parameters.AddWithValue("@VertretungNotwendig", cb_Vertretung.Text)
halten, und zwar über das Text. Dann sollte diese gelbe Hinweisbox kommen. Und das erste Wort zeigt an, was für ein Datentyp das ist. Dies muss (entsprechend der Tabelle aus dem Link vorhin) dem Datentyp in Access entsprechen, der für die jeweilige Spalte gilt.
 
Zurück