German Problem mit SQLite und CheckBox

Discussion in 'German Forum' started by Fontanus, May 1, 2007.

  1. Fontanus

    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:
     
  2. sloopa

    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.
     
  3. Fontanus

    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: May 1, 2007
  4. sloopa

    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
     
  5. Fontanus

    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:
     
  6. Fontanus

    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:
     
  7. sloopa

    sloopa Member Licensed User

    Freud mich zu hören...

    Bis die Tage
     
Loading...