von Comenius » Sa, 16.05.2009 16:26
Hallo eBayer,
danke für die schnelle Antwort! Hintergrund meiner Anfrage ist der: Ich habe neben der Kundendatei (Kundennummer als Primärschlüssel) auch noch eine Tabelle "Bestellungen" (dort ist die Bestellnummer der Primärschlüssel; der Datensatz enthält auch Kundenummer und Bestelldatum) und eine weitere Tabelle "Bestellpositionen". Die Beziehungen sind wohl klar (Kundennummer aus Tabelle "Kundendatei" ist 1:n-bezogen auf Kundennummer in Tabelle "Bestellungen"; Bestellnummer in Tabelle "Bestellungen" ist 1:n-bezogen auf Bestellnummer in Tabelle "Bestellpositionen").
Die Crux ist die: Wenn ich in Base bei der Tabelle "Bestellungen" den Primärschlüssel "Bestellnummer" auf "Auto-Inkrement" setze, dann ist das programmiertechnisch-logisch zwar gut, aber wenn ich bei der Dateneingabe im Formularfeld auf "neuen Datensatz" klicke, diesen aber leer lasse, dann zählt Base bereits diesen Versuch als neue Bestellnummer. In die Tabelle wird zwar nix reingeschrieben, aber bei der nächsten Bestellaufnahme ist der Primärschlüssel bereits eins zu hoch. Anders ausgedrückt: Durch die automatische Schlüsselvergabe werden einige Nummern gar nicht mit Datensätzen beschrieben, sondern übergangen, nämlich dann, wenn in der Formular-Eingabe auf "Neuer Datensatz" geklickt, dieser aber leer gelasen wird. Das möchte ich verhindern, indem nicht automatisch hochgezählt wird, sondern per Makro oder SQL-Befehl (MAX auslesen und von Hand um 1 erhöhen als neuer default-Wert). Dass ich später einmal - sollte ich Datensätze in der Bestellungen-Tabelle von Hand löschen - Lücken erzeuge, ist schon klar. Aber zumindest wurde bei der Eingabe mal jede Bestellnummer "zu recht" vergeben.
So, und nun? Mir fällt spontan was ein: Ein Befehlsknopf "neue Bestellnummer", der mit einem Makro gefüttert wird: Lese Max-Wert aus Spalte "Bestellnummer" in Tabelle "Bestellungen" aus, erhöhe um 1 und schreibe in Formularfeld "Bestellnummer". Dafür reicht aber mein Starbasic nicht aus ...
Mein zweites Problem ließe sich ebenso lösen: Sobald ein Wert in das Feld "Artikelnummer" eingegeben wurde, soll Base in der Tabelle "Produktpalette" nach dem passenden Datensatz mit dieser Artikelnummer suchen und den zugehörigen Wert "Preis" in das Formularfeld "Preis" eintragen.
Kennt sich vielleicht einer im Forum so gut mit der Makroprogrammierung aus? Das wäre wirklich klasse!
Viele Grüße
Jürgen
Hallo eBayer,
danke für die schnelle Antwort! Hintergrund meiner Anfrage ist der: Ich habe neben der Kundendatei (Kundennummer als Primärschlüssel) auch noch eine Tabelle "Bestellungen" (dort ist die Bestellnummer der Primärschlüssel; der Datensatz enthält auch Kundenummer und Bestelldatum) und eine weitere Tabelle "Bestellpositionen". Die Beziehungen sind wohl klar (Kundennummer aus Tabelle "Kundendatei" ist 1:n-bezogen auf Kundennummer in Tabelle "Bestellungen"; Bestellnummer in Tabelle "Bestellungen" ist 1:n-bezogen auf Bestellnummer in Tabelle "Bestellpositionen").
Die Crux ist die: Wenn ich in Base bei der Tabelle "Bestellungen" den Primärschlüssel "Bestellnummer" auf "Auto-Inkrement" setze, dann ist das programmiertechnisch-logisch zwar gut, aber wenn ich bei der Dateneingabe im Formularfeld auf "neuen Datensatz" klicke, diesen aber leer lasse, dann zählt Base bereits diesen Versuch als neue Bestellnummer. In die Tabelle wird zwar nix reingeschrieben, aber bei der nächsten Bestellaufnahme ist der Primärschlüssel bereits eins zu hoch. Anders ausgedrückt: Durch die automatische Schlüsselvergabe werden einige Nummern gar nicht mit Datensätzen beschrieben, sondern übergangen, nämlich dann, wenn in der Formular-Eingabe auf "Neuer Datensatz" geklickt, dieser aber leer gelasen wird. Das möchte ich verhindern, indem nicht automatisch hochgezählt wird, sondern per Makro oder SQL-Befehl (MAX auslesen und von Hand um 1 erhöhen als neuer default-Wert). Dass ich später einmal - sollte ich Datensätze in der Bestellungen-Tabelle von Hand löschen - Lücken erzeuge, ist schon klar. Aber zumindest wurde bei der Eingabe mal jede Bestellnummer "zu recht" vergeben.
So, und nun? Mir fällt spontan was ein: Ein Befehlsknopf "neue Bestellnummer", der mit einem Makro gefüttert wird: Lese Max-Wert aus Spalte "Bestellnummer" in Tabelle "Bestellungen" aus, erhöhe um 1 und schreibe in Formularfeld "Bestellnummer". Dafür reicht aber mein Starbasic nicht aus ...
Mein zweites Problem ließe sich ebenso lösen: Sobald ein Wert in das Feld "Artikelnummer" eingegeben wurde, soll Base in der Tabelle "Produktpalette" nach dem passenden Datensatz mit dieser Artikelnummer suchen und den zugehörigen Wert "Preis" in das Formularfeld "Preis" eintragen.
Kennt sich vielleicht einer im Forum so gut mit der Makroprogrammierung aus? Das wäre wirklich klasse!
Viele Grüße
Jürgen