[gelöst] Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 11:22

Hi,

ich sehe gerade, dass bei uns das Feld des PK in der Tabelle 79 leer ist. Ich habe jetzt zwar noch keine Auswirkungen festgestellt, aber das ist unlogisch.

Ist das nur bei mir so? Darf das sein?

Volker


NVA2009R2 (32012)
Zuletzt geändert von vsnase am 4. Juli 2013 11:56, insgesamt 1-mal geändert.

Re: Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 11:25

Wenn ich mich nicht irre ist das in allen Setup- Tabellen so, die nur einen Datensatz enthalten.

Gruß, Fiddi

Re: Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 11:25

vsnase hat geschrieben:ich sehe gerade, dass bei uns das Feld des PK in der Tabelle 79 leer ist. Ich habe jetzt zwar noch keine Auswirkungen festgestellt, aber das ist unlogisch.


Ganz im Gegenteil:
  • Einrichtungstabellen im NAV-Standard haben als Primärschlüssel lediglich das Feld "Primary Key"
  • Dieses Feld ist - in Standard-Einrichtungstabellen und ohne Anpassungen - immer leer
  • Geregelt wird dies durch folgenden Code im Form- bzw. Page-Trigger OnOpenForm/Page:
    Code:
    RESET;
    IF NOT GET THEN BEGIN
      // wurde dieses Form/Page noch nie geöffnet:
      INIT; // es findet keine explizite Befüllung statt
      INSERT; // trotzdem wird der (leere) Datensatz angelegt
    END;

Re: Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 11:53

Na dann kann ich ja beruhigt weiter schlafen.

Volker

Re: Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 11:57

Ja das ist bei den Einrichtungstabellen immer so.

Man sollte auch tunlichst vermeiden die Einrichtungstabellen mit weiteren Datensätzen zu missbrauchen um beispielsweise Kosten für weitere Tabellen zu sparen.

mfg,
winfy

Re: [gelöst] Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 12:26

@winfy:
Kann dich beruhigen. Ich lese nur die Daten aus.

Volker

Re: [gelöst] Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 13:08

Ja, schlaf ruhig weiter! :wink:

Das ist schon ewig und drei Tage so in NAV und hat auch wie bereits von vielen anderen gesagt seine Berechtigung. Alle Tabellen, die nur einen Datensatz enthalten sollen, also vornehmlich Einrichtungstabellen, haben diesen PK, der unter normalen Umständen nicht gefüllt werden kann, weil er nirgendwo angezeigt wird und bearbeitet werden kann.

Interessanterweise ist das in der Datenbanktheorie gar nicht möglich. (Vielleicht rührt auch daher deine anfängliche Besorgnis?!) Der SQL-Server kennt sozusagen zwei Formen von "leer", einmal <LEER> ("", also ein "leerer String") und einmal <NULL> (wirklich gar nichts). Ich vermute jetzt, daß diese PKs intern alle mit <LEER> gefüllt werden, um der Datenbanktheorie nicht zu widersprechen. Auf Datenbankebene sieht das dann so aus, als wäre dieser PK gar nicht leer im Sinne der Systemvorgaben.

Allerdings gibt es ja noch die native Datenbank und da dieses Konstrukt schon sehr alt ist, hatte NAV früher etwas, was eigentlich laut Datenbanktheorie gar nicht erlaubt ist. Als ich das damals meiner Professorin vorstellte, wollte sie das erst gar nichts akzeptieren, daß ich mein Projekt richtig umgesetzt hatte. Das könnte ja nicht sein, daß es Datenbanken gibt, in denen ein leerer PK erlaubt ist. Hat mich einiges an Überzeugungsarbeit gekostet, daß mein Projekt doch noch akzeptiert wurde. Tja, so ist das manchmal, wenn Theorie auf Praxis trifft. :mrgreen:

Re: [gelöst] Tabelle 79 Company Info: Primärschlüssel leer

4. Juli 2013 13:29

HattrickHorst hat geschrieben:Ich vermute jetzt, daß diese PKs intern alle mit <LEER> gefüllt werden, um der Datenbanktheorie nicht zu widersprechen. Auf Datenbankebene sieht das dann so aus, als wäre dieser PK gar nicht leer im Sinne der Systemvorgaben.

Das kann man sogar verallgemeinern: NAV speichert niemals NULL-Werte in einem SQL-Server-Tabellenfeld ab. Das hat nichts mit der Frage nach PK oder nicht zu tun.

Wenn ein Textfeld in NAV leer erscheint, ist in Wirklichkeit ein Leerstring enthalten. Erscheint uns ein nummerisches Feld als leer, ist in Wirklichkeit eine 0 enthalten usw.

Umgekehrt erwartet NAV nicht-NULL-Felder - und "zickt" entsprechend, wenn durch externe Anwendungen oder manuelle Anlage NULL-Werte in NAV-Tabellen erzeugt werden.

Re: Tabelle 79 Company Info: Primärschlüssel leer

19. Juli 2013 17:11

Natalie hat geschrieben:
  • Einrichtungstabellen im NAV-Standard haben als Primärschlüssel lediglich das Feld "Primary Key"
  • Dieses Feld ist - in Standard-Einrichtungstabellen und ohne Anpassungen - immer leer
  • Geregelt wird dies durch folgenden Code im Form- bzw. Page-Trigger OnOpenForm/Page:
    Code:
    RESET;
    IF NOT GET THEN BEGIN
      // wurde dieses Form/Page noch nie geöffnet:
      INIT; // es findet keine explizite Befüllung statt
      INSERT; // trotzdem wird der (leere) Datensatz angelegt
    END;

Und hier für alle Interessierten "in ganz ausführlich":
NAV Design Pattern of the Week: Single-Record (Setup) Table