German Problem mit SQLite und CheckBox

Fontanus

Member
Licensed User
Hallo liebe Fangemeinde,

mit meinem kleinen Progrämmle komme ich so langsam vorwärts. Ein kleines Problemchen nach dem Anderen wird gelöst. Nun habe ich wieder etwas, was mir Fragezeichen in die Augen treibt.
In einer Form verarbeite ich Mitarbeitermerkmale, die zum Teil per Checkbox eingegeben werden. Zum Beispiel, ob der Mitarbeiter an Montagen einsatzbereit ist. Neben anderen Daten speichere ich diese Daten abschließend in die SQLite-Tabelle. Nach dem Speichervorgang lese ich den Datensatz gleich neu ein um die tatsächlich gespeicherten Daten sichtbar zu machen, quasi als Erfolgsbestätigung. Es werden alle Daten angezeigt, außer den Checkbox-Daten. In der Datenbanktabelle sind sie jedoch vorhanden.
Per Zufall habe ich dann festgestellt, daß, nachdem ich eine Feldeigenschaft in der Datenbanktabelle geändert hatte und die Änderung per Apply durchgeführt hatte, plötzlich auch die Checkboxdaten eingelesen und angezeigt wurden. An Begin- und Endtransaction liegt es nicht, denn das wird explizit durchgeführt.
Hat jemand eine Idee?

Gruß

Fontanus:sign0085:
 

sloopa

Member
Licensed User
Und wie speicherst du die Checkboxen ab?

integer 0 und 1, oder true false

ohne genaue Beschreibung kann ich da leider nix machen...

Poste mal den Teilbereich deines Programms.
 

Fontanus

Member
Licensed User
Hallo @Sloopa,

Die Daten werden in der DB als True/False abgespeichert. Wenn ich die DB nebenbei offen habe mit SQLite Expert, dann hat das Feld der Tabelle ein Häkchen, Feldwert also True, und wenn ich parallel dazu die Daten per Reader.GetValue einlese und mir den Variableninhalt anzeigen lasse, dann ist der Wert FALSE. Wenn ich irgendetwas an der Tabellendefinition mache, sogar ohne Änderungen durchzuführen, daß Ganze mit Apply abschliese, lese ich plötzlich tatsächlich auch ein True ein. Aus meiner Sicht hat das erst einmal nichts mit dem Programmcode zu tun.

Nichtsdestotrotz, hier der Programmcode zum Abspeichern der Daten. Der Speichervorgang zum Editieren der Daten ist noch nicht vollständig, aber dort tritt dasselbe Phänomen auf.

'*** Speichern von Mitarbeiterdaten ***
Sub btnMaSave_Click
lvMaPkw = ""
If ckbMaPkw.Checked = True Then lvMaPkw = "True" Else lvMaPkw = "False"

'*** Beginn des Speichervorgangs zunächst für Neueingaben ***
If gvLastButton = "NEW" Then
'*** Suche nach schon vorhandenen DS mit gleichem Inhalt wie die Neueingabe ***
con.BeginTransaction
Reader.New1
cmd.CommandText = "Select Count(MA_ID) from MA Where NAME = '" &tbMaName.Text& "' AND VORNAME = '" &tbMaVName.Text& "' "
Reader.Value = Cmd.ExecuteReader
gvDoublette = Reader.GetValue(0)
Reader.Close
con.EndTransaction
If gvDoublette > 0 Then
Msgbox ("Dieser Mitarbeiter ist schon vorhanden!","Information!",cMsgboxOK,cMsgboxHand)
tbOrtName.Focus
Return '*** Rücksprung zur aufrufenden Sub ***
End If
con.BeginTransaction
cmd.CommandText = "INSERT INTO MA VALUES( '" &tbMaID.Text& "','" &tbMaName.Text& "','" &tbMaVName.Text& "','" "','" "','" &ckbMaPkw.Checked& "','" &ckbMaLkw.Checked& "','" &ckbMaSchl.Checked& "','" &ckbMaEtMo.Checked& "','" &ckbMaEtDi.Checked& "','" &ckbMaEtMi.Checked& "','" &ckbMaEtDo.Checked& "','" &ckbMaEtFr.Checked& "','" &ckbMaEtSa.Checked& "','" &ckbMaEtSo.Checked& "','" "','" &tbMaHandyNr.Text& "','" &tbMaHomeNr.Text& "','" "','" "','" &tbMaEMail.Text& "','" &Date(Now)& "','" "','" "','" "')"
cmd.ExecuteNonQuery
Reader.New1
cmd.CommandText = "Select Count(MA_ID) from MA"
Reader.Value = Cmd.ExecuteReader
gvRecCount = Reader.GetValue(0)
gvRec = gvRecCount
Reader.Close
con.EndTransaction
End If
'*** Beginn des Speichervorgangs für Datenänderungen ***
If gvLastButton = "EDIT" Then
con.BeginTransaction
cmd.CommandText = "UPDATE MA SET NAME = '" &tbMaName.Text& "', VORNAME = '" &tbMaVName.Text& "', PKW = '" &ckbMaPkw.Checked& "', LKW = '" &ckbMaLkw.Checked& "', SCHL = '" &ckbMaSchl& "', ES_MO = '" &ckbMaEtMo.Checked& "', ES_DI = '" &ckbMaEtDi.Checked& "' WHERE MA_ID = '" &tbMaID.Text& "' "
cmd.ExecuteNonQuery
Reader.New1
cmd.CommandText = "Select Count(ORT_ID) from ORT"
Reader.Value = Cmd.ExecuteReader
gvRecCount = Reader.GetValue(0)
Reader.Close
con.EndTransaction
gvRec = gvRecTemp
End If
CloseMAFields
ReadOneMA
MAButtonCheck
End Sub
'------------------------------------------------------------------------------------[/B]

Einen schönen 1. Mai wünscht...

Fontanus

P.S. Ich habe weiterhin nun festgestellt, daß, nachdem ich die Daten per SQLite Expert nur in der Editiermodus gebracht habe und wieder abgeschlossen habe, die Daten richtig eingelesen werden. Grundsätzlich funktioniert es. Die Daten werden wie gewünscht abgespeichert und auch in meinem Progrämmle angezeigt, aber erst, nachdem ich manuell in der DB etwas getan habe.
 
Last edited:

sloopa

Member
Licensed User
So früh am morgen... (als Entschuldigung dafür, dass ich deinen Quellcode nicht verstehe)

Aber mal ein anderer Tipp, denn ich im Post zuvor schon angebracht habe:

Ersetze true und false durch 1 und 0 in deiner Datenbank und frage diese Werte doch ab - so groß dürfte der Aufwand nicht sein.
(if a = 1 then checkbox.checked = true ...)

btw: wie oft öffnest du die Datenbank? (nur einmal, oder bei jeder neuen Abfrage -- nur als Info für mich, hat mit deinem Post jetzt nichts zu tun)

sLooPa
 

Fontanus

Member
Licensed User
Hi @Sloopa,

ich werde Deinen Tip mal testen. Der Aufwand sollte nicht sehr groß sein. Danach werde ich berichten.

Die DB öffne ich jeweils beim Aufruf der Form und schließe sie wieder beim verlassen. Reader-Aufrufe beende ich sofort nach Ablauf des Lesevorgangs.

Gruß

Fontnus:sign0162:
 

Fontanus

Member
Licensed User
Hallo @sLooPa,

Problem gelöst. Ich setze nun tatsächlich die Checkbox-Werte True/False in 1/0 um, und siehe da, es funktioniert. Frage mich aber bitte nicht nach dem Warum!

Keine Ahnung und davon Viel!

Hauptsache, es funktioniert und es geht weiter.

Gruß

Fontanus

P.S. Bis zur nächten Frage :sign0188:
 

sloopa

Member
Licensed User
Freud mich zu hören...

Bis die Tage
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…