AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi doppelter eintrag in db vergleichen
Thema durchsuchen
Ansicht
Themen-Optionen

doppelter eintrag in db vergleichen

Ein Thema von missi · begonnen am 8. Aug 2005 · letzter Beitrag vom 10. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
missi

Registriert seit: 7. Aug 2005
Ort: Ddorf
27 Beiträge
 
#1

doppelter eintrag in db vergleichen

  Alt 8. Aug 2005, 16:20
Datenbank: sql • Zugriff über: ADOTable o. ADOCommand
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
  Mit Zitat antworten Zitat
Generalissimo

Registriert seit: 28. Aug 2003
187 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: doppelter eintrag in db vergleichen

  Alt 8. Aug 2005, 16:36
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.
  Mit Zitat antworten Zitat
missi

Registriert seit: 7. Aug 2005
Ort: Ddorf
27 Beiträge
 
#3

Re: doppelter eintrag in db vergleichen

  Alt 8. Aug 2005, 16:45
hm unique-key?


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
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#4

Re: doppelter eintrag in db vergleichen

  Alt 8. Aug 2005, 16:48
unique
und locate haste ja schon selber gefunden
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
missi

Registriert seit: 7. Aug 2005
Ort: Ddorf
27 Beiträge
 
#5

Re: doppelter eintrag in db vergleichen

  Alt 8. Aug 2005, 17:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: doppelter eintrag in db vergleichen

  Alt 8. Aug 2005, 17:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: doppelter eintrag in db vergleichen

  Alt 10. Aug 2005, 13:33
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: doppelter eintrag in db vergleichen

  Alt 10. Aug 2005, 13:48
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)
Andreas
  Mit Zitat antworten Zitat
missi

Registriert seit: 7. Aug 2005
Ort: Ddorf
27 Beiträge
 
#9

Re: doppelter eintrag in db vergleichen

  Alt 10. Aug 2005, 14:16
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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: doppelter eintrag in db vergleichen

  Alt 10. Aug 2005, 14:19
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 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 select * from... Du musst doch aber nicht alle Felder einbeziehen. Statt dem * wählst du nur die du brauchst.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 Uhr.
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