Tabelle per Makro erstellen, löschen, ect.

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

VolkerH
*
Beiträge: 15
Registriert: So, 22.05.2016 16:01

Tabelle per Makro erstellen, löschen, ect.

Beitrag von VolkerH »

ich muß folgemnde Aufgabe lösen.
Thema: Protokollieren von Anwesenkeit.
In einer Datenbank möchte ich in monatlichen Tabellen eine Anwesenheit von Personen Dokomentieren.
Wobei die Zeilen die Namen und Zimmernummern enthalten und die Spalten das Datum.
Am Monatsende soll die Tabelle als calc Tabelle ausgegeben,gespeichert werden und in der Datenbank gelöscht und neu für den nächsten Monat erstellt werden. Wobei alle Felder auf den Wert 1 gesetzt werden sollen, die an händisch in der Tabelle/ Formular geändert werden können.
Später möchte ich wenn neue Bewohner einziehen die an die Tabelle anfügen.

Nun habe ich ein SQL Statement getestet:

DROP TABLE "Tbl_Anwesend"

SELECT "Tbl_Bewohner"."Name" || + ( ' ' ) + "Tbl_Bewohner"."Vorname"
|| + ( ' ' ) + "Tbl_Bewohner"."Zimmer" AS "Name"INTO "Tbl_Anwesend"
FROM"Tbl_Bewohner" WHERE "Abgemeldet" IS NULL

ALTER TABLE "Tbl_Anwesend" ADD"1" VARCHAR(35)ADD"2" VARCHAR(35)

UPDATE "Tbl_Anwesend"SET "1" = 1


Das funktioniert , nach den aktualisieren der Tabellen kann ich sie mir anschauen aber nicht bearbeiten.
Wenn ich danach die Datenbank schließe und neu starte bekomme ich eine Fehlermeldung über fehlende Tabelle weil im Script in zwei Zeilen diese erstelle Tabelle auftaucht!
Hier komme ich nicht weiter! Bitte um Hilfe!

Gruß Volker
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Tabelle per Makro erstellen, löschen, ect.

Beitrag von RobertG »

Hallo Volker,

mehrere nacheinander folgende Befehle werden entweder getrennt abgeschickt oder über ein Semikolon beendet.
VolkerH hat geschrieben: DROP TABLE "Tbl_Anwesend"
Nach diesem Schritt existiert die Tabelle nicht mehr. Hier solltest Du den Befehl auch mit einem Semikolon beenden.
VolkerH hat geschrieben: SELECT "Tbl_Bewohner"."Name" || + ( ' ' ) + "Tbl_Bewohner"."Vorname"
|| + ( ' ' ) + "Tbl_Bewohner"."Zimmer" AS "Name" INTO "Tbl_Anwesend"
FROM "Tbl_Bewohner" WHERE "Abgemeldet" IS NULL
Warum Du mit || und zusätzlich noch + arbeitest ist mir unklar. Zumindest erstellst Du hier eine Tabelle "Tbl_Anwesend" mit dem Feld "Name" ohne einen Primärschlüssel. Die wird gleich zu Beginn mit Inhalt versehen, lässt sich aber nicht mehr editieren, da der Schlüssel fehlt.
VolkerH hat geschrieben: ALTER TABLE "Tbl_Anwesend" ADD"1" VARCHAR(35)ADD"2" VARCHAR(35)
Hier fügst Du 2 Textfelder hinzu, die Du anschließend aber mit Zahlen füllen willst. Warum nicht direkt Felder des Typs TINYINT?

Gruß

Robert
VolkerH
*
Beiträge: 15
Registriert: So, 22.05.2016 16:01

Re: Tabelle per Makro erstellen, löschen, ect.

Beitrag von VolkerH »

Hallo Robert, vielen Dank für Deine Hilfe! Für mich als "Lehrling" sind die SQL Begriffe Neuland.
Ich habe das Problem jetzt soweit gelöst:
Ich arbeite mit einer Tabelle Tbl_Anwesend mit 31 Spalten für die Wochentage die entweder am Monatsende gelöscht oder überschrieben werden kann.
Schön wäre noch eine Möglichkeit die überzähligen Spalten je nach Monat auszublenden bzw zu leeren.

Delete from"Tbl_Anwesend";
INSERT INTO "Tbl_Anwesend" ( "Bewohner_ID" ) SELECT("ID") FROM "Tbl_Bewohner"WHERE "Abgemeldet" IS NULL;
UPDATE "Tbl_Anwesend"
SET "1"= 1;
UPDATE "Tbl_Anwesend"
SET "2"= 1;

ect. bis 31

Gruß Volker
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Tabelle per Makro erstellen, löschen, ect.

Beitrag von RobertG »

Hallo Volker,

die Update-Befehle laufen ins Leere. Du müsstest lauter Alter-Befehle anschließen und dann die Felder befüllen.

Mir ist nicht klar, warum Du überhaupt so eine Tabelle erstellst. Du hast doch bereits irgendwo anders die Anwesenheit stehen. Da müsstest Du doch mit einer Abfrage zum Ziel kommen, oder?

Die Grundtabelle für so ein Verfahren hätte nur zwei Felder:
Bewohner_ID und Datum_anwesend - beide zusammen wären Primärschlüssel, um Doppler zu verhindern.
Solch eine Tabelle müsste ausgewertet werden.

Gruß

Robert
Antworten