AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi nächste Auftragsnummer ermitteln?

nächste Auftragsnummer ermitteln?

Offene Frage von "PASST"
Ein Thema von PASST · begonnen am 13. Jul 2009 · letzter Beitrag vom 13. Jul 2009
Antwort Antwort
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

nächste Auftragsnummer ermitteln?

  Alt 13. Jul 2009, 14:25
Datenbank: ADS • Version: 9.10 • Zugriff über: ADO
Hallo allerseits,

ich möchte mit Delphi eine Schnittstelle zu einem Clipper/xBase-Programm schreiben. Diese Schnittstelle soll neue Aufträge zu den bestehenden Aufträgen erzeugen.

Beim Erzeugen einer neuen Auftragsnummer komme ich in einen Konflikt mit dem bisherigen Auftragsprogramm. Das Alt-Programm hat eine eigene Tabelle, in der die nächste zur Verfügung stehende Auftragsnummer gespeichert ist. Wenn das Alt-Programm einen neuen Auftrag schreibt, so sperrt es diesen Datensatz, liest das Feld 'Auftragsnummer', erhöht den Wert für Auftragsnr um +1, speichert den Datensatz und gibt ihn wieder frei.

Wie kann ich dies aber mit SQL abbilden, wenn ich vermeiden will, dass parallel das Alt-Programm auf diese Daten schreibt?

Dies sind zwei Arbeitsschritte, in denen das Alt-Programm genau dazwischen funken kann.
SQL-Code:
Select [auftragsnr] From Basis_Tabelle
// und //
Update Basis_Tabelle
Set [auftragsnr] = [auftragsnr] + 1
Hat jemand eine Idee?

Gruß,
Peter
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: nächste Auftragsnummer ermitteln?

  Alt 13. Jul 2009, 14:39
Es könnte helfen, wenn du die beiden Queries in eine Transaction packst
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: nächste Auftragsnummer ermitteln?

  Alt 13. Jul 2009, 14:53
Hallo,

das Clipper/XBase benutzt ja wohl eine DBF-Tabelle (grusel ).

So schlimm es ist,
nimm den gleichen Algorithmus wie das Alt-Programm.

Table: TTable (oder TDBFTable, du schreibst nichts über Zugriff auf das Alt-Programm)

Delphi-Quellcode:
with Table do
begin
 // Datensatz suchen
  SetKey;
  FieldByName('XX').AsInteger:= xx;
  if GotoKey then
  begin
    try
      Edit; // hier wird auf Satzebene im Dateisystem gesperrt

      iNextNo:= FieldByName('NextNo').AsInteger;
      FieldByName('NextNo').AsInteger:= iNextNo+1;
      
      Post; // Speichern
    
      FlushBuffers(Handle); // "richtig" speichern
    except
     // Sperrung fehlgeschlagen
      Exit;
    end;
  end;

Heiko
Heiko
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: nächste Auftragsnummer ermitteln?

  Alt 13. Jul 2009, 15:05
@hoika
Auf die Idee hätte ich auch kommen können...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:11 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