AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken dbCheckbox und dbGrid mit Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

dbCheckbox und dbGrid mit Abfrage

Ein Thema von blutigerAnfänger · begonnen am 2. Aug 2014 · letzter Beitrag vom 3. Okt 2014
Antwort Antwort
Seite 6 von 11   « Erste     456 78     Letzte »    
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#51

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 30. Aug 2014, 17:12
Das Löschen der geschweiften Klammern erzeugt auch noch einen Stack Überlauf.
Rate mal, welches Ereignis ausgelöst wird, wenn sich der Wert einer CheckBox ändert? Egal ob durch den Benutzer oder vom Programm.
OnClick

Aber das hätte man durch Debuggen rausbekommen können (das Zuweisen DBCheckBox1.Checked := True; im Einzelschritt durchgehen),
bzw. durch einen Blick in den Stacktrace, nach der Exception. (wer, wo und warum die Funktionen aufrief)

Die CheckBox ändert selber ihren Status, wenn man sie anklickt, also du brauchst das Checked hier eigentlich nicht zu manipulieren.

Delphi-Quellcode:
if DBCheckBox1.Checked then // if DBCheckBox1.Checked = True then
  DBCheckBox1.Checked := False;
if not DBCheckBox1.Checked then // if DBCheckBox1.Checked = False then
  DBCheckBox1.Checked := True;
Sowas ist natürlich auch "sinnlos", denn nach dem ersten IF ist Checked immer False (entweder es war schon False und blieb unverändert, oder es wurde auf False geändert)
und beim zweiten IF wird es dadurch natürlich gleich wieder auf True gesetzt, womit es am Ende immer True wäre.
Delphi-Quellcode:
if DBCheckBox1.Checked then
  DBCheckBox1.Checked := False
else
  DBCheckBox1.Checked := True;
Aber, wie gesagt, brauchst du an dem Checked, in der OnChangeOnClick-Methode, eigentlich garnicht dran rumspielen, da es bereits von der VCL umgeschaltet wird.



Zitat:
Update Tabelle set FELD
"FELD" ist ein Feld in der Tabelle "Tabelle"?

Auf was soll FELD eigentlich gesetzt werden?

Und welcher Datensatz soll eigentlich geändert werden? (bei dir alle Datensätze der Tabelle)

Beispiel: UPDATE tabelle SET feld = neuerWert WHERE bedingung




Tipp: Besser nicht mit False und vorallem nicht mit True vergleichen.
Außerdem ist das nicht nötig, da der Boolean für's IF eh schon vorhanden ist.
Delphi-Quellcode:
if DBCheckBox1.Checked = True then
if DBCheckBox1.Checked = False then

if DBCheckBox1.Checked then
if not DBCheckBox1.Checked then
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Aug 2014 um 17:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#52

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 30. Aug 2014, 17:38
Abgesehen von der Sinnlosigkeit hätte in diesem Fall auch ein einfaches Negieren genügt:
DBCheckBox1.Checked := not DBCheckBox1.Checked; ,was in der Langform nicht anderes heißt als
Delphi-Quellcode:
if DBCheckBox1.Checked then
  DBCheckBox1.Checked := false
else
  DBCheckBox1.Checked := true;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
blutigerAnfänger

Registriert seit: 23. Mär 2010
82 Beiträge
 
#53

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 30. Aug 2014, 17:59
@ himitsu
Den Inhalt der geschweiften Klammer hab ich gelöscht, soweit verstehe ich das auch. Dennoch bleibt die Veränderung des Datensatzes (also das Abklicken eines Häkchens) nicht erhalten. Das Anklicken einer Checkbox geht auch nicht (weil ja nicht programmiert?).



"FELD" ist ein Feld in der Tabelle "Tabelle"?

Auf was soll FELD eigentlich gesetzt werden?

Und welcher Datensatz soll eigentlich geändert werden? (bei dir alle Datensätze der Tabelle)

Beispiel: UPDATE tabelle SET feld = neuerWert WHERE bedingung
FELD ist das allererste Feld in der Tabelle "Tabelle".
Geändert werden soll nur der An- oder Abgeklickte Datensatz, welcher mit Select... ermittelt wird.
Zur Vereinfachung wird hier die komplette Tabelle angezeigt, da im Anwendungsfall es auch mehrere Antwortdatensätze geben wird. Wie ich nun die Bedingung definieren soll, damit nur der An-oder Abgeklickte Datensatz gespeichert wird ist mir im Moment noch unklar.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#54

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 30. Aug 2014, 22:11
Wie ich nun die Bedingung definieren soll, damit nur der An-oder Abgeklickte Datensatz gespeichert wird ist mir im Moment noch unklar.
Nun, im allgemeinen haben Datenbanktabellen eine Spalte/Feld, die/das einen eindeutigen Schlüssel enthält. Mit diesem Schlüssel kann man jeden Datensatz identifizieren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#55

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 30. Aug 2014, 22:18
Wobei eine DBCheckBox den Wert eigentlich selber ändern sollte, im verbundenen Feld des aktuellen Records der Query-Komponente (DataSet).
Und beim nächsten Post würden dann die Änderungen automatisch in die DB zurückgeschrieben.

Das ist ja grade ein Grund für die Existenz der DB-Komponenten (TDBCheckbox),
also daß sie die Daten selber aus dem DataSet holen und auch Änderungen zurückscheiben.


Wohingegen man das bei den nicht-datensensitiven Komponenten (TCheckBox) alles selber machen müsste.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Aug 2014 um 22:21 Uhr)
  Mit Zitat antworten Zitat
blutigerAnfänger

Registriert seit: 23. Mär 2010
82 Beiträge
 
#56

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 31. Aug 2014, 13:41
Wie ich nun die Bedingung definieren soll, damit nur der An-oder Abgeklickte Datensatz gespeichert wird ist mir im Moment noch unklar.
Nun, im allgemeinen haben Datenbanktabellen eine Spalte/Feld, die/das einen eindeutigen Schlüssel enthält. Mit diesem Schlüssel kann man jeden Datensatz identifizieren.

Gruß
K-H
Das mit der ID Nummer ist mir beim Abschicken meiner letzten Post auch eingefallen. Also muß ich einen ID-Nummerngenerator? programmieren in einem eigenständigen Feld. Nun mit IBExpet kein Problem.


Es bleibt immer noch die Nichtübernahme des "Häkchens" beim DBGrid zu lösen.
Noch mal zur Verdeutlichung des Sinns dieser Sache: Der Anwender selektiert aus mehreren tausend Datensätzen einige wenige heraus. Der Datensatz welcher ihm letzlich zusagt soll (soweit nicht vorhanden) mit Häckchen markiert werden. Weiter nichts. Die Markierung (Häkchen) soll keine Aktion oder Ähnliches auslösen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#57

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 31. Aug 2014, 15:38
'ner datenunabhängige ID ist oftmal von Vorteil.

Aber im Grunde kann man auch einen anderen "eingeutigen" Indikator verwenden. (ein oder mehrere Unique-Felder)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#58

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 31. Aug 2014, 16:52
Es bleibt immer noch die Nichtübernahme des "Häkchens" beim DBGrid zu lösen.
Ich bin mir ziemlich sicher, daß dein Problem mit einer fehlerhaften Einstellung deiner Query- bzw. Dataset-Komponente zusammenhängt. In Posting 20 hatte ich bereits die Frage gestellt, ob deine Query- oder Dataset-Komponente irgend ein Property aufweist, das die Boolean-Funktionalität ein- und ausschaltet. Du hattest zwar geantwortet "alles überprüft", aber keine detaillierten Angaben gemacht, ob denn nun so ein Property existiert oder nicht. Bei meinen IbDac-Komponenten z.B. heißt dieses Property (in den Optionen des Querys) BooleanDomainFields und muß auf True gestellt werden, damit die Komponente mit Boolean-Feldern arbeiten kann. Ebenso ist es wichtig, die für deine Komponente korrekte Boolean-Deklaration in Firebird zu wählen. Ein Boolean ist eben nicht einfach wahr oder falsch (bzw. true oder false), sondern z.B. so deklariert, daß 0 False ist und alles, was nicht 0 ist, als True gilt. Manche Komponenten aktzeptieren als Grundlage dieser Deklaration nur ein SmallInt in der DB, andere benötigen z.B. einen Integer als Basis. Wie sich das bei deinen (alten) DB-Komponenten verhält, weiß ich leider nicht, das mußt du selbst bzw. jemand, der über deine Delphi-Version verfügt, herausfinden.

Du könntest z.B. mal einen ScreenShot des Objektinspektors hochladen, der die Optionen deines Datasets zeigt ...

Es gibt auch noch die Möglichkeit, ein berechnetes Feld in deiner Query-Komponente zu erstellen und in GetText je nach Feldinhalt den Wert True oder False zuzuweisen ...
  Mit Zitat antworten Zitat
blutigerAnfänger

Registriert seit: 23. Mär 2010
82 Beiträge
 
#59

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 31. Aug 2014, 19:54
Anbei die Screenshots der meisten Elemente: Ich hoffe sie sind aussagekräftig genug.
Miniaturansicht angehängter Grafiken
checkbox1.png   checkbox2.png   grid.png   ibtransaction.png   query.png  

  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#60

AW: dbCheckbox und dbGrid mit Abfrage

  Alt 31. Aug 2014, 20:04
@Perlsau: Ich glaube, das ist gelöst. Die Datenbank liefert 0/1, aber das TDBCheckBox-Teil muss ja wissen, was 'True' und was 'False' ist. Das macht er, indem die Eigenschaften 'ValueChecked' und 'ValueUnchecked' zugewiesen werden, allerdings im Code. Lass dich also nicht von den Eigenschaften im OI verwirren, die TE hier gepostet hat.

Ich glaube, der Code im OnClick der TDBCheckbox-komponente ist überflüssig und falsch, denn er macht genau das wieder rückgängig, was die Komponente eh gemacht hätte. Also: Weg damit. Bei mir funktioniert es nämlich. Und ich habe FB extra installiert, um mir ganz sicher zu sein.

Also: Das TDBCheckBox brauch kein OnClick-Event. Es benötigt gar nichts, nur die richtigen Eigenschaften.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 11   « Erste     456 78     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz