Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi doppelter eintrag in db vergleichen (https://www.delphipraxis.net/51218-doppelter-eintrag-db-vergleichen.html)

missi 8. Aug 2005 15:20

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

Generalissimo 8. Aug 2005 15:36

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.

missi 8. Aug 2005 15:45

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

TeronG 8. Aug 2005 15:48

Re: doppelter eintrag in db vergleichen
 
unique :mrgreen:
und locate haste ja schon selber gefunden :-D

missi 8. Aug 2005 16:02

Re: doppelter eintrag in db vergleichen
 
so das der eintrag den funktionierenden source drin hat

Delphi-Quellcode:
  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;
danke nochmal an alle :)

Jelly 8. Aug 2005 16:27

Re: doppelter eintrag in db vergleichen
 
Zitat:

Zitat von missi
so das der eintrag den funktionierenden source drin hat

Das ist aber unschön, dein Code, da du nämlich überhaupt nicht garantierst, dass nur eine Seriennummer wirklich in der DB steht. Was, wenn man mit einem anderen Tool direkt in die DB-Tabelle geht, und dort doppelte Seriennummern einträgt.

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.

Luckie 10. Aug 2005 12:33

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.

shmia 10. Aug 2005 12:48

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:
   // 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;
Diese Vorgehensweise hat mehrere Vorteile:
* 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)

missi 10. Aug 2005 13:16

Re: doppelter eintrag in db vergleichen
 
Zitat:

Zitat von Jelly
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.

ne ignorieren tu ich dies nicht. nur wir lesen die chipid vom chip aus. ich denke nicht das sich irgendeiner die mühe macht die chips über unser tool auszulesen und dann sie von hand in die db schreibt BG

aber der tip ist in meinem hinterstübchen gespeichert und werde ich beim nächsten bearbeiten von der db realisieren ;)

lg ela

Jelly 10. Aug 2005 13:19

Re: doppelter eintrag in db vergleichen
 
Zitat:

Zitat von shmia
Diese Vorgehensweise hat mehrere Vorteile:
* man braucht nicht mit INSERT und UPDATE Anweisungen zuschreiben, die manchmal 50 Parameter benötigen

Wenn du 50 Felder hast, musst du auch so über deine Methode die einzelnen Felder füllen. Kürzer wird das nicht

Zitat:

Zitat von shmia
kleiner Nachteil:
* es werden Daten abgefragt, die meistens gar nicht benötigt werden (aber nur ein Datensatz, macht ja nix)

Das gilt aber nur bei einem
SQL-Code:
select * from...
Du musst doch aber nicht alle Felder einbeziehen. Statt dem * wählst du nur die du brauchst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz