Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi UNIQUE KEY auf RechnungsNr setzen (https://www.delphipraxis.net/74783-unique-key-auf-rechnungsnr-setzen.html)

LOMBI 8. Aug 2006 17:25

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery, TDataSource

UNIQUE KEY auf RechnungsNr setzen
 
Hi,

ich möchte auf die fortlaufende Rechnungsnummer einen unique Key setzen, damit jede Nummer zuverlässig nur einmal gespeichert wird.

Ist meine Vorgehensweise so i.O.?

1.) In der Datenbankoberfläche setze ich auf die RechnungsNr einen
Sekundärindex.

2.)
Delphi-Quellcode:
    procedure TFormRechnungen.QueryRechnungenBeforePost(DataSet:
    TDataSet);         //Rechnungsnummer prüfen
    begin
      if QueryRNr.Fields[0].AsInteger > 0 then
       DataSet.FieldByName('RNr').AsInteger := NextKey('RNr',
       'Rechnungen');
    end;
Besten Dank für die Hilfe!

Gruß
Lombi

Sascha L 8. Aug 2006 17:28

Re: UNIQUE KEY auf RechnungsNr setzen
 
Also entweder lässt du den Parameter "DataSet" weg und greift direkt darauf zu, so wie du es ja auch mit QueryRNr machst oder aber du musst noch ein "var" davor setzen:

Delphi-Quellcode:
procedure TFormRechnungen.QueryRechnungenBeforePost(var DataSet:
    TDataSet);

marabu 8. Aug 2006 18:12

Re: UNIQUE KEY auf RechnungsNr setzen
 
Hallo Sascha,

die Signatur des event handlers ist vorgegeben und kann nicht verändert werden - ist auch nicht nötig.

Delphi-Quellcode:
procedure TFormRechnungen.QueryRechnungenBeforePost(DataSet: TDataSet);        
begin
  with DataSet do
    FieldByName('RNR').IsNull then
       FieldByName('RNR').AsInteger := NextKey('RNr', 'Rechnungen');
end;
Die Speicherung doppelter Schlüssel verhindert der Sekundärindex, wenn bei "Eindeutig" ein Haken gesetzt wurde. Im Programm muss allerdings bei jedem missglückten Speicherversuch aufgrund doppelten Schlüssels ein neuer Schlüssel besorgt werden. Dazu würde ich in einer Ausnahmebehandlung den Ausnahmegrund entsprechend einschränken, damit nicht in jedem Fehlerfall ein doppelter Schlüssel unterstellt wird und das Programm in einer Endlosschleife läuft.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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-2025 by Thomas Breitkreuz