Entwickler-Ecke
Datenbanken - Access Ja/Nein Feld
EEK - Do 22.03.07 14:58
Titel: Access Ja/Nein Feld
Hallo,
ich habe eine Access Datenbank erstellt, in der ich ein Ja/Nein Feld habe. Ich meinem Programm habe ich eine CheckBox und beim drücken auf den Button soll jetzt in die DB geschrieben werden ob in der CheckBox das Häkchen gesetzt ist oder nicht.
Ich habe jetzt schon alles möglich versucht, doch ich bekomme es bis jetzt nicht hin. Ich habe auch schon die Forums suche benutzt und habe einen Beitrag gefunden in dem steht das man sowas mit
Delphi-Quelltext
1:
| FieldByName('Abfrage').AsBoolean := Checkbox1.Checked; |
macht. Jedoch wenn ich es versuche dann bricht mir das Programm mit der Fehlermeldung "ADOQuery1:Das Feld 'Abfrage' wurde nicht gefunden" ab.
ene - Do 22.03.07 15:04
Hi,
vielleicht liegts ja an Access, denn Access -1 = True; 0 = False und Delphi 0 = False; 1 = True. Und wenn ich deinen Quelltext und die Fehlermeldung so lese, dann fehlt mir ein e.
EEK - Do 22.03.07 15:25
An dem fehlenden "e" lag es nicht, das war nur ein Fehler beim abschreiben :oops: Ja das in Access -1 = true und 0 = false ist wusste ich schon, nur wie ich es dann mache damit es funktioniert weiß ich leider trotzdem nicht. Trotzdem danke für die Antwort.
ene - Do 22.03.07 15:29
Ich vermute es nur mal, wobei die Fehlermeldung eigentlich eindeutig ist und der gezeigte Code eindeutig zu wenig ;)
Delphi-Quelltext
1:
| FieldByName('Abfrage'):= StrToInt(BoolToStr(Checkbox1.Checked, True)); |
Dann sollten zumindest die Werte stimmen.
EEK - Do 22.03.07 15:52
ene hat folgendes geschrieben: |
wobei die Fehlermeldung eigentlich eindeutig ist
|
Für dich vielleicht :D aber ich hatte mit Datenbanken bis jetzt kaum was zu tun. Aber falls du damit gemeint hast das die Namen der DB oder Tabelle nicht stimmen, daran kann es nicht liegen. Ich häng mal ein Bild von der DB mit an, vielleicht bringt es ja was.
Besonder viel Quellcode kann ich dir nicht zeigen weil ich bis jetzt nur ein Testprogramm geschrieben habe um die Verbindung zu testen und in dem Programm ist nur eine CheckBox und ein Button.
Bisher war das Einzige was ich in eine Datenbank schreiben musste ein String, das hab ich immer so gemacht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ADOQuery1.Close; ADOQuery1.SQL.Clear();
ADOQuery1.SQL.Add('INSERT INTO Reparieren ([Linie], [SAPNummer])'); ADOQuery1.SQL.Add('VALUES('); ADOQuery1.SQL.Add('"'+Linie+'",'); ADOQuery1.SQL.Add('"'+SapNummer+ '");'); ADOQuery1.ExecSQL; |
Das ich es bei dem Ja/Nein Feld nicht so machen kann weil hier ein String übergeben wird ist mir schon klar. Deshalb hab ich hier im Forum gesucht und hab das
Delphi-Quelltext
1: 2:
| FieldByName('Abfrage').AsBoolean := Checkbox1.Checked; |
gefunden. Aber eben nur diese Zeile und nicht was ich noch machen muss damit es funktioniert.
Bis jetzt hab ich schon alles Mögliche probiert
Delphi-Quelltext
1: 2: 3:
| ADOQuery1.SQL.Add('INSERT INTO DBTest ([Abfrage])'); ADOQuery1.FieldByName('Abfrage').AsBoolean := Checkbox1.Checked; ADOQuery1.ExecSQL; |
Delphi-Quelltext
1: 2: 3:
| ADOQuery1.SQL.Add('INSERT INTO DBTest'); ADOQuery1.FieldByName('Abfrage').AsBoolean := Checkbox1.Checked; ADOQuery1.ExecSQL; |
usw.
Ich hab auch schon bei Google gesucht, aber auch nix brauchbares gefunden.
ene - Do 22.03.07 16:12
Versuchs mal so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| ADOQuery1.Close; ADOQuery1.SQL.Clear();
ADOQuery1.SQL.Add('INSERT INTO DBTest (Abfrage) VALUES ('+ CheckBox1.Checked +')'; ADOQuery1.ExecSQL; |
Die eckigen Klammern brauchst du nur, wenn du Sonder-/Leerzeichen im Namen hast (was man tunlichst unterlassen sollte) und du hast deine Abfrage gar nicht richtig geschrieben.
EEK - Do 22.03.07 16:26
ene hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5:
| ADOQuery1.Close; ADOQuery1.SQL.Clear();
ADOQuery1.SQL.Add('INSERT INTO DBTest (Abfrage) VALUES ('+ CheckBox1.Checked +')'; ADOQuery1.ExecSQL; | |
Nein funktioniert leider auch nicht: Inkompatible Typen: 'string' und 'Boolean'
ene hat folgendes geschrieben: |
Die eckigen Klammern brauchst du nur, wenn du Sonder-/Leerzeichen im Namen hast (was man tunlichst unterlassen sollte) |
Ja weiß ich schon, hab das aus einem alten Programm kopiert, frag mich nicht warum ich es damals so geschrieben habe.
ene hat folgendes geschrieben: |
und du hast deine Abfrage gar nicht richtig geschrieben. |
Wie meinst du das?
Auf alle fälle danke für deine hilfe.
ene - Do 22.03.07 16:32
Und so?
Delphi-Quelltext
1:
| ADOQuery1.SQL.Add('INSERT INTO DBTest (Abfrage) VALUES ('+ BoolToStr(CheckBox1.Checked) +')'; |
Lass dir mal deinen SQL-String ausgeben, der entspricht dann nicht der Norm.
iKilledKenny - Do 22.03.07 16:33
So müsste das gehen:
Delphi-Quelltext
1: 2: 3: 4:
| AdoCommand.ParamCheck := True; AdoCommand.CommandText := 'INSERT INTO DBTest (Abfrage) VALUES (:Param1)'; AdoCommand.Parameters.ParamByName ('Param1').Value := CheckBox.Checked; AdoCommand.Execute; |
Wobei AdoCommand ein TAdoCommand ist, mit einer gültigen Connection.
Grüße
EEK - Do 22.03.07 16:48
ene hat folgendes geschrieben: |
Und so?
Delphi-Quelltext 1:
| ADOQuery1.SQL.Add('INSERT INTO DBTest (Abfrage) VALUES ('+ BoolToStr(CheckBox1.Checked) +')'; |
|
Mal abgesehen davon das bei dir eine Klammer gefehlt hat :wink: :D funktioniert es jetzt.
Vielen dank.
iKilledKenny hat folgendes geschrieben: |
So müsste das gehen:
Delphi-Quelltext 1: 2: 3: 4:
| AdoCommand.ParamCheck := True; AdoCommand.CommandText := 'INSERT INTO DBTest (Abfrage) VALUES (:Param1)'; AdoCommand.Parameters.ParamByName ('Param1').Value := CheckBox.Checked; AdoCommand.Execute; |
Wobei AdoCommand ein TAdoCommand ist, mit einer gültigen Connection.
Grüße |
Hab ich jetzt nicht ausprobiert. Aber trotzdem auch danke an dich.
Gruß EEK
UGrohne - Do 22.03.07 16:57
An Deinem SQL-Statement hat man sehr schön den Denkfehler gesehen, den Du gemacht hattest. Dieses FieldByName bezieht sich auf Felder in einer Abfrage, also Select. Damit kannst Du Feldwerte in der Ergebnismenge abfragen. Was Du aber machen wolltest ist, einen Parameter übergeben und das machst Du über Parameter wie von
iKilledKenny gezeigt.
boje-a - Mo 09.04.07 07:49
würde für TCheckBox TDBCheckBox verwenden
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!