hol.sten hat geschrieben:kaisemar hat geschrieben:Nein, vor Deinem Hinweis hatten die Tabellen keinen Primary Key. Habe daher den Quellcode, mit dem die Tabellen generiert werden, abgeändert ... Beide Tabellen tun weiterhin ihren Zweck - lassen sich aber immer noch nicht in OOo Base bearbeiten... Sind die beiden PRIMARY KEY Definitionen falsch? Sollte eigetnlich der
Spezifikation entsprechen...
Ich habe mal eine OOo Base Datei angelegt und eine Tabelle
Person mit vier Spalten erzeugt:
- ID
- Name
- Vorname
- Geburtsdatum
Wenn ich dann der Spalte ID einen Primärschlüssel spendiere, kann ich Tabelleninhalte erfassen und ändern.
Die OOo Base Datei habe ich dann gespeichert, mit dem Windows Explorer kopiert, umbenannte in
MeineDB.zip und ausgepackt. Anschließend finde ich unter
MeineDB\database u. a. folgendes in der Datei
script:
Code: Alles auswählen
...
CREATE CACHED TABLE "Person"("ID" INTEGER NOT NULL PRIMARY KEY,"Name" VARCHAR(50),"Vorname" VARCHAR(50),"Geburtsdatum" DATE)
...
Im Vergleich zu deinem Create-Statement fallen mir zwei Unterschiede auf:
- Alle Namen (Tabelle, Spalte) sind in
" und
" eingeschlossen.
- Für die Primärschlüssel-Spalte ist zusätzlich
NOT NULL definiert.
Wenn beide Änderungen immer noch nicht zum gewünschten Ergebnis führen, würde ich an deiner Stelle einfach auch mal eine eigene OOo Base Datei anlegen und darin eine der eigenen gewünschten Tabellen definieren und mit Primärschlüssel versehen. Dann schaust du dir die Tabellenstruktur gemäß meiner obigen Beschreibung etwas genauer an und versuchst das
script nach zu programmieren.
Habe das CREATE-Statement entsprechend angepasst, hat leider nichts gebracht. Danach hab ich noch Deinen Tip befolgt, und in OOo Base die entsprechende Tabelle angelegt und mir die Skript-Dateien angeschaut. Das CREATE-Statement für die Tabelle PCs (
und auf die beschränke ich mich erst mal) ist 1:1 dasselbe, also vermute ich, dass es an den Anweisungen/Einstellungen drumherum liegt.
So sieht die mit OOo Base erzeugte Skript-Datei aus (farblich markiert sind die Unterschied zur unteren, aus Java erzeugten Skript-Datei):
SET DATABASE COLLATION "German"
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE CACHED TABLE "PCs"("ID" INTEGER NOT NULL PRIMARY KEY,"Rendite" FLOAT(10),"Risiko" FLOAT(10),"Liquidierbarkeit" FLOAT(10),"Variabilit\u00e4t" FLOAT(10),"Verwaltbarkeit" FLOAT(10),"Nachvollziehbarkeit" FLOAT(10))
SET TABLE "PCs" INDEX
'32 0'
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY
60
Zum Vergleich die mit Java erzeugte Skript-Datei:
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE CACHED TABLE "PCs"("ID" INTEGER NOT NULL PRIMARY KEY,"Rendite" FLOAT(10),"Risiko" FLOAT(10),"Liquidierbarkeit" FLOAT(10),"Variabilit\u00e4t" FLOAT(10),"Verwaltbarkeit" FLOAT(10),"Nachvollziehbarkeit" FLOAT(10))
CREATE MEMORY TABLE COVMATRIX(ID INTEGER NOT NULL PRIMARY KEY,COV1 FLOAT(10),COV2 FLOAT(10),COV3 FLOAT(10),COV4 FLOAT(10),COV5 FLOAT(10),COV6 FLOAT(10),COV7 FLOAT(10),COV8 FLOAT(10),COV9 FLOAT(10),COV10 FLOAT(10))
SET TABLE "PCs" INDEX
'272 0'
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY
10
SET SCHEMA PUBLIC
INSERT INTO COVMATRIX VALUES(1,0.405E0,0.0892E0,0.0025E0,0.0013E0,0.2313E0,0.2074E0,0.0E0,0.0109E0,0.0E0,0.0144E0)
INSERT INTO COVMATRIX VALUES(2,0.0892E0,0.0593E0,-0.0025E0,-0.0016E0,0.0959E0,0.103E0,0.0E0,0.0169E0,0.0E0,0.0055E0)
INSERT INTO COVMATRIX VALUES(3,0.0025E0,-0.0025E0,0.0013E0,0.0012E0,-0.0066E0,-0.0056E0,0.0E0,0.0028E0,0.0E0,0.0012E0)
INSERT INTO COVMATRIX VALUES(4,0.0013E0,-0.0016E0,0.0012E0,0.0013E0,-0.0043E0,-0.0036E0,0.0E0,0.0026E0,0.0E0,0.0010E0)
INSERT INTO COVMATRIX VALUES(5,0.2313E0,0.0959E0,-0.0066E0,-0.0043E0,0.2667E0,0.2397E0,0.0E0,0.0028E0,0.0E0,0.0023E0)
INSERT INTO COVMATRIX VALUES(6,0.2074E0,0.103E0,-0.0056E0,-0.0036E0,0.2397E0,0.2315E0,0.0E0,0.0139E0,0.0E0,0.0049E0)
INSERT INTO COVMATRIX VALUES(7,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0)
INSERT INTO COVMATRIX VALUES(8,0.0109E0,0.0169E0,0.0028E0,0.0026E0,0.0028E0,0.0139E0,0.0E0,0.0658E0,0.0E0,0.0127E0)
INSERT INTO COVMATRIX VALUES(9,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0,0.0E0)
INSERT INTO COVMATRIX VALUES(10,0.0144E0,0.0055E0,0.0012E0,0.0010E0,0.0023E0,0.0049E0,0.0E0,0.0127E0,0.0E0,0.0072E0)
Natürlich unterscheidet sich die untere Version noch durch die INSERT-Statements, aber die sollten keinen Unterschied machen.
Mache mich mal auf die Suche nach den entsprechenden unterschiedlichen Statements - wer hier aus dem Stegreif was weiss, bitte melden.
hol.sten hat geschrieben:Frage: Hast du mal versucht, nach deinen Änderungen an den Create-Statements eine neue OOo Base Datei anzulegen oder hast du immer mit der zuerst erstellten rumprobiert? Wenn das Ändern der Tabelleninhalte weiterhin nicht möglich ist, würde ich nach jeder Änderung der Create-Statements immer eine neue OOo Base Datei gemäß deines oben beschriebenen Vorgehens erstellen.
Nein, ich habe jedes Mal die alte DB geloescht und eine neue erzeugt, sowohl in Java als dann auch beim Anschauen mit OOo Base. Wobei hier eines seltsam ist: OpenOffice laeuft im Hintergrund weiter, auch wenn kein Fenster mehr offen ist. Dadurch sind auch die DB-Dateien nicht freigegeben und ich musste erst jedes Mal ueber den Taskmanager den Prozess beenden, um die DB-Dateien loeschen zu koennen...