KriZa Geschrieben 16. Juli 2008 Geschrieben 16. Juli 2008 Hallo, ich habe folgenden Code: Dim dt_antragsteller As DataTable Dim da_antragsteller As MySqlDataAdapter Dim cb_antragsteller As MySqlCommandBuilder Dim bs_antragsteller As New BindingSource dt_antragsteller = New DataTable da_antragsteller = New MySqlDataAdapter("SELECT * FROM [...]", conn) da_antragsteller.Fill(dt_antragsteller) cb_antragsteller = New MySqlCommandBuilder(da_antragsteller) bs_antragsteller.DataSource = dt_antragsteller My.Forms.Formular.PLZ.DataBindings.Add(New Binding("Text", bs_antragsteller, "PLZ")) My.Forms.Formular.Geb.DataBindings.Add(New Binding("Text", bs_antragsteller, "Geburtsdatum")) Problem ist folgendes: Ich rufe die Daten in die BS und sie werden auch im Formular angezeigt. Versuche ich jedoch das Geburtsdatum im Formular zu ändern, schreibt er beim verlassen des Textfeldes wieder das alte Datum rein. Das passiert mir aber NUR in Feldern die in der MySQL-DB als 'Date' deklariert sind. Text und Zahlen gehen einwandfrei. Komisch ist, dass es direkt beim verlassen des Feldes passiert. Ich kann ausschließen, dass ein Handle dieses Ereignis verursacht. Ich weiß grad nicht weiter. Mögliche Werte für BS sin ja: "Text" oder "SelectedValue". Ich habe auch schon Masked Textboxes oder normale versucht. Mit Hoffnung auf Hilfe! Dank KriZa Zitieren
Argbeil Geschrieben 16. Juli 2008 Geschrieben 16. Juli 2008 Ich vermute das du sowas wie 12.01.2007 eingibst, er aber sowas wie 2007-01-01 12:00:00 erwartet. Beim Databinding gibt es dann eine Exception. Versuch mal den String aus der Textbox zu einem Datetime Objekt zu casten und dann in die Spalte zu schreiben, wenn es dann geht musst du mal gucken wie man die Konvertierung in das Databinding hängt. Zitieren
KriZa Geschrieben 16. Juli 2008 Autor Geschrieben 16. Juli 2008 ich habe schon versucht über dt_antragsteller.Rows(0)("Geburtsdatum") = "1990-08-22" oder dt_antragsteller.Rows(0)("Geburtsdatum") = "1990-08-22 00:00:00" was anderes direkt in den datatable zu schreiben, aber da meckert er auch. Fehlermeldung: Der Typ des Werts stimmt nicht mit dem Spaltentyp überein<1990-08-22> konnte nicht in der Geburtsdatum-Spalte gespeichert werden. Erwarteter Typ: MySqlDateTime. wie aber weise ich einem string den MySQLDateTime Typ zu. den gibt es ja nun mal nicht in VB. CType(x, MySQLDateTime) ist ja falsch, da MySQLDateTime nicht als gültiger Typ erkannt wird. auch folgendes geht nicht: Dim x As Date = "1990-08-05 00:00:00" dt_antragsteller.Rows(0)("Geburtsdatum") = x geht auch nicht... die Frage ist dein "sowas wie"... aber was genau? Zitieren
HJST1979 Geschrieben 16. Juli 2008 Geschrieben 16. Juli 2008 Klingt jetzt vielleicht blöde, aber ich lasse dies gleich weg, benutze in keiner DB das Date- feld. Sondern ein 10stelliges "VARCHAR" feld. Damit hab ich bisher niee Probleme gehabt. Ist zwar auch nicht die "saubere Englische Art" aber es funktioniert :-) Und wennst es dann auch noch umdrehst Also YYYY-MM-TT dann ist auch die Sortierung per SQL kein Problem mehr. Gruß Hans-Jörg Zitieren
KriZa Geschrieben 16. Juli 2008 Autor Geschrieben 16. Juli 2008 Wäre eine Idee wert! nur bekomm ich dann nicht probleme mit meiner binding - geschichte? mhh. mal nachdenken. Dank dir erstmal!!! Zitieren
HJST1979 Geschrieben 17. Juli 2008 Geschrieben 17. Juli 2008 Kommt drauf an ob du ein Kalenderelement hernimmst oder nicht. Auch hier nehme ich gerade beim Geburtsdatum KEIN Kalenderfeld. Ein Kalenderfeld beim Geburtsdatum halte ich persönlich auch nicht für sinnvoll. Da musste mehr klicken als wennst es gleich richtig reinschreibst. Du kannst ja beim verlassen des feldes dir eine eigene Funktion schreiben, die prüft, ob nun ein Datum eingetragen wurde oder nur unsinn. Muss aber auch zugeben, dass ich nie mit gebundenen Feldern arbeite. Zitieren
KriZa Geschrieben 17. Juli 2008 Autor Geschrieben 17. Juli 2008 Hab mir das gestern nochmal durch den Kopf gehen lassen! Ursache des Problems ist ja das 'Allow Zero DateTime' im Connection String. Schalte ich es auf True funktionieren die Abfragen, aber das DatumsBinding nicht. Schalte ich auf False funktionieren die Abfragen nicht, weil ich auch nullwerte in der DB habe. Diese Nullwerte will ich zwingend nicht umgehen, da es ein Kundenbearbeitungsprogramm ist und, wenn Datumsangaben nicht gemacht sind ich kein 1.1.1901 lesen will. Das Binding wäre mir einerseits schon wichtig, da es mir die UPDATE funktion erspart. weiterhin ist es einfach nur komfortabel (bis auf die Datumsangaben...). @HJST1979: Die idee mit dem Varchar hat folgenden Nachteil: wenn ich ein Datagridview damit fülle sehe ich das 'Datum' in der YYYY-MM-DD Schreibweise. Das will ich aber nicht. Ich brauche das alte deutsche Format DD.MM.YYYY Wie bekomme ich dann die Spalte in dieses Format? kann ich sie nach dem befüllen des Datagridview ändern? ich weiß, dass ich die datatable nicht verändern kann, nachdem ich werte befüllt habe. ach das ist doch alles sinnlos. mir fehlt die eingebung. ein verzweifelter... Zitieren
KriZa Geschrieben 17. Juli 2008 Autor Geschrieben 17. Juli 2008 einzige Idee ist es jetzt, die Bindung aller Datumsfelder aufzuheben. Allerdings funktioniert ja die aktualisierung der datatable nicht. ich bekomme keine wete in die hinein! was mache ich da falsch? dt_antragsteller.Rows(0)("Geburtsdatum") = "1990-08-22" oder dt_antragsteller.Rows(0)("Geburtsdatum") = "1990-08-22 00:00:00" geben ja fehler aus Zitieren
HJST1979 Geschrieben 17. Juli 2008 Geschrieben 17. Juli 2008 @HJST1979: Die idee mit dem Varchar hat folgenden Nachteil: wenn ich ein Datagridview damit fülle sehe ich das 'Datum' in der YYYY-MM-DD Schreibweise. Das will ich aber nicht. Ich brauche das alte deutsche Format DD.MM.YYYY Wie bekomme ich dann die Spalte in dieses Format? kann ich sie nach dem befüllen des Datagridview ändern? ich weiß, dass ich die datatable nicht verändern kann, nachdem ich werte befüllt habe. ach das ist doch alles sinnlos. mir fehlt die eingebung. ein verzweifelter... Du kannst auch per SQL- Befehl einen String in dein Datum umwandeln, oder du kannst das Datum in 2 Felder speichern, einmal normal und einmal im Format yyyy-mm-tt aber nur wenn du wirklich danach sortieren musst :-) Zitieren
KriZa Geschrieben 17. Juli 2008 Autor Geschrieben 17. Juli 2008 Das bringt mir aber wieder nichts, denn wenn ich ein textfeld per CAST() in ein Date feld umwandle, stehe ich wieder vor dem gleichen problem mit der bindung. das ändert somit leider nichts. er denkt ja wieder das ist ein datefeld und verhindert das update. mhh... mal ehrlich - wo hat hier microsoft nur das problem? warum schränken die ihr programme so ein? Zitieren
KriZa Geschrieben 17. Juli 2008 Autor Geschrieben 17. Juli 2008 Lösung - juhu!!! MySQL Spalte vom Typ Date connection string: allow zero datetime = false maskierte textfelder anstatt datetimepicker abfangen des 'leave' Trigger der textbox and änderung der datatable mit folgendem code: wenn textbox leer, dann: dt_antragsteller.Rows(0)("Geburtstag") = DBNull.Value achtung bei Datumsmaskierten textboxen sieht leer nicht "" aus, sondern je nach maskierung zB so " . ." für das format "DD.MM.YYYY" die letzten leerzeichen werden abgeschnitten! Maskierung hier: "__.__.____" Problem gelöst! Zitieren
KriZa Geschrieben 17. Juli 2008 Autor Geschrieben 17. Juli 2008 Achtung! Niemals '0000-00-00' nutzen - das verursacht den fehler! Nutzt entweder ein gültiges Datum oder DBNull! Close! Zitieren
Empfohlene Beiträge
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.