Autor |
Beitrag |
EEK
      
Beiträge: 40
WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
|
Verfasst: 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
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
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: 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 
      
Beiträge: 40
WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
|
Verfasst: Do 22.03.07 15:25
An dem fehlenden "e" lag es nicht, das war nur ein Fehler beim abschreiben  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
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: 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 
      
Beiträge: 40
WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
|
Verfasst: Do 22.03.07 15:52
ene hat folgendes geschrieben: | wobei die Fehlermeldung eigentlich eindeutig ist
|
Für dich vielleicht  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.
Einloggen, um Attachments anzusehen!
|
|
ene
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: 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 
      
Beiträge: 40
WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
|
Verfasst: 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
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: 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
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: 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 
      
Beiträge: 40
WIN XP
Delphi 5 Pro., Turbo Delphi 2006, C#, C++
|
Verfasst: Do 22.03.07 16:48
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: 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
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 09.04.07 07:49
würde für TCheckBox TDBCheckBox verwenden
|
|