0

Datensatz nicht speichern

Wie kann ich eigentlich einen Datensatz NICHT speichern? Ich klicke z.B. in eine leere Zeile, darauf öffnet sich das Formular und mit ESC schließt sich das Formular und ich habe einen leeren Datensatz in der Tabelle. Gibt es außer gleich auf den Papierkorb zu klicken noch eine andere Möglichkeit? Ich glaube, meine Benutzer werden viele Leersätze erzeugen, weil sie glauben, wenn sie nichts eingegeben haben und auf ESC drücken, dass dann auch nichts gespeichert wird. ;-) 

LG, Peter

7 Antworten

null
    • Support
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Dies ist so leicht nicht möglich. Wenn ein neuer Datensatz geöffnet wird, werden einige Systemfelder sofort gefüllt ('Erstellt von' und 'Erstellt von'). Mögöicherweise werden auch Scripte ausgeführt, die weitere Felder befüllen.

    Birger

    • pbosch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    OK, verstehe. Ich habe jetzt einfach einen Button gemacht, der diese "Datensatzleichen" in allen Tabellen löscht. ;-)

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo, pbosch@aon.at,

    ich wäre an Deiner Lösung (Script) interessiert ( man lernt nie aus ).

    • pbosch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Holzi!
    Es ist nichts Besonderes und auch keine generelle Lösung. Ich checke einfach bei jeder Datenbank, ob die wesentlichen Felder leer sind. Wenn ja, lösche ich den Satz. So schaut der Code aus:

    delete (select Personen where Vorname = null and Nachname = null and Firma = null);
    delete (select 'Module und Workshops' where Von = null and Bis = null and Text = null);
    delete (select 'Mails Workshops' where Betreff = null and 'Empfänger' = null);
    delete (select Rechnungen where 'Rechnung Nr.' = null and Rechnungstext = null);
    delete (select Rechnungspositionen where Text = null and Betrag = null);
    delete (select TeilnehmerInnen where Personen = null or 'Module und Workshops' = null);
    delete (select Gruppenmail where Betreff = null and Mailtext = null);
    delete (select Kontobelege where Buchungsdatum = null and Partnername = null and Betrag = null);
    delete (select Preise where Code = null and Text = null);
    delete (select Kontenplan where Konto = null and Bezeichnung = null);
    delete (select Stammdaten where Kurzname = null and Name = null);
    alert("Alle Leersätze gelöscht.")

    Liebe Grüße,
    Peter

      • Sabine
      • vor 4 Monaten
      • Gemeldet - anzeigen

       Hallo Peter, danke für deine Programmierung, funktioniert super bei mir.

    • Holzi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    OK, trotzdem Danke für die schnelle Antwort.

    • Joerg.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Moin.

    Das Problem ist zwar schon ein paar Tage alt, bringt mich aber auch immer mal wieder zum Grübeln. Grundsätzlich ist es so, dass Ninox zwar Pflichtfelder kennt aber eben nicht so reagiert, wie man es von anderen Datenbanken kennt. Ich habe in meinen Formularen eine Schaltfläche eingebaut, mit der der Datensatz geschlossen werden soll. Daran müssen sich natürlich alle halten! Die Funktion hinter der Schaltfläche sieht so aus:

     

    let myPflichtfelder := Feld1 + "|" + Feld2 + "|" + Feld3 + "|" + Feld4 + "|" + Feld5 + "|" + Feld6;
    switch pflichtfelder(myPflichtfelder) do
       case -1:
       (delete this)
    case 1:
       (closeRecord())
    default:
       if dialog("Zu wenig Daten", " Soll Datensatz gelöscht werden?", ["Löschen", "Abbruch"]) = "Löschen" then
          delete this
       end
    end

     

    Und die globale Funktion, die hier aufgerufen wird, sieht so aus:

     

    "// PFLICHTFELDER:
     // Eingabe enthält Pflichtfelder, mit | voneinander getrennt.
     // Rückgabe: -1 (alles leer), 0 (mindestens eins leer), 1 (alle gefüllt)";
    function pflichtfelder(Eingabe : text) do
       let myEingabe := "|" + Eingabe + "|";
       let myAnz := 0;
       for myChar in myEingabe do
          if myChar = "|" then myAnz := myAnz + 1 end
       end;
       if length(myEingabe) = myAnz then
          -1
       else
          if contains(myEingabe, "||") then
             0
          else
             1
          end
       end
    end;

     

    Das Trennzeichen darf natürlich nicht in den Feldern vorkommen. Notfalls könnte man das auch als Parameter übergeben und ein Trennzeichen aussuchen, das in der jeweiligen Tabelle definitiv nicht vorkommt. Aber mit dieser Lösung fahre ich ganz gut.

     

    Viele Grüße, Jörg

Content aside

  • vor 4 MonatenZuletzt aktiv
  • 7Antworten
  • 1859Ansichten
  • 1 Folge bereits