AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit DBCheckBox
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit DBCheckBox

Ein Thema von spoona · begonnen am 13. Mai 2005 · letzter Beitrag vom 16. Mai 2005
Antwort Antwort
spoona

Registriert seit: 2. Mär 2005
48 Beiträge
 
#1

Problem mit DBCheckBox

  Alt 13. Mai 2005, 10:27
Datenbank: Interbase • Version: 6.0 • Zugriff über: Interbase
Hallo,

ich muss leider das Problem mit den DBCheckboxen wieder aufgreifen. Es wurde hier schon einige Male angesprochen, aber nie wirklich ein konkrete Loesung gepostet.
Also ich verwende ne DBCheckbox. In der DB habe ich sie als Datentyp Varchar(1) deklariert.
ValueChecked/UnChecked habe ich mit 'T'/'F' belegt. Bei Anlage eines neuen Datensatzes steht in der DB noch kein Wert drin--klar(Ohne Defaultwert). Jetzt sind alle Checkboxen leider grau und mit einem Haeckchen versehen.Das will ich aber nicht!!!! Sie sollen bei Neuanlage alle leer bzw. weiss ohne Haeckchen sein,ohne dass ich jeden anklicken muss. Habe auch schon probiert nen defaultwert in der DB anzugeben,aber das funktioniert auch nicht. Ich dachte vielleicht soetwas :

ValueChecked -- 'T';
ValueUnchecked -- 'F;Null'

Aber das geht auch nicht
Was ist denn sonst der Zustand fuer ein leeres Datenbankfeld?

Vielen Dank fuer Eure Hilfe
Gruss Spoona
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem mit DBCheckBox

  Alt 13. Mai 2005, 10:53
Zitat von spoona:
Bei Anlage eines neuen Datensatzes steht in der DB noch kein Wert drin--klar(Ohne Defaultwert). Jetzt sind alle Checkboxen leider grau und mit einem Haeckchen versehen.Das will ich aber nicht!!!!
Warum nicht? Das ist genau der Zustand in Deiner DB. Du solltest vielleicht TQuery/TTable.AAfterInsert entsprechend behandeln und dort die Felder vorbelegen (die DB-Controls nehmen dann automatisch den richtigen Zustand an):

Delphi-Quellcode:
procedure TForm1.AdsTable1AfterInsert(DataSet: TDataSet);
var
  i:integer;
begin
  for i:=0 to Dataset.FieldCount-1 do
    if Dataset.Fields[i].IsNull
      then begin
        //Beispiel
        if (DataSet.Fields[i].DataType is ftBoolean)
          then Dataset.Fields[i].AsBoolean:=False;
      end;
end;
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Problem mit DBCheckBox

  Alt 13. Mai 2005, 11:26
Hallo,


OnNewRecord ist das richtige Event für sowas.

MfG
Stevie
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
spoona

Registriert seit: 2. Mär 2005
48 Beiträge
 
#4

Re: Problem mit DBCheckBox

  Alt 16. Mai 2005, 08:52
Hallo,

danke fuer die Antworten. So etwas kann man schon machen, aber ich dachte es ginge wesentlich einfacher, wenn man fuer ValueUnchecked: 0 und Null angeben koennte.
Ok, dann werde ich es mit dem OnNewRecordEvent machen. Aber noch ne Frage zum Code :
Zitat:
if (DataSet.Fields[i].DataType is ftBoolean)
Wie kann ich in der Datenbank selber den Typ Boolean festlegen? Gibt es da nen Trick?
Ich habe keinen Typ Boolean in der datenbank oder heisst der nur anders? Oder muss ich mir ne Domaene definieren? Damit habe ich noch nicht so bewusst gearbeitet.

Vielen DAnk fuer Eure Hilfe

Gruss Spoona
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Problem mit DBCheckBox

  Alt 16. Mai 2005, 09:14
Hi Spoona,

bei deinem Checkbox-Problem musst du überlegen, ob du es als Problem des user interface auffassen willst oder doch lieber als Teil des Datenbankentwurfs. In der Datenbank kannst du es z.B. so angehen:

SQL-Code:
CREATE DOMAIN "BIT" AS SMALLINT;
CREATE DOMAIN "SYSKEY" AS DECIMAL(18, 0);
CREATE DOMAIN "VCHAR70" AS VARCHAR(70) CHARACTER SET ISO8859_1 COLLATE DE_DE;

CREATE TABLE "PER"
(
  "ID"  "SYSKEY" NOT NULL,
  "DELETED"  "BIT" DEFAULT 0 NOT NULL,
  "NACHNAME"  "VCHAR70" NOT NULL COLLATE DE_DE,
  "VORNAMEN"  "VCHAR70" NOT NULL COLLATE DE_DE,
CONSTRAINT "PK_PER" PRIMARY KEY ("ID")
);
Grüße vom marabu
  Mit Zitat antworten Zitat
spoona

Registriert seit: 2. Mär 2005
48 Beiträge
 
#6

Re: Problem mit DBCheckBox

  Alt 16. Mai 2005, 10:11
Hallo,
also danke fuer den CODE! Aber leider bingt der mich nicht wirklich weiter....
Ich gebe zwar nen Defaultwert an, aber dieser wird ignoriert, bzw. wird nicht als Defaultwert geschrieben. Naja ich denke es ist dann eher ein UserInterface Problem.
Wenn ich mit dem von "joachimd" zur Verfuegung gestellten CODE arbeiten will,
Zitat:
...
if (DataSet.Fields[i].DataType is ftBoolean)
...
bleibt immer noch das Problem mit dem Vergleich auf Boolean. Kann natuerlich auf ftSMALLINT pruefen, aber waere trotzdem interessant zu wissen, wie ich auf Boolean testen kann. Naja bei den Eigenschaften vom Table kann ich unter "FieldDefs" meine Felder mit anderen Datentypen belegen, hier auch ftBoolean. Aber leider kann ich den hier festgelegten Wet nicht abfragen. Er nimmt immer den Wert aus der Datenbank, also ftSmallInt. Naja irgendwie finde ich, dass Delphi hier Verbesserungen vonehmen sollte. Finde das ganze bisl umstaendlich. Wenn es wenigstens mit dem Defaultwert funktionieren wuerde. Aber der ist nicht wirklcih sichtbar in der Datenbank,so dass sich die DBChechBoxen dementsprechend verhalten.
Naja vielleicht weiss noch jemand rat.

Danke Gruss Spoona
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#7

Re: Problem mit DBCheckBox

  Alt 16. Mai 2005, 10:27
Hallo Spoona,


Der Marabu hat dir schon den richtigen Weg gezeigt, mit der Erzeugung einer neuer Domain.CREATE DOMAIN BOOLEAN AS SMALLINT DEFAULT 0 CHECK (VALUES BETWEEN 0 AND 1) Jetzt hast du einen Neuen Datentyp welcher nur zwei Werte speichern kann.
Mit diesem kannst du jetzt deine Tabelle ausstatten. z.B. so:
SQL-Code:

CREATE TABELLE Test ( test BOOLEAN)
raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
spoona

Registriert seit: 2. Mär 2005
48 Beiträge
 
#8

Re: Problem mit DBCheckBox

  Alt 16. Mai 2005, 11:48
Hallo,

ja das ist ja alles richtig und das habe ich auch erstanden.
Ich habe damit nen neuen Datentyp. Aber wenn ich im Quelcode nach dem Datentyp frage, bekomme ich SMALLINT und nicht boolean heraus. Vielleicht mache ich ja auch eine falsche Abfrage?:if (DataSet.Fields[i].DataType = ftBoolean)//Datatype zeigt hier aber ftSMALLINT an und weiterhin ist das Problem, dass der Defaultwert nicht in die DB geschrieben wird!

Vielen Dank fuer Hilfe

Gruss Spoona
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:23 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