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 3 von 3     123   
Benutzerbild von Jelly
Jelly

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

Re: PosNummern in Rechnungsdaten

  Alt 25. Aug 2006, 22:35
Michael,

Du bist dir aber schon bewusst, dass zwischen deinem Ermitteln der neuen ID im AfterInsert Event bis zum Post des Records eine Weile vergehen kann. Wer garantiert dir denn ,dass genau in der Zeit nicht ein anderer User einen Datensatz eingefügt hat... DEINE ID wird nämlich erst beim Post vom Server vergeben, und nicht nach dem Aufruf von Dataset.Insert...
  Mit Zitat antworten Zitat
hoika

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

Re: PosNummern in Rechnungsdaten

  Alt 26. Aug 2006, 09:42
Hallo,

mkinzler,
dein SQL-Text ist falsch !

SQL-Code:
SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr = RechNr
';
Es muss heissen

entweder

SQL-Code:
SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr =
'+IntToStr(RechNr);
oder

SQL-Code:
SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr = :RechNr
';
ParamByName('RechNr').AsInteger:= rechNr;
Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

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

Re: PosNummern in Rechnungsdaten

  Alt 26. Aug 2006, 11:34
Hi Tom.

Zitat von Jelly:
Michael,

Du bist dir aber schon bewusst, dass zwischen deinem Ermitteln der neuen ID im AfterInsert Event bis zum Post des Records eine Weile vergehen kann. Wer garantiert dir denn ,dass genau in der Zeit nicht ein anderer User einen Datensatz eingefügt hat... DEINE ID wird nämlich erst beim Post vom Server vergeben, und nicht nach dem Aufruf von Dataset.Insert...
Bei mir wird insgesamt anders vorgegangen. Da werden nicht einzelne Positionen einer Rechnungsnummer zugeordnet, sondern einer Vorgangsnummer. Da aber jeder Vorgang nur von einem Anwender bearbeitet werden darf, passt das schon. Die Rechnungsnummer wird erst beim Druck der Rechnung geholt.
Aber generell hast Du schon recht. Das ist ein Problem von vielen in einer Mehrbenutzeranwendung.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: PosNummern in Rechnungsdaten

  Alt 26. Aug 2006, 20:19
Zitat:
mkinzler,
dein SQL-Text ist falsch !
Einfach schneller getippt als gedacht.
Markus Kinzler
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#25

Re: PosNummern in Rechnungsdaten

  Alt 11. Sep 2006, 18:55
Guten Abend,

ich bekomme das mit den Positionsnummern einfach nicht hin:

Delphi-Quellcode:
function GetPosNr(fldName, tblName: String): Integer;
var
  QueryRechnungsdaten:TQuery;
begin
  with TQuery.Create(nil) do
    begin
      DatabaseName := Rechnungen.DatabaseName;
      SQL.Text := Format('SELECT MAX(%s) FROM %s WHERE
Rechnungsdaten.RechnungsNr= :RechnungsNr
',
                  [fldName, tblName]);
      ParamByName('RechnungsNr') := RechnungsNr;
      Open;
      Result := succ(Fields[0].AsInteger;
      Close;
    end;
  end;

procedure FRechnungen.QueryRechnungsdatenAfterInsert(DataSet: TDataSet);
begin
  with DataSet do
    begin
      if FieldByName('PosNr').IsNull then
        FieldByName('PosNr').AsInteger := GetPosNr('PosNr',
        Rechnungsdaten');
QueryRechnungsdaten[
'RechnungsNr'] :=
QueryRechnungen[
'RechnungsNr']
...
end;
Fehlermeldung: "Undefinierter Bezeichner 'RechnungsNr'"

Delphi-Quellcode:
SQL.Text := Format('SELECT MAX(%s) FROM %s WHERE
Rechnungsdaten.RechnungsNr= :RechnungsNr
',
      //":RechnungsNr" stammt aus Tabelle Rechnungen und ist vom Typ
          I(nteger)!
Wer hilft mir bitte nochmals?

Grüße
Lombi
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#26

Re: PosNummern in Rechnungsdaten

  Alt 11. Sep 2006, 19:42
Hi,

habe mir jetzt nicht komplett alles durchgelesen, also Sorry wenn ich etwas wiederhole.
Beim erstellen einer neuen Rechnung, sind sehr wahrscheinlich noch keine Daten in Deinem DBGrid.
Was hindert Dich daran, beim anlegen eines neuen Datensatzes den Wert der PosNr. auf die Anzahl(+1) der gezeigten Datensätze im Grid zu setzen.

z.B. bei AfterInsert oder BeforePost
Uwe
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#27

Re: PosNummern in Rechnungsdaten

  Alt 11. Sep 2006, 19:47
Hallo Lombi,

du brauchst beide Generatoren - NextKey() ermittelt die nächste laufende Nummer und NextSubkey() macht das für einen sogenannten compound key (zusammengesetzter Schlüssel) - in deinem Fall Rechnungsdaten(RechNr, PosNr). Hier nochmal ausführlich, was dir Markus bereits am Anfang geschrieben hatte:

Delphi-Quellcode:
function NextKey (fldName, tblName: String): Integer;
begin
  with TQuery.Create do
  begin
    DatabaseName := QueryRechnungen.DatabaseName;
    SQL.Text := Format('SELECT MAX(%s) FROM %s', [fldName, tblName]);
    Open;
    Result := Succ(Fields[0].AsInteger);
    Close;
  end;
end;

function NextSubKey (
  keyValue: Integer; // RechNr Wert
  fldName, // RechNr Feldname
  subName, // PosNr FeldName
  tblName: String // Tabellenname
): Integer;
begin
  with TQuery.Create do
  begin
    DatabaseName := QueryRechnungen.DatabaseName;
    SQL.Text := Format('SELECT MAX(%s) FROM %s WHERE %s = %d', [subName, tblName, fldName, keyValue]);
    Open;
    Result := Succ(Fields[0].AsInteger);
    Close;
  end;
end;
Der Ansatz von Uwe führt zwar auch zum richtigen Ergebnis, aber die Vermischung von Datenmodell und GUI ist dabei nicht so schön.

Gute Nacht

marabu
  Mit Zitat antworten Zitat
LOMBI
(Gast)

n/a Beiträge
 
#28

Re: PosNummern in Rechnungsdaten

  Alt 13. Sep 2006, 11:18
Herzlichen Dank, auch für Eure Geduld mit einem Greenhorn in Sachen Progr.

@minzler
function PosNr(fldName, tblName: //String; RechNr: Integer//): Integer; Entschuldigung, hatte in dieser Zeile eine wesentliche Änderung übersehen!

Gruß
Lombi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 21:52 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