Autor Beitrag
EEK
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
BeitragVerfasst: Do 22.03.07 14:58 
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
ausblenden 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.


Zuletzt bearbeitet von EEK am Do 22.03.07 15:21, insgesamt 1-mal bearbeitet
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Do 22.03.07 15:29 
Ich vermute es nur mal, wobei die Fehlermeldung eigentlich eindeutig ist und der gezeigte Code eindeutig zu wenig ;)

ausblenden Delphi-Quelltext
1:
FieldByName('Abfrage'):= StrToInt(BoolToStr(Checkbox1.Checked, True));					


Dann sollten zumindest die Werte stimmen.
EEK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
BeitragVerfasst: Do 22.03.07 15:52 
user profile iconene 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.

ausblenden 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
ausblenden 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
ausblenden Delphi-Quelltext
1:
2:
3:
ADOQuery1.SQL.Add('INSERT INTO DBTest ([Abfrage])');
ADOQuery1.FieldByName('Abfrage').AsBoolean := Checkbox1.Checked;
ADOQuery1.ExecSQL;

ausblenden 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.
Einloggen, um Attachments anzusehen!
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Do 22.03.07 16:12 
Versuchs mal so:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
BeitragVerfasst: Do 22.03.07 16:26 
user profile iconene hat folgendes geschrieben:


ausblenden 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'
user profile iconene 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.
user profile iconene 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Do 22.03.07 16:32 
Und so?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Do 22.03.07 16:33 
So müsste das gehen:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
BeitragVerfasst: Do 22.03.07 16:48 
user profile iconene hat folgendes geschrieben:
Und so?
ausblenden 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.
user profile iconiKilledKenny hat folgendes geschrieben:
So müsste das gehen:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 user profile iconiKilledKenny gezeigt.
boje-a
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 09.04.07 07:49 
würde für TCheckBox TDBCheckBox verwenden