Entwickler-Ecke
Datenbanken - überprüfen ob wert vorhanden
kabizolis - Do 08.09.05 08:37
Titel: überprüfen ob wert vorhanden
hallo,
ich habe eine ganz simple applikation, die via barcodeleser einen wert in eine Access-db einliest (ADO-komponenten). es handelt sich dabei um den strichcode von CD's... falls die CD schon in meinem Sortiment vorhanden ist, soll er eine Ausgabe tätigen... "CD schon vorhanden" oder ähnlich.
da ich nur diese angabe (strichcode) benötige, ist dieser eintrag mit dem primärschlüssel versehen... nun kann ich folglich nicht 2 mal den selben wert eintragen, ohne dass seitens der db ein hilferuf kommt....
meine frage:
wie kann ich zuerst überprüfen, ob der wert schon vorhanden ist, bevor ich schreibe?
ich benutze ein dbGrid.... ADOquery....
jasocul - Do 08.09.05 08:44
Du benutzt eine Query, in der du alle Datensätze abfragst, die diesen Barcode als Primary-Key haben. Wenn du einen Datensatz bekommst, dann gibt es den Barcode schon. Ansonsten dürftest du gar keinen Datensatz als Ergebnis bekommen.
Wenn die Datenbank schon offen ist, ginge mit einem normalen Query auch die Methode Locate. Ob Ado das auch kennt, weiß ich nicht.
Ich würde aber den ersten Weg wählen.
kabizolis - Do 08.09.05 09:09
hmmm hab nichts derartiges gefunden, wenn mir jemand konkreten code posten könnte wär ich sehr froh!
jasocul - Do 08.09.05 09:55
kabizolis hat folgendes geschrieben: |
hmmm hab nichts derartiges gefunden, wenn mir jemand konkreten code posten könnte wär ich sehr froh! |
Was hast du nicht gefunden? :wink:
Da du ADOQuery verwendest, solltest du wissen, was eine SQL-Anweisung ist.
Ob ein Datensatz vorhanden ist, geht etwa so:
Quelltext
1:
| select count(*) as Anzahl from Tabelle where DeinFeld = DeinWert |
Tabelle, DeinFeld und DeinWert musst du noch durch deine eigenen Daten ersetzen.
Danach kannst du mit:
Delphi-Quelltext
1:
| ADOQuery.FieldByName('Anzahl').AsInteger |
feststellen, wieviele Datensätze gefunden wurden. In deinem Fall darf nur 0 oder 1 heraus kommen. Du solltest dafür natürlich eine andere Query verwenden, als die, die du für dein DBGrid verwendest.
Was du dann mit deinem Ergbnis machst sollte klar sein. Bei 0 kannst du den Datensatz hinzufügen, bei 1 existiert er schon.
kabizolis - Do 08.09.05 11:49
Ich habe absolut keinen durchblick.... was mache ich falsch?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT COUNT (*) AS Anzahl FROM Barcode WHERE Barcode = "'+ Edit1.Text +'";'); ADOQuery1.FieldByName('Anzahl').AsInteger; ADOQuery1.ExecSQL; end; |
jasocul - Do 08.09.05 13:02
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT COUNT (*) AS Anzahl FROM Barcode WHERE Barcode = "'+ Edit1.Text +'";'); ADOQuery1.Open; if ADOQuery1.FieldByName('Anzahl').AsInteger = 0 then begin end else begin end; ADOQuery1.Close; end; |
So sollte es funktionieren.
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!