Access: mehr als 256 Spalten
Hallo Community,
ich sitze nun seit ein paar Tagen vor einem großen Problem:
Es handelt sich um eine Art Fragebogen mit rund 500 Fragen. Access bietet allerdings nur maximal 256 Spalten.
Deshalb habe ich mir überlegt sie in mehreren Tabellen aufzuteilen und sie über eine Indexspalte zusammenzubehalten.
Wie löse ich allerdings das Problem, wenn ich einen neuen Datensatz einfüge? Es müsste automatisch ein neuer Datensatz in allen Tabellen angelegt werden (mit dem selben Index). Das selbe gilt auch für das Löschen.
Wichtig wäre mir, dass ich auf keinen Fall die Spaltenanzahl reduzieren muss. Es muss doch auch hierfür eine Lösung geben...
Vielen Dank für eure Hilfe schon im Voraus!
Antwort schreiben
Antwort 1 von RalfH vom 23.07.2020, 13:11 Options
Hallo Sarah2008,
Die Idee von dir, in verschiedenen Tabelle zu arbeiten ist super.
Gerade das macht ein relationales Datenbanksystem ja aus.
Allerdings solltest Du hier etwas über die Beziehungen der Tabellen wissen, und VBA wäre auch von Vorteil für Dich.
Die Fragen kannst du ja Katalogisieren und dadurch halt auf die Tabellen verteilen.
Den Index oder besser gesagt den Primärschlüssel kannst Du über VBA an die betreffenden Tabellen verteilen.
Gruß Ralf
Antwort 2 von Sarah2008 vom 23.07.2020, 14:11 Options
Hallo Ralf,
dachte ich mache eine 1:1 Beziehung zwischen den Tabellen. Mein Bsp.: Ich habe Tabelle1 und Tabelle2. Beide haben die Spalte IndexID. Wenn ich eine Abfrage (bzw. ein Formular) mache mit der Spalte1 bis Spalte3 von Tabelle1 und von Spalte1 bis Spalte3 von Tabelle2, dann funktioniert das auch. Allerdings kann ich in einer solchen Abfrage keinen neuen Datensatz einfügen. Außerdem weiß ich nicht wie die IndexID von Tabelle1 automatisch in die IndexID von Tabelle2 geschrieben werden kann.
Grüße
Sarah
Antwort 3 von RalfH vom 24.07.2020, 10:30 Options
Hallo Sarah,
Damit Du die Fragen auch auswerten kannst, muss eine Plausibilitätsprüfung mit eingebaut werden, die darauf achtet, dass auch alle Felder ausgefüllt sind.
Diese Prüfung und auch die Übergabe des Primärschlüssels(ID) kannst Du an einem Button legen.
Die erste Tabelle sollte den Primärschlüssel automatisch erhalten, also auf Autowert im Tabellenentwurf einstellen.
Der Button soll BEI KLICK folgendes tun:
Beispiel:
Private Sub DeinButton_Click()
' Befüllen einer Variable mit der ID
dim a as Integer
a= forms!DeinFormular1!DeinFeldmitID
'Prüfen ob die Felder befüllt sind
If isempty(me!DeinTextfeld) = true then
msgbox " Bitte geben Sie die Notwendigen Daten ein: "
me!DeinTextfeld.setfocus
elseif isempty(me!DeinnächstesTextfeld) = true then
msgbox " Bitte geben Sie die Notwendigen Daten ein: "
me!DeinnächstesTextfeld.setfocus
' den elseif Block für alle Felder erstellen
endif
' wenn alle Felder ausgefüllt sind, das aktuelle Formular schliessen, damit der Datensatz gespeichert wird
und der Bildschirm nicht überladen werden kann, und nun das nächste Formular laden und den Primärschlüssel übergeben.
docmd.openform("DasnächsteFormular",acNormal)
forms!DasnächsteFormular!FeldwodieIDreinkommt=a
end sub
Man kann das ganze auch über eine Schleife machen, aber so würde es vom Prinzip her gehen.
Gruß Ralf