Hallo Günter,
ich denke, wenn Du ein "select"-Statement machst, bekommst Du dadurch zwangsweise ein nur-lesbares Resultset, denn es beruht nicht auf einer Tabelle, sondern auf einer SQL-Abfrage.
Möglichkeit 1: Du nimmst die ganze Tabelle "Kuenstler" und legst evtl. einen Filter darauf, dann kannst Du updateString und updateRow machen.
Möglichkeit 2: Du bastelst Dir ein neues Statement und machst einen "UPDATE ..." SQL-Befehl
Hoffe, das hilft!
Gruß, Wolli
SQL-Query
Moderator: Moderatoren
Re: SQL-Query
Hallo Günter,
Für "Programmierung unter OO" gibt es das Unterforum Basic und Java, wohin alle Fragen zu Makros gehören. Ich habe einen Moderator gebeten, die Diskussion zu verschieben, und bitte dich dringend, die Diskussion nicht doppelt zu eröffnen. Danke für die Erledigung, lorbass!
In diesem Unterforum gibt es "ganz oben" Informationen zur StarBasic-Programmierung. Auch die dort genannten Links können helfen - auch zur Suche im Forum.
Zur Formatierung gibt es den Code-Button. Bitte markiere künftig Code als solchen; das liest sich erheblich besser und macht beispielsweise auch Einrückungen sichtbar. (Wenn du dich angemeldet hättest, könntest du das auch nachträglich korrigieren.)
Die gemeinsame Spalte hat in einer Tabelle nichts zu suchen. Die "atomaren" Informationen sind Vorname und Nachname. So müssen sie gespeichert werden. Wenn du die zusätzliche Information "Person" speichern würdest, wäre das eine doppelte Speicherung gleichartiger Information. Wenn irgendwann einmal ein Name geändert wird, muss auch "Person" geändert werden - eine ständige Fehlerquelle. Wenn du für einen Brief die weitere Schreibweise "Vorname + Leerzeichen + Nachname" haben willst, soll das als weitere Spalte gespeichert werden? Oder willst du mit einer komplizierten SQL-Funktion die Kombination "Person" auflösen und neu zusammensetzen? Nein, das einzig richtige Verfahren ist die getrennte Speicherung dieser Information. Siehe auch das Thema Normalisierung bei der "Einführung in SQL".
Sinnvoll ist stattdessen, die Kombination in einem SELECT zu erstellen, am einfachsten so:
Das geht dann genauso mit allen anderen Varianten, die du für Briefe oder Listen benötigst.
Wenn tatsächlich (solche oder andere) Informationen gespeichert werden sollen, gibt es in erster Linie den SQL-Befehl UPDATE, der auch per Makro ausgeführt werden kann (mit executeUpdate statt executeQuery):
Nach so vielen generellen Bemerkungen möchte ich noch auf deinen Code und deine Fehlermeldung eingehen. Es ist durchaus möglich, wenn auch mit SQL eher unüblich, das Ergebnis einer Abfrage UPDATABLE zu machen. Das geht aber nur dann, wenn die Tabelle einen Primärschlüssel (vorzugsweise ID als AutoWert) enthält und diese ID in der Abfrage enthalten ist; denn nur unter Bezug auf den Primärschlüssel können Änderungen in der Datenbank gespeichert werden. Vor allem diese Bedingung wird bei deinem Ablauf verletzt; das wird auch dadurch deutlich, dass sich mit dem Eintragen und Ausführen des SQL-Befehls der Wert von Updatable auf ReadOnly ändert.
Weiterhin frohes Schaffen! Jürgen
Hier sind einige Punkte zu nennen.Günter K hat geschrieben:Was mache ich falsch?
Für "Programmierung unter OO" gibt es das Unterforum Basic und Java, wohin alle Fragen zu Makros gehören. Ich habe einen Moderator gebeten, die Diskussion zu verschieben, und bitte dich dringend, die Diskussion nicht doppelt zu eröffnen. Danke für die Erledigung, lorbass!
In diesem Unterforum gibt es "ganz oben" Informationen zur StarBasic-Programmierung. Auch die dort genannten Links können helfen - auch zur Suche im Forum.
Zur Formatierung gibt es den Code-Button. Bitte markiere künftig Code als solchen; das liest sich erheblich besser und macht beispielsweise auch Einrückungen sichtbar. (Wenn du dich angemeldet hättest, könntest du das auch nachträglich korrigieren.)
Die gemeinsame Spalte hat in einer Tabelle nichts zu suchen. Die "atomaren" Informationen sind Vorname und Nachname. So müssen sie gespeichert werden. Wenn du die zusätzliche Information "Person" speichern würdest, wäre das eine doppelte Speicherung gleichartiger Information. Wenn irgendwann einmal ein Name geändert wird, muss auch "Person" geändert werden - eine ständige Fehlerquelle. Wenn du für einen Brief die weitere Schreibweise "Vorname + Leerzeichen + Nachname" haben willst, soll das als weitere Spalte gespeichert werden? Oder willst du mit einer komplizierten SQL-Funktion die Kombination "Person" auflösen und neu zusammensetzen? Nein, das einzig richtige Verfahren ist die getrennte Speicherung dieser Information. Siehe auch das Thema Normalisierung bei der "Einführung in SQL".
Sinnvoll ist stattdessen, die Kombination in einem SELECT zu erstellen, am einfachsten so:
Code: Alles auswählen
SELECT "nam" || ', ' || "vnam" AS "pers"
FROM "Kuenstler";
Wenn tatsächlich (solche oder andere) Informationen gespeichert werden sollen, gibt es in erster Linie den SQL-Befehl UPDATE, der auch per Makro ausgeführt werden kann (mit executeUpdate statt executeQuery):
Code: Alles auswählen
UPDATE "Kuenstler"
SET "pers" = "nam" || ', ' || "vnam";
Weiterhin frohes Schaffen! Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC