![]() |
Datenbank: Interbase • Version: 6.0 • Zugriff über: Interbase
Problem mit DBCheckBox
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 :pale: Was ist denn sonst der Zustand fuer ein leeres Datenbankfeld? Vielen Dank fuer Eure Hilfe Gruss Spoona |
Re: Problem mit DBCheckBox
Zitat:
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; |
Re: Problem mit DBCheckBox
Hallo,
OnNewRecord ist das richtige Event für sowas. MfG Stevie |
Re: Problem mit DBCheckBox
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:
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 |
Re: Problem mit DBCheckBox
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:
Grüße vom marabu
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") ); |
Re: Problem mit DBCheckBox
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:
Naja vielleicht weiss noch jemand rat. Danke Gruss Spoona |
Re: Problem mit DBCheckBox
Hallo Spoona,
Der Marabu hat dir schon den richtigen Weg gezeigt, mit der Erzeugung einer neuer Domain.
SQL-Code:
Jetzt hast du einen Neuen Datentyp welcher nur zwei Werte speichern kann.
CREATE DOMAIN BOOLEAN AS SMALLINT DEFAULT 0 CHECK (VALUES BETWEEN 0 AND 1)
Mit diesem kannst du jetzt deine Tabelle ausstatten. z.B. so:
SQL-Code:
raikCREATE TABELLE Test ( test BOOLEAN) |
Re: Problem mit DBCheckBox
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?:
Delphi-Quellcode:
und weiterhin ist das Problem, dass der Defaultwert nicht in die DB geschrieben wird!
if (DataSet.Fields[i].DataType = ftBoolean)//Datatype zeigt hier aber ftSMALLINT an
Vielen Dank fuer Hilfe Gruss Spoona |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz