AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi PosNummern in Rechnungsdaten
Thema durchsuchen
Ansicht
Themen-Optionen

PosNummern in Rechnungsdaten

Ein Thema von LOMBI · begonnen am 24. Aug 2006 · letzter Beitrag vom 13. Sep 2006
Antwort Antwort
Seite 2 von 3     12 3      
LOMBI
(Gast)

n/a Beiträge
 
#11

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 11:49
Hi mkinzler,

leider, es will nicht klappen. Vielleicht liegt's an
der function NextKey und dem darin enthalten SQL.Text?

SQL.Text := Format('SELECT MAX(%s) FROM %s', [fldName, tblName]); Gruß
Lombi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 11:57
Ich habe gedacht, du hast diesen durch meine Erweiterung ersetzt!
Markus Kinzler
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#13

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 12:58
Delphi-Quellcode:
function PosNr(fldName, tblName: String): Integer;
begin
  with TQuery.Create do
  begin
  DatabaseName := QueryRechnungen.DatabaseName;
  SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr = 999999
';
  Open;
  Result: succ(Fields[0].AsInteger);
  Close;
end;
Den SQL.Text habe ich ersetzt. Nun beginnen alle Artikelpositionen
mit der PosNr. 1.0. Das "succ" in Result wird hier scheinbar ignoriert.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 13:05
Der Wert von 99999 ist natürlich falsch, war nur wegen meiner frage was er liefret wenn die Rechnungsnummer unbeknnat ist.
Bisher liefert die Abfarge ja das Maximum aller Positionen durch Erweiterung um die Rechnungsnummer liefert er das Maximum bezogen auf dise Nummer.

Bsp:
RechNr Pos
1 1
1 2
1 3
2 1
2 2

Die Abfrage

SELECT MAX(Pos) FROM Rechnungsdaten WHERE Rechnungsdaten.RechNr = 1 liefert also 3

Die Abfrage

SELECT MAX(Pos) FROM Rechnungsdaten WHERE Rechnungsdaten.RechNr = 2 2

und die Abfrage

SELECT MAX(Pos) FROM Rechnungsdaten WHERE Rechnungsdaten.RechNr = 3 NULL.

Das kannst du dann abfangen und dann den Wert 1 setzen.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

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

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 17:49
Hallo Lombi,

ein etwas anderer Ansatz.
Warum merkst du dir während der Bearbeitung der Positionen
die bisherige Anzahl in einer Variablen
oder lade gleiche alle Positionen in eine Liste.

Dann kannst du beim Speichern gleich neu durchnumerieren
und hast beim Löschen von Positionen keine Lücken.


Heiko
Heiko
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#16

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 18:17
@mkinzler

Ich habe den SQL.Text in der function PosNr nochmals überarbeit,
aber es will einfach nicht funktionieren. In den Rechnungen
haben alle gespeicherten Artikel die PosNr 1.0 oder die
Artikel starten z.B ab PosNr 6.0 ...

@hoika

Ich möchte vorerst keine Positionen bearbeiten. Zunächst muß eine
Rechnung mit den Artikeln eingeben und gespeichert werden. Oder
habe ich etwas mißverstanden? Soll ich etwa für die PosNr eine
neue Tabelle anlegen?

Gruß
Lombi
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 18:25
Versuchs mal so
Delphi-Quellcode:
function PosNr(fldName, tblName: String; RechNr: Integer): Integer;
begin
  with TQuery.Create do
  begin
  DatabaseName := QueryRechnungen.DatabaseName;
  SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr = RechNr
';
  Open;
  if not Fields[0].isNull then
      Result := succ(Fields[0].AsInteger)
  else
    Result := 1;
  Close;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#18

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 20:14
Ist mir echt peinlich, aber wieder Fehlanzeige!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 20:15
Dann schau mal was Field[0] für ein Wert hat.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 23:04
Hi.

Guck Dir das mal an, wie ich es löse. Ich verwende zwar ADS, aber mit Paradox sollte es auch gehen.

Zunächst brauchst Du zwei Funktionen (das vereinfacht es später, den Aufruf woanders zu wiederholen).
Die erste kapselt einfach nur den Aufruf des SQLs.
"AsInteger" gibt immer einen Wert zurück, auch wenn noch kein Datensatz existiert, also hast Du automatisch die aktuelle Positionsnummer (im ersten Fall NULL --> 0 --> +1 = 1).
Die "GlobaleQry" (bei Dir also eine TQuery) muss mit dem Database verbunden werden. Sie dient mir in vielerlei Hinsicht. Dies ist eins davon.
Delphi-Quellcode:
function TDataModul.NaechsteNummerErmitteln(SQLString, FeldName: String): Integer;
begin
  GlobaleQry.Close;
  GlobaleQry.SQL.Clear;
  GlobaleQry.SQL.Add(SQLString);
  GlobaleQry.Open;
  Result := GlobaleQry.FieldByName(FeldName).AsInteger + 1;
  GlobaleQry.Close;
end;
In dieser Funktion wird der SQL zusammengebaut.
Delphi-Quellcode:
function TDataModul.NaechsteNummerErmitteln(Tabelle, FeldName, BedingungsFeld, BedingungsWert: String; BedingungsFeldIsString: Boolean = False): Integer;
begin
  if BedingungsFeldIsString then
    Bedingungswert := '''' + Bedingungswert + '''';
  result := NaechsteNummerErmitteln('Select max(' + FeldName + ') NUMM from ' + Tabelle
                                  + ' where ' + BedingungsFeld + ' = ' + BedingungsWert,
                                    'NUMM');
end;
Somit kannst Du nun anfangen, die Nummern zu ermitteln.
Delphi-Quellcode:
procedure TFormIrgendo.RechnungTblAfterInsert....
begin
  ...
  DataModul.RechnungTblPositionsnummer.AsInteger :=
    NaechsteNummerErmitteln('Rechnung', 'Positionsnummer', 'Rechnungsnummer', RechnungTblRechnungsnummer.AsInteger);
  ...
end;
Mittlerweile bin ich bei fünf Funktionen, die sich mit der Ermittlung der nächsten fortlaufenden Nummer und der Ermittlung von Lücken befassen.
Ist also quasi ausgereift.
  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 13:08 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