AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Interbase Generatorwert zurücksetzen?
Thema durchsuchen
Ansicht
Themen-Optionen

Interbase Generatorwert zurücksetzen?

Ein Thema von plautzer · begonnen am 8. Feb 2005 · letzter Beitrag vom 16. Feb 2005
Antwort Antwort
Seite 2 von 3     12 3      
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#11

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 10. Feb 2005, 09:04
Rechnungen löschen!
Es ist in vielen Unternehmen so, dass Rechnungen nach der Erstellung gelöscht oder geändert werden.

Solange Rechnungen noch nicht verschickt sind, spricht nichts dagegen sie auch wieder zu löschen und dann gehen bei mir die Nr auch wider in diesen besagten Nummernpool.
Das ist sehr praktikabel.

Eine Stornierung samt Gutschrift kommt erst zum tragen wenn wam dem Debitor die Rechnung tatsaechlich zugestellt hat.

mfg
DD
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 10. Feb 2005, 09:41
Und wenn du eine Rechnung von vor ein paar Jahren löschst?
  Mit Zitat antworten Zitat
DelphiDeveloper

Registriert seit: 9. Apr 2003
Ort: Köln
256 Beiträge
 
Delphi XE2 Enterprise
 
#13

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 10. Feb 2005, 09:47
wenn ne rechnung verschickt ist, hat sie den status dass sie nicht mehr loeschbar ist.
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 10. Feb 2005, 11:20
Bei Datenbanken mit vielen Usern und vielen Zugriffen geht das locken und unlocken ganz schön auf die Performanz, da habe ich lieber ein paar stornierte Rechnungen in der Tabelle stehen. Aber soll nun auch gut sein zu diesem Thema, soll jeder so machen wie er es für besser erachtet.

ciao
  Mit Zitat antworten Zitat
plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#15

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 11. Feb 2005, 19:29
HI,

danke für eure zahlreichen Überlegungen.
Ich habe es jetzt so gelöst, dass man einen neuen datensatz anlegen will, der Generator abgefragt wird, manuell um eins erhöht und dann in das Feld eingefügt wird (damit die id sichtbar ist).
Erst wenn man auf speichern klickt wird die ID automatisch generiert( um 1 erhöht) und die restlichen Datensätze gespeichert.
Ich denke, das ist ne gute lösung, da der Generatorwert nicht angerührt wird und er die ID automatisch generiert, somit können keinen doppelten datensätze entstehen.

Plautzer
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#16

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 11. Feb 2005, 20:23
Zitat von plautzer:
HI,
Ich habe es jetzt so gelöst, dass man einen neuen datensatz anlegen will, der Generator abgefragt wird, manuell um eins erhöht und dann in das Feld eingefügt wird (damit die id sichtbar ist).
Erst wenn man auf speichern klickt wird die ID automatisch generiert( um 1 erhöht) und die restlichen Datensätze gespeichert.
Ich denke, das ist ne gute lösung, da der Generatorwert nicht angerührt wird und er die ID automatisch generiert, somit können keinen doppelten datensätze entstehen.
Plautzer
Hi,
dabei kannst Du aber nicht sicherstellen, dass die angezeigte ID auch im Endeffekt die ID des Records ist, ausser Du bist Dir sicher, dass immer nur eine Instanz/ein User auf die DB Zugriff hat. Sonst kann Folgendes passieren :
Instanz 1 fragt 'ne ID ab und kriegt 23 zurück
Instanz 2 fragt 'ne ID ab und kriegt auch 23 zurück

Instanz 1 speichert denn Record unter 23 (der Generator ist jetzt auf 24)
Instanz 2 speichert somit mit der ID 24 (obwohl vorher 23 angezeigt wurde).

Ist für den User noch unverständlicher, wenn Du ne Falsche ID anzeigst; dann doch besser vorher gar keine ID anzeigen.

Die am Anfang erfragte ID kannst Du sowieso nicht weiterverwenden, da sie nicht "sicher" ist.

Wie ich schon oben geschrieben habe, würde ich die ID erst beim POST generieren. Wo liegt da das Problem ?

Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#17

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 14. Feb 2005, 09:23
Zitat von DelphiDeveloper:
exklusiver Zugriff auf Tabelle Nummernkreis anfordern (Lock)
wenn gesperrt warte...
schaue im Numernpool ob noch verwaiste Nr vorliegen
wenn ja hole satz aus nummernpool und loesch ihn dort -> fertig
wenn nix im Nummernpool
hole NEXTNumber aus Nummernkreis, incrementiere um 1 NextNumber in Nummernkreis
exklusiver Zugriff auf Tabelle zureucksetzen (unlock).
Warum nicht einfach so ohne Locking:

SQL-Code:
select NextNumber
from Nummernkreis
where id = 1

update Nummernkreis
set NextNumber = (ergebnis von obigen select + 1)
where nextnumber = (ergebnis von obigen select)
Wenn der Update Part nicht klappt wurde zwischenzeitlich bereits eine Änderung gemacht und man versucht es komplett noch einmal bis es halt klappt.

Gruß,
Marcel
Marcel Gascoyne
Der Fehler sitzt immer vor der Tastatur
  Mit Zitat antworten Zitat
Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 15. Feb 2005, 06:36
@Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#19

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 15. Feb 2005, 06:44
Ganz einfach: Per Select wird die aktuelle Belegnummer ermittelt. Nun wird diese um eins erhöht und per Update gespeichert. Durch Angabe der alten Belegnummer in der Where-Clause wird sichergestellt das nur aktualisiert wird wenn zwischenzeitlich kein anderer eine neue Belegnummer erzeugt hat.

Gruß,
Marcel
Marcel Gascoyne
Der Fehler sitzt immer vor der Tastatur
  Mit Zitat antworten Zitat
plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#20

Re: [Interbase] Generatorwert zurücksetzen?

  Alt 15. Feb 2005, 16:24
Zitat von Marcel Gascoyne:
... diese um eins erhöht und per Update gespeichert. Durch Angabe der alten Belegnummer in der Where-Clause wird sichergestellt das nur aktualisiert wird wenn zwischenzeitlich kein anderer eine neue Belegnummer erzeugt hat.
Per Update?

wo soll das denn gespeichert werden? Man müsste erst einmal einen Datensatz erstellen (insert) bevor man ihn bearbeiten kann.

Mein Prog. ist nur für einen Benutzer, also sollte das ganze ohne weiteres funzen.

thx Leute,


Plautzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 10:30 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