Neuen Datensatz per Schaltfläche erstellen inkl. Verknüpfungen
Hallo,
ich erstelle gerade Wartungsplanung.
Umgesetzt werden soll folgendes:
Ein Wartungsvorgang, hier benannt als AKTION beinhaltet mehrere Vorgänge.
Beispiel: Bei der Aktion Motorwartung sollen die Vorgänge Ölwechsel und Filterwechsel ausgeführt werden. Sind alle Vorgänge als Erledigt markiert kann man per Schaltfläche die Aktion neu anlegen.
Es gibt folgenden Tabellen:
‚Aktionen‘ -> hier wird die Wartung geplant es gibt eine Rückverknüpfung von ‚Vorgänge bei Aktionen‘, in dieser Tabelle ist auch die Schaltfläche hinterlegt.
‚Vorgänge‘ -> hier werden die unterschiedlichen Vorgänge erfasst, es gibt eine Rückverknüpfung mit ‚Vorgänge bei Aktionen‘
‚Vorgänge bei Aktionen‘ -> hier werden Aktionen mit den Vorgängen zusammengeführt, es gibt eine Verknüpfung auf ‚Vorgänge‘ und eine Verknüpfung auf ‚Aktionen‘, hier werden Vorgänge auch als erledigt makiert
An einer Stelle komme ich allerdings nicht weiter. Es gelingt mir nicht, die Vorgänge mit in den per Schaltfläche aus dem vorhandenen in den neu angelegten Datensatz der Aktion zu übernehmen. Dort sollen die Vorgänge dann auch als nicht erledigt aufgeführt werden.
Bin für jede Hilfe dankbar.
VG
Andre
16 Antworten
-
Hallo Andre,
das ist ein interessanter Anwendungsfall. Ohne das Datenmodell genauer zu kennen, kann man dazu nicht allzuviel sagen.
Das Kopieren von Datensätzen ist in den meisten Fällen nicht notwendig/sinnvoll. Of reicht es z.B. Aktionen mit verschiedenen Stati zu versehen wie "Geplant", "In Bearbeitung" oder "Erledigt", wobei aber die Datensätze alle in der gleichen Tabelle verbleiben.
Das wäre eine gute Frage für unser Webinar und es wäre schön, wenn du sie dort einmal zur Sprache bringen könntest.
Dort können sicher auch einige Nutzer mit ähnlichen Anwendungsfällen Erfahrungen beisteuern.
Für das Webinar, das wöchentlich mittwochs stattfindet, kannst du dich über den folgenden Link anmelden:
https://zoom.us/webinar/register/WN_Asq34-biQxGS93h03BmyfQ
Vielen Dank.
Gruß, Jörg
-
Neue Idee...
Wenn ich den Datensatz manuell über das Menü kopiere werden alle Daten wie gewünscht übernommen. Ich müsste also nur noch das geplante Datum ändern.
Jetzt versuche ich gerde eine Schaltfläche dafür anzulegen. Ich versuche gerade mit "duplicate" den Datensatz zu duplizieren. Das gelingt mit aber nicht. Kann mit bitte mal jemand die Verwendung von "duplicate" erläutern?
Danke +VG
-
Sorry, Fehler meinerseits. Das Kopieren der Verknüpfungen mit den Untertabellen funktioniert leider doch nicht.
Duplicate habe ich inzwischen erfolgreich getestet, bringt mich aber in der Sache dann leider auch nicht weiter.
-
Ich verwende die duplicate Funktion öfters. Verknüpfte Untertabellen werden ebenfalls kopiert - natürlich muss man dann evtl. nach dem duplicate per Script die Status in der Untertabelle setzen, wenn diese sich nach der Kopie ändern (z.B. zurücksetzen) sollen, was man aber in einer Schleife gut lösen kann. Mann muss nur wissen dass man nach der dupklicate Funktion im ursprünglichen Datensatz stehen bleibt. Will man also den neu erzeugten ändern, muss man diesen erst öffnen. Ich löse das z.B. so:
let nralt := this.Nummer;
let zznew := duplicate(this);
openRecord(zznew); -
Kleine Korrektur:
wenn man so schreibt
let nralt := this;
let zznew := duplicate(this);
openRecord(zznew);kann man dann mit nralt.[Feldname] im neuen Datensatz auf die Felder des ursprünglichen
Satzes zugreifen und so auch gegenseitige Verknüpfungen setzen usw....
-
Vielen Dank, aber ich komme leider nicht weiter (bin aber auch Datenbank Neuling)
Ich schildere mein Problem noch einmal ausführlicher.
Tabelle1 -> Wartung
Tabelle2 -> Werkzeug
Tabelle3 -> Verknüpfung von Wartung und Werkzeug. Es sollen mehrere Werkzeuge mit einer Wartung verknüpft werden.
In Tabelle1 ( Wartung) möchte ich eine Schaltfläche mit die der Datensatz dupliziert wird. Dabei sollen auch die benötigten Werkzeuge wieder in dem neuen Datensatz angezeigt werden.
Das duplizieren funktioniert, die Werkzeuge werden aber nicht mit übernommen.
Nach meinem Verständnis müsste dazu in Tabelle 3 ausgelesen werden welche Verknüpfungen für die alte Wartung mit welchem Werkzeug vorhanden sind und dann auf dieser Basis neue Datensätze mit Verknüpfung von Werkzeug un neuer Wartung angelegt werden.
Oder wie auch immer man das umsetzten kann….
Oder ist meine Herangehensweise / Datenbankmodell ganz falsch?
-
Hallo Andre,
da je Wartung mehrere Werkzeuge zum Einsatz kommen - ein Werkzeug aber auch in mehreren Wartungen benötigt wird, ist Dein Ansatz mit der n:m-Beziehung mittels Deiner 'Tabelle3' vollkommen korrekt.
Der Trick ist es, in Deiner 'Tabelle3' die Verknüpfung zur Tabelle 'Wartung' als Komposition einzurichten, dann wird eine Befehlsschaltfläche mit dem Script
let myNew := duplicate(this);
popupRecord(myNew)
die Wartung wie gewünscht samt n:m-Verknüpfungen duplizieren.
Zum Spicken hab ich das mal grob nachgebaut:
https://www.dropbox.com/s/xgik09r9pzdnuae/Wartungen.ninox?dl=0
lg, Torsten
-
Danke Thorsten!
sieht genau nach dem aus, was ich gesucht habe.
ich probier das mal in meine Datenbank einzubauen.
VG
Andre
-
Ich hänge gleich mal noch eine Frage an:
In der Untertabelle soll es eine Checkbox "erledigt" geben.
Jetzt möchte ich eine Abfrage generieren mit der geprüft wird, ob alle zugehörigen Datensätze der Untertabelle als "erledigt" markiert sind.
let my := this;
let counter := 0;
for i in my.Task do
if Task.'durchgeführt' = false then
counter = counter + 1
end
end;
if counter = 0 then ergebnis := "ja" else ergebnis := "nein" endAls Ergebnis erhalte ich jedoch immer "ja"
-
Hallo Andre,
Man kann die Aufgabe auch ohne Schleifen erledigen:
---
if cnt(Task[not 'durchgeführt'])=0 then "ja" else "nein"
---
Nninox prüft die Anzahl der Datensätze in der Untertabelle Task, wo 'durchgeführt' nicht angeklickt ist (not 'durchgeführt' kann man auch mit 'durchgeführt'!=true ersetzen ). Wenn die Anzahl gleich Null ist, sind alle Datensätze erledigt.
Leo
-
Funktioniert bei mir nicht, ich hbae da wohl noch einen Fehler eingebaut.
Das Ergebnis soll als "ja" oder "nein" in dem Texfeld namens Ergebnis ausgegen werden
if 'VK Task bei Projekt'.'durchgeführt' = true then
ergebnis := "nein"
else
ergebnis := "ja"
endEs wird aber immer nur "ja" ausgegeben
-
Sorry habe in dem Beitrag dirket hier drüber die falschen Zeilen reinkopiert.
Ich verwende
if cnt('VK Task bei Projekt'.'durchgeführt') != true then
ergebnis := "Nein"
else
ergebnis := "Ja"
endund das Ergebnis ist immer JA
-
Hallo Andre,
die Eckklammern sind hier obligatorisch:
---
ergebnis:=if cnt('VK Task bei Projekt'[not 'durchgeführt'])=0 then "Ja" else "Nein"
---
Leo
-
Danke Leo :-)
-
Kann man die "Abfragerichtung" auch umdrehen?
Soll heißen, ist es möglich aus der Untertabelle in welcher sich die Checkbox "durchgeführt" befindet, bei setzen des Häkchens zu prüfen, ob in allen zum einem Projekt gehörigen Untertabellen die Checkbox durchgeführt gesetzt wurde um dann in einem Feld der Obertabelle Projekt einen Wert in einem Feld zu setzen?
-
Hallo Andre,
ja, das sollte auch möglich sein. Du kannst die einzelnen Bedingungen (also
cnt('VK Task bei Projekt'[not 'durchgeführt'])=0
) durch einand
mit einander verbinden und somit mehr als eine Untertabelle überprüfen.
Gruß, Jörg
Content aside
- vor 5 JahrenZuletzt aktiv
- 16Antworten
- 3498Ansichten