![]() |
Datenbank: sql • Zugriff über: ADOTable o. ADOCommand
doppelter eintrag in db vergleichen
Hab leider bei meiner suche nichts passendes gefunden.
(könnte auch sein das ich falsch gesucht habe ;) ich hab eine db auf einem sql-server tabelle: auftrag column: seriennummer (primarykey) ich möchte nun eine seriennummer dort eintragen aber davor überprüfen ob dieser key schon vorhanden ist. im vorraus vielen dank missi |
Re: doppelter eintrag in db vergleichen
dann setz in der DB ein unique-key auf die seriennummer. Wenn die dann schon vergeben ist, gibt es ne Fehlermeldung die man abfangen kann
im übrigen würde ich dir empfehlen 2 Spalten zu machen: ID int ->PrimaryKey SerienNr nvarchar(60) Der Grund ist folgender. Noch mag man in dem Programm Seriennummern vergeben wollen, die reine Zahlen sind. Jedoch kann sich das schnell ändern. |
Re: doppelter eintrag in db vergleichen
hm unique-key?
:wiejetzt: und das mit der seriennummer ist vorgegeben. aber ich habe es nun wohl gefunden mit locate kann ich überprüfen ob der eintrag schon vorhanden ist oder nicht. würde mich aber trotzdem interessieren was ein unique-key ist :) thx nochmal |
Re: doppelter eintrag in db vergleichen
|
Re: doppelter eintrag in db vergleichen
so das der eintrag den funktionierenden source drin hat
Delphi-Quellcode:
danke nochmal an alle :)
if fMain.TB1.Locate('Seriennummer', EdtSerial.Text, []) = False then
begin fMain.DBCom.CommandText := 'INSERT INTO .....'; fMain.DBCom.Execute; end else begin ShowMessage('Seriennummer ist schon vorhanden!'); end; |
Re: doppelter eintrag in db vergleichen
Zitat:
Sorge auf Datenbankebene dafür, dass dies nicht passieren kann. Und dazu gibts die unique keys. Wurd ja auch schon in diesem Thread erwähnt, du scheinst das aber zu ignorieren. |
Re: doppelter eintrag in db vergleichen
Es fehlt wohl an Verständnis, was mit einem Unique Key gemeint ist.
@missi: Du sollst in der Datenbank dieses Feld als 'eindeutig' markieren. Dann übernimmt der Datenbanktreiber, die Prüfung, ob der Wert schon mal in der Spalte existiert oder nicht. |
Re: doppelter eintrag in db vergleichen
Ich verwende in solche Fällen immer eine Query, die entweder einen oder keinen Datensatz zurückliefert.
Mit [TDataset].IsEmpty pürfe ich, ob schon ein Datensatz vorhanden ist. Mit [TDataset].Append oder [TDataset].Edit füge ich einen neuen Datensatz an, oder verändere den bestehenden Datensatz.
Delphi-Quellcode:
Diese Vorgehensweise hat mehrere Vorteile:
// dst ist eine Query mit SQL= SELECT * FROM Tabelle WHERE Serialnum=:Serialnum
dst.close; dst.Parameters.ParamValues['Serialnum'] := sernr; dst.open; update := not dst.IsEmpty; if update then begin dst.Edit dst['Changecount'] := dst['Changecount'] +1; end else begin dst.Append; dst['Serailnum'] := sernr; end; dst['lastchange'] := now; dst['.....'] := .... dst.post; * man braucht nicht mit INSERT und UPDATE Anweisungen zuschreiben, die manchmal 50 Parameter benötigen * man hat Zugriff auf die alten Werte und kann damit arbeiten kleiner Nachteil: * es werden Daten abgefragt, die meistens gar nicht benötigt werden (aber nur ein Datensatz, macht ja nix) |
Re: doppelter eintrag in db vergleichen
Zitat:
aber der tip ist in meinem hinterstübchen gespeichert und werde ich beim nächsten bearbeiten von der db realisieren ;) lg ela |
Re: doppelter eintrag in db vergleichen
Zitat:
Zitat:
SQL-Code:
Du musst doch aber nicht alle Felder einbeziehen. Statt dem * wählst du nur die du brauchst.
select * from...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 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 by Thomas Breitkreuz