rechnungsformular mit fortlaufender rechnungsnummer

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: rechnungsformular mit fortlaufender rechnungsnummer

Re: rechnungsformular mit fortlaufender rechnungsnummer

von juetho » Fr, 14.12.2012 20:36

Gast hat geschrieben:SQL scheint ja alles mitzubringen, was dafür benötigt wird, warum aber kann ich diesen Schritt nur über Umwege (BASIC) automatisiert geschehen lassen?
Wie ich schon sagte: SQL (und damit die/jede Datenbank) stellt die Voraussetzungen zur Verfügung, aber machen muss es der Anwender oder derjenige, der ein Anwendungsprogramm erstellt.

Ohne Basic geht es beispielsweise über eine StoredProcedure (SP), also eine Möglichkeit der Datenbank. Dabei stößt man freilich an die Grenzen von HSQL, das insofern nur eine einfache Basis-Datenbank zur Verfügung stellt. SPs sind wohl möglich, aber noch viel komplizierter zu bauen als das o.g. Makro. Du solltest auch bedenken, dass Base keine Datenbank ist, sondern "nur" eine Benutzeroberfläche zur einfachen Arbeit mit einer Datenbank. Diese "einfache Arbeit" hat eben auch ihre Grenzen: Nicht alles, was mit einer Programmiersprache (Delphi/Pascal, C/C++/C#, Visual Basic) möglich ist, kann in einer solchen Benutzeroberfläche bereitgestellt werden.

Jürgen

Re: rechnungsformular mit fortlaufender rechnungsnummer

von juetho » Fr, 14.12.2012 17:16

Für die nächste Rechnungsnummer nutze ich praktisch dasselbe Verfahren wie im Vorschlag von F3K.
cashew hat geschrieben:An sich - zumindest manuell und direkt im SQL-Kommando-Fenster - ist dies ja per SQL-Befehl möglich zB:

Code: Alles auswählen

INSERT INTO "rechnung" ("nummer") ( SELECT MAX ("id")+1 FROM "rechnung")
aber das ist wohl ein Holzweg, da man in Abfragen keine manipulativen Kommandos verpacken darf. (warum eigentlich?)
Eine Abfrage ist eine Abfrage, also ein Holen von Informationen aus der Datenbank heraus zur weiteren Verarbeitung oder Anzeige. Es sollte selbstverständlich sein, dass dabei nichts in der Datenbank geändert werden darf; welchen Zustand sollte die Datenbank denn sonst beim SELECT liefern - den vorherigen, den geänderten oder irgendeinen Zwischenwert? SQL verarbeitet immer Datenmengen; alles andere widerspricht dem Wesen eines RDBMS.
cashew hat geschrieben:der andere Weg, die Primärschlüssel-Spalte zu "missbrauchen" ist auch nicht ideal, da durchs evtentuelle Löschen
eines Datensatzes ja Lücken in der Nummerierung entstehen würden.
So ist es.
Bekommt man dies ohne Makros irgendwie gebacken? Oder ist es wirklich so, dass solcherlei (in meinen Augen simple) Dinge
die Möglichkeiten von BASE übersteigen?
Das sind für ein spezielles Anwendungsgebiet "simple" Dinge, die haben aber nichts mit den eigentlichen Aufgaben einer Datenbank zu tun. Bei jeder Datenbank (egal ob HSQL oder MySQL oder M$-SQL oder Oracle oder ...) muss so etwas der Nutzer selbst regeln. Das geht entweder über eine StoredProcedure oder über ein solch einfaches Makro. Übrigens ist SEQUENCE kein SQL-Standard, sondern wird nur von einigen DBMS angeboten.

Für die führenden Nullen sehe ich im Eingabeformular keinen Sinn (beim Drucken schon, aber das ist ein anderes Thema). Aber wenn du es unbedingt machen willst: Ersetze das numerische Feld durch ein formatiertes Feld und lege bei der Eigenschaft Formatierung die Anzahl der führenden Nullen fest. Jürgen

Re: rechnungsformular mit fortlaufender rechnungsnummer

von F3K Total » Fr, 14.12.2012 16:28

Hi,
ohne Makro wird es mit der eingebetteten HSQL DB schwierig, aber die paar Zeilen?

Code: Alles auswählen

Sub S_insert_next_number(event)
    oForm = event.source.model.parent
    oForm.movetoinsertrow
    oconnection = oform.activeconnection
    SQLStatement = oconnection.createstatement
    ssql = "SELECT MAX (""ID"") FROM ""rechnung"""
    sqlResult = SQLStatement.executequery(ssql)
    if sqlResult.next then nID = sqlResult.getint(1) + 1
    oform.updateint(1,nID)
    oform.insertrow
End Sub
Die führenden Nullen kannst Du ohne Makro, per Abfrage generieren, siehe Beispiel.

Viel Erfolg, Gruß R
Dateianhänge
Fortlaufende_Rechnungsnummer.odb
(13.37 KiB) 365-mal heruntergeladen

Re: rechnungsformular mit fortlaufender rechnungsnummer

von lorbass » Fr, 14.12.2012 16:05

Ich habe zwar keine Erfahrung mit BASE, aber vielleicht hilft's ja doch: Zur Verwaltung eindeutiger Nummern verwenden RDBMS typischerweise SEQUENCE-Objekte, die bei jedem Abruf einen Zähler automatisch inkrementieren.

Gruß
lorbass

rechnungsformular mit fortlaufender rechnungsnummer

von cashew » Fr, 14.12.2012 13:19

Hallo Leute,
glaubt mir, ich habe nun stundenlang gesucht / probiert / verworfen, habe viele sehr ähnliche,
aber keinen mir weiterhelfenden Foren-Beitrag gefunden.
Es geht um folgendes:
Ich möchte mit BASE eine Datenbank inkl. Eingabeformular für Rechnungsstellung erstellen.
Dazu bräuchte ich ein Tabellenfeld mit einer fortlaufenden Nummer für die Rechnungsnummer, welche
- mit führenden Nullen versehen sein sollte.
- automatisch in die entsprechende Datenbankspalte eingetragen wird beim Abspeichern des Datensatzes.

An sich - zumindest manuell und direkt im SQL-Kommando-Fenster - ist dies ja per SQL-Befehl möglich zB:

Code: Alles auswählen

INSERT INTO "rechnung" ("nummer") ( SELECT MAX ("id")+1 FROM "rechnung")
aber das ist wohl ein Holzweg, da man in Abfragen keine manipulativen Kommandos verpacken darf. (warum eigentlich?)

der andere Weg, die Primärschlüssel-Spalte zu "missbrauchen" ist auch nicht ideal, da durchs evtentuelle Löschen
eines Datensatzes ja Lücken in der Nummerierung entstehen würden.

Bekommt man dies ohne Makros irgendwie gebacken? Oder ist es wirklich so, dass solcherlei (in meinen Augen simple) Dinge
die Möglichkeiten von BASE übersteigen?
Sollte jemand im Netz was gefunden haben, was ich übersehen hab, dann sehts mir nach, ich hab echt lang gesucht.

großes danke und grüße,
cashew

Nach oben