![]() |
Re: PosNummern in Rechnungsdaten
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... |
Re: PosNummern in Rechnungsdaten
Hallo,
mkinzler, dein SQL-Text ist falsch !
SQL-Code:
Es muss heissen
SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr = RechNr'; entweder
SQL-Code:
oder
SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr = '+IntToStr(RechNr);
SQL-Code:
Heiko
SQL.Text := 'SELECT MAX(Pos) FROM Rechnungsdaten WHERE
Rechnungsdaten.RechnungsNr = :RechNr'; ParamByName('RechNr').AsInteger:= rechNr; |
Re: PosNummern in Rechnungsdaten
Hi Tom.
Zitat:
Aber generell hast Du schon recht. Das ist ein Problem von vielen in einer Mehrbenutzeranwendung. |
Re: PosNummern in Rechnungsdaten
Zitat:
|
Re: PosNummern in Rechnungsdaten
Guten Abend,
ich bekomme das mit den Positionsnummern einfach nicht hin:
Delphi-Quellcode:
Fehlermeldung: "Undefinierter Bezeichner 'RechnungsNr'"
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;
Delphi-Quellcode:
Wer hilft mir bitte nochmals?
SQL.Text := Format('SELECT MAX(%s) FROM %s WHERE
Rechnungsdaten.RechnungsNr= :RechnungsNr', //":RechnungsNr" stammt aus Tabelle Rechnungen und ist vom Typ I(nteger)! Grüße Lombi |
Re: PosNummern in Rechnungsdaten
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 |
Re: PosNummern in Rechnungsdaten
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:
Der Ansatz von Uwe führt zwar auch zum richtigen Ergebnis, aber die Vermischung von Datenmodell und GUI ist dabei nicht so schön.
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; Gute Nacht marabu |
Re: PosNummern in Rechnungsdaten
Herzlichen Dank, auch für Eure Geduld mit einem Greenhorn in Sachen Progr.
@minzler
Delphi-Quellcode:
Entschuldigung, hatte in dieser Zeile eine wesentliche Änderung übersehen!
function PosNr(fldName, tblName: //String; RechNr: Integer//): Integer;
Gruß Lombi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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