Fehler bei Tabelle Speichern: Datensatz zu groß

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Fehler bei Tabelle Speichern: Datensatz zu groß

Beitrag von juetho »

mergjo60 hat geschrieben:Ab dem 8. Feld erscheint beim Versuch zu speichern die Fehlermeldung: "Datensatz zu groß".
Die Fehlermeldung ist eindeutig: Ein Datensatz kann im Normalfall eine maximale Größe nicht überschreiten. Dabei wird in erster Linie die Summe der einzelnen Felder geprüft. Deren Speicherbedarf steht im Base-Handbuch auf Seite 269 ff.

Bei jedem Datenbanksystem wird die maximale Größe eines Datensatzes auf unterschiedliche Weise geregelt; bei einem "modernen" System gibt es Wege, die Größe zu überschreiten (beispielsweise indem BLOB-Felder ausgelagert werden). Die interne HSQL-Datenbank ist eher als "nicht modern" anzusehen, sodass die Grenze wirksam wird. Leider finde ich in der Dokumentation keinen Hinweis auf diesen Wert.

Wenn du die Definition der Felder und ihren Zweck genauer angibst, können wir dir Auswege nennen. Dann brauchen wir aber mehr Informationen. Es ist doch seltsam, dass bei den Hinweisen zur Forumsbenutzung gleich am Anfang auf notwendige Angaben hingewiesen wird, dies aber immer wieder ignoriert wird. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Fehler bei Tabelle Speichern: Datensatz zu groß

Beitrag von RobertG »

Hallo merjo60,

Ich habe das durchgetestet: 12 Felder als LONGVARCHAR (Du schreibst LongText) - obwohl jedes Feld theoretisch über 500 000 DIN A4-Seiten aufnimmt, macht Base beim Abspeichern der Tabellendefinition hier keine Probleme. Warum bei Dir nach 7 Feldern Schluss ist entzieht sich meiner Kenntnis.

Ich verwende LO 3.3.4 unter OpenSuSE 11.4, 32bit

Gruß

Robert
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Fehler bei Tabelle Speichern: Datensatz zu groß

Beitrag von RobertG »

Hallo mergjo60,
mergjo60 hat geschrieben: Ich selbst habe mit MS Access eine umfangreiche Kunden-Datenbank erstellt. Diese will/muss ich nun für OpenOffice "anpassen", da einige Kollegen kein MS Access besitzen. Nun versuche ich hier klar zu kommen. Bin aber kurz vorm verzweifeln und ziemlich enttäuscht von OO.
Einfach die Datenbank aus Access importieren geht ja auch nicht. Es werden nur Tabellen importiert und die in Access vorhandenen Abfragen werden in OO komischerweise zu Tabellen. Also muss ich die neu anlegen. Berichte und Formulare bekomme ich gar nicht importiert.
Hier komme ich als langjährger StarOffice/OpenOffice/LibreOffice-Nutzer nicht um eine Retourkutsche drum herum: Versuche das ganze einmal umgekehrt mit einer Datenbank von OpenOffice nach Access. Ich kenne Access nicht weiter - wie Du Base vermutlich nicht. Ich kann mir aber vorstellen, dass meine Enttäuschung ähnlich sein wird, wenn ich mich dem Glauben hingegeben hätte, das, was die grafische Oberfläche zur Verfügung stellt, könnte ich in die jeweils andere Programmwelt hinüberretten. Abfragen rette ich natürlich besser, indem ich den SQL-Code nehme und da gegebenenfalls anpasse - der ist nämlich von Datenbank zu Datenbank mit Unterschieden versehen, wenn es um Funktionen geht.
mergjo60 hat geschrieben: Das mit dem Fehler "Datensatz zu groß" hab ich nun verstanden und schon ändern können - "Text [LongText]" hab ich in "Text [VarChar]" geändert.
Da scheint dann AOO 3.4 andere Bezeichnungen zu nutzen als die Vorgänger und LO. Ich habe die Version AOO 3.4 nicht, kann aber nur sagen: Bei mir steht überall nur die Textauswahl zwischen Text[VARCHAR] und Text[VARCHAR_IGNORECASE]. Dann gibt es noch Text(fix)[CHAR]. Und schließlich das Feld, das Du wohl irrtümlich verwandt hast: Memo[LONGVARCHAR].
mergjo60 hat geschrieben: - Bei manchen Feldern ändert OO die Feldtypen "Text [VarChar]" selbständig in "SQL Null [ ]". Warum???
Auch hier scheint AOO 3.4 völlig andere Wege zu gehen als alle anderen Versionen. Von einem "SQL Null[]" habe ich noch nie gelesen. Diesen Feldtyp bietet zumindest die interne HSQLDB auch gar nicht an. Was soll da gespeichert werden? Nichts? Schaue doch bitte einmal, ob tatsächlich beim Erstellen einer Tabelle bei Dir so ein Typ auftaucht - oder ob es sich hier eventuell um ein Importproblem von Access nach Base-HSQLDB handelt.
mergjo60 hat geschrieben: - Die Feldnamen werden beim Speichern alphabetisch sortiert und der Entwurf damit "unübersichtlich". Kann man das irgendwo einstellen/verhindern???
Auch das muss ein neues "Feature" von AOO 3.4 sein - habe ich auch noch in keiner Version gehabt.
mergjo60 hat geschrieben: Jetzt suche ich nach einer Möglichkeit, Daten nach Monaten zu filtern, z. B. Geburtstage - alle finden, die im April Geburtstag haben. Leider kann man in Abfragen offenbar keine Platzhalter wie "*" oder "?" nutzen. Die Daten sollen im Format TT.MM.JJJJ eingegeben werden. Die einfachste, aber unprofessionellste Lösung scheint mir ein Extrafeld mit dem Monat anzulegen und dann danach zu filtern. Oder geht das eleganter?
Schau Dir einfach einmal in der Hilfe die Eingabe von Parameterabfragen an. Dann erscheint ein Eingabefeld. Das, was Du da dann eingibst, wird an entsprechender Stelle der Abfrage übernommen. Nach den obigen Merkwürdigkeiten weiß ich aber nicht, ob das bei Dir der Fall sein wird:

Code: Alles auswählen

SELECT "Name", "Datum" FROM "Tabelle" WHERE MONTH("Datum") = :Monat
Gibt bei mir zumindest ein Fensterchen, in das ich dann eine Ziffer eintrage (von 1 bis 12) und entsprechend dazu die Datums- und Namensangaben erhalte.
Jetzt willst Du das sicher auch noch geordnet haben:

Code: Alles auswählen

SELECT "Name", "Datum" FROM "Tabelle" WHERE MONTH("Datum") = :Monat ORDER BY DAY("Datum")
Ich weiß natürlich nicht, ob Du Dir eine Parameterabfrage vorstellst. Dann musst Du konkreter werden, was Du unter Platzhalter wie "*" verstehst.

Gruß

Robert
mergjo
Beiträge: 1
Registriert: Mi, 07.11.2012 14:22
Wohnort: Potsdam

Re: Fehler bei Tabelle Speichern: Datensatz zu groß

Beitrag von mergjo »

Hallo RobertG, vielen Dank!
Ich füge hier einfach mal ein paar screenshots ein:

Feldtypen und alpabetische Sortierung:
Bild

Hier die Platzhalter in Access (*). Damit geht die Monatsabfrage kinderleicht.
Bild

Deine Abfrage mit dem Datum funktioniert bei mir irgendwie nicht wirklich:
Bild

Oder hab ich da nen Denkfehler?

Ich werd mir wohl das LibreOffice downloaden und noch mal von vorn anfangen.

Nochmals vielen Dank euch allen.
Gruß mergjo60
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Fehler bei Tabelle Speichern: Datensatz zu groß

Beitrag von F3K Total »

Hallo mergjo,

eigentlich ist es ein neues Thema, "Datum filtern", hat mit "Datensatz zu groß" nichts mehr zu tun.
Um dir mal zu zeigen, was mit OpenOffice Base alles geht, anbei ein Beispiel zum Filtern nach dem Monat.
Das geht mit oder ohne Makro.
Um beides zu sehen, muß unter Extras/Optionen/OpenOffice.org/Sicherheit/Makrosicherheit die Ausführung von Makros z.B. durch Stufe "Mittel" zugelassen werden.
Wenn Du in der Datei das Formular "GeburtstagsFilter" öffnest, ist das Makro ausgeschaltet.
Jetzt kannst Du den Monat wählen und auf "Filtern" klicken.
Zwei Klicks, ohne Makro.
Schaltest Du mit dem rechten Button das Makro ein, wird das Formular direkt nach dem Ändern des Monats gefiltert.
Ein Klick, mit Makro.

Grundsätzlich habe ich zwei Tabellen benutzt.
Die erste Tabelle "Filter" hat nur eine Zeile und das soll auch so bleiben.
Darum hat das Formular "Filter" folgende vier Eigenschaften:
  • Daten hinzufügen: Nein
  • Daten ändern: Ja
  • Daten löschen: Nein
  • Nur Daten hinzufügen: Nein
Der Inhalt des Unterformulares "Personen" ist eine SQL-Abfrage:

Code: Alles auswählen

SELECT * FROM "Personen" WHERE ( MONTH( "Geburtstag" ) = :qMonth OR MONTH( "Geburtstag" ) > 0 AND :qMonth IS NULL )
Das Formular Personen ist über den Parameter qMonth an das Feld Monat der Tabelle Filter gebunden.
Ob mit oder ohne Makro, es passiert Folgendes:
Mit dem Auswahllistenfeld wird die Monatszahl (Siehe Listeninhalt/Reiter Daten des Listenfeldes) des gewählten Monates in Tabelle Filter eingetragen. Mit dem Klick auf "Filtern" wird das Formular Personen aktualisiert, qMonth ist dabei die eben in Tabelle Filter eingetragene Monatszahl.
Das Makro erledigt ledig das Aktualisieren automatisch.

Wenn Du genau hinschaust, wirst Du feststellen, dass der November in der Auswahlliste des Listenfeldes nicht vorhanden ist. Dies liegt daran, dass das Listenfeld mit diesem SQL-Befehl befüllt wird:

Code: Alles auswählen

SELECT DISTINCT MONTHNAME( "Geburtstag" ) AS "Monatsname", MONTH( "Geburtstag" ) AS "Nummer" FROM "Personen" ORDER BY "Nummer" ASC
Da keine der Personen in Tabelle "Personen" im November Geburtstag hat, kann auch kein November gefunden werden.

Beste Grüße R
Dateianhänge
Geburtstagsfilter.odb
(15.12 KiB) 84-mal heruntergeladen
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Fehler bei Tabelle Speichern: Datensatz zu groß

Beitrag von RobertG »

Hallo mergjo,

über die Feldtypen kann ich nur staunen. Habe ich, wie gesagt, noch nie gesehen.

Eigentlich müsste die Abfrage von Dir klappen, wenn es sich wirklich um ein Feld mit Datum handelt (bei Dir sind das aus irgendeinem Grunde Timestamp-Felder). Du kannst die Abfrage auch mit der Eingabe der einfachen 4 (für April) direkt laufen lassen - schließlich ist es der 4. Monat. Es wird nicht ein bestimmter Text gesucht (wie anscheinend bei Access), sondern tatsächlich der April als 4. Monat.

Kriterieneingabe mit "Wie": Hier werden in SQL standardmäßig nur Texte mit untersucht. Als Platzhalter dienen hier "%" für beliebig viele Stellen und "_" für eine Stelle. Würde also das Datum als Text gespeichert, so müsste entsprechend " Wie '__.04.____' " zum Ziel führen. Allerdings ist das Abspeichern eines Datums als Text eigentlich nicht das, was in einer Datenbank gemacht werden sollte. Ein Datum gehört in ein datumsfeld, damit ein Filter vernünftig funktioniert und die Datumseingabe auch sichergestellt werden kann.

Gruß

Robert
Antworten