🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Read-only Error in den Makros
Read-only Error in den Makros
Wenn man versucht über die Makros in LibreOffice Basic eine Tabelle zu bearbeiten wird immer der als Read-Only geöffnet Error ausgegeben. (siehe angehängte Bilder) Es funktioniert alles so weit, dass man mithilfe den Makros die Daten der Tabelle auslesen kann, aber sobald man eben z.B. durch den Befehl Dataset.Update versucht etwas zu ändern kommt der Error. Gibt es eine Möglichkeit um in den Makros die Tabelle nicht als Read-Only zu öffnen?
- Dateianhänge
-
- Getting_TablePNG.PNG (9.35 KiB) 2417 mal betrachtet
Re: Read-only Error in den Makros
Solch ein Code habe ich in Zusammenhang mit Base noch nicht gesehen. Liegt vermutlich daran, dass ich Base immer geöffnet habe und dort mit den Formularen arbeite.
Grundsätzlich: Nutze so etwas wie xray, um die entsprechenden Möglichkeiten eines Objekts zu untersuchen. Schreibe dann genauer auf, was Du überhaupt erreichen willst. Der Screenshot, den Du da gemacht hast, gibt dazu jedenfalls wenig her.
Wenn ich "readonly" sehe, dann fällt mir dazu nur ein, dass es sich vielleicht um das Auslesen einer Abfrage handelt. Die ist per Makro standardmäßig nur über Readonly (ResultSetConcurrency = 1007) erreichbar.
Grundsätzlich: Nutze so etwas wie xray, um die entsprechenden Möglichkeiten eines Objekts zu untersuchen. Schreibe dann genauer auf, was Du überhaupt erreichen willst. Der Screenshot, den Du da gemacht hast, gibt dazu jedenfalls wenig her.
Wenn ich "readonly" sehe, dann fällt mir dazu nur ein, dass es sich vielleicht um das Auslesen einer Abfrage handelt. Die ist per Makro standardmäßig nur über Readonly (ResultSetConcurrency = 1007) erreichbar.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Read-only Error in den Makros
Also es Geht darum bei der Tabelle IO_SIG die Spalte SIG_TYPE bestimmte di_/do_/ai_/ao_/cn_ (abhängig von SIG_ID siehe Anhang) durch rtdi_/rtdo_/... zu ersetzen. Mit dem Querry werden auch bereits die richtigen ausgewählt.
SQL Code Querrry:
SELECT `IO_SIG`.`SIG_ID`, `CNFG_CMP`.`BOARD_TYP`, `CNFG_CMP`.`COMP_NAME`, `CNFG_PAR`.`CNFG_NAME`, `CNFG_CMP`.`POSITION`, `IO_SIG`.`SIG_TYPE`, `CNFG_IO`.`CHANNEL`, `IO_SIG`.`SIG_NAME` FROM `CNFG_CMP`, `OBJ_HIERARCHY`, `CNFG_IO`, `IO_SIG`, `OBJ_INFO`, `OBJ_HIERARCHY` `OBJ_HIERARCHY_1`, `CNFG_PAR` WHERE `CNFG_CMP`.`OBJ_ID` = `OBJ_HIERARCHY`.`OBJ_ID` AND `CNFG_IO`.`COMP_ID` = `CNFG_CMP`.`COMP_ID` AND `IO_SIG`.`SIG_ID` = `CNFG_IO`.`SIG_ID` AND `OBJ_HIERARCHY`.`PAR_OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `OBJ_HIERARCHY_1`.`OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `CNFG_PAR`.`OBJ_ID` = `OBJ_HIERARCHY_1`.`PAR_OBJ_ID` AND `OBJ_INFO`.`COM_CMP_ID` = 'PBHwObjects.PBFrame' ORDER BY `CNFG_PAR`.`CNFG_NAME` ASC, `CNFG_CMP`.`POSITION` ASC, `IO_SIG`.`SIG_TYPE` ASC, `CNFG_IO`.`CHANNEL` ASC
Wenn die Makros nur über Read-only abfragen können, sind sie eben auch keine Option. Meine Idee wäre noch mithilfe eines SQL commands dieFelder zu ersetzen.
Beispiel um di_ durch rtdi_ zu ersetzen (hier bin ich mir eben nicht sicher, weil ich in SQL mit dem Syntax nicht wirklich vertraut bin:
Update IO_SIG
Set SIG_TYPE = 'rtdi_'
WHERE SIG_TYPE ='di_' and `CNFG_CMP`.`OBJ_ID` = `OBJ_HIERARCHY`.`OBJ_ID` AND `CNFG_IO`.`COMP_ID` = `CNFG_CMP`.`COMP_ID` AND `IO_SIG`.`SIG_ID` = `CNFG_IO`.`SIG_ID` AND `OBJ_HIERARCHY`.`PAR_OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `OBJ_HIERARCHY_1`.`OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `CNFG_PAR`.`OBJ_ID` = `OBJ_HIERARCHY_1`.`PAR_OBJ_ID` AND `OBJ_INFO`.`COM_CMP_ID` = 'PBHwObjects.PBFrame'
SQL Code Querrry:
SELECT `IO_SIG`.`SIG_ID`, `CNFG_CMP`.`BOARD_TYP`, `CNFG_CMP`.`COMP_NAME`, `CNFG_PAR`.`CNFG_NAME`, `CNFG_CMP`.`POSITION`, `IO_SIG`.`SIG_TYPE`, `CNFG_IO`.`CHANNEL`, `IO_SIG`.`SIG_NAME` FROM `CNFG_CMP`, `OBJ_HIERARCHY`, `CNFG_IO`, `IO_SIG`, `OBJ_INFO`, `OBJ_HIERARCHY` `OBJ_HIERARCHY_1`, `CNFG_PAR` WHERE `CNFG_CMP`.`OBJ_ID` = `OBJ_HIERARCHY`.`OBJ_ID` AND `CNFG_IO`.`COMP_ID` = `CNFG_CMP`.`COMP_ID` AND `IO_SIG`.`SIG_ID` = `CNFG_IO`.`SIG_ID` AND `OBJ_HIERARCHY`.`PAR_OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `OBJ_HIERARCHY_1`.`OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `CNFG_PAR`.`OBJ_ID` = `OBJ_HIERARCHY_1`.`PAR_OBJ_ID` AND `OBJ_INFO`.`COM_CMP_ID` = 'PBHwObjects.PBFrame' ORDER BY `CNFG_PAR`.`CNFG_NAME` ASC, `CNFG_CMP`.`POSITION` ASC, `IO_SIG`.`SIG_TYPE` ASC, `CNFG_IO`.`CHANNEL` ASC
Wenn die Makros nur über Read-only abfragen können, sind sie eben auch keine Option. Meine Idee wäre noch mithilfe eines SQL commands dieFelder zu ersetzen.
Beispiel um di_ durch rtdi_ zu ersetzen (hier bin ich mir eben nicht sicher, weil ich in SQL mit dem Syntax nicht wirklich vertraut bin:
Update IO_SIG
Set SIG_TYPE = 'rtdi_'
WHERE SIG_TYPE ='di_' and `CNFG_CMP`.`OBJ_ID` = `OBJ_HIERARCHY`.`OBJ_ID` AND `CNFG_IO`.`COMP_ID` = `CNFG_CMP`.`COMP_ID` AND `IO_SIG`.`SIG_ID` = `CNFG_IO`.`SIG_ID` AND `OBJ_HIERARCHY`.`PAR_OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `OBJ_HIERARCHY_1`.`OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `CNFG_PAR`.`OBJ_ID` = `OBJ_HIERARCHY_1`.`PAR_OBJ_ID` AND `OBJ_INFO`.`COM_CMP_ID` = 'PBHwObjects.PBFrame'
- Dateianhänge
-
- Screenshot 2024-07-11 085429.png (67.75 KiB) 2409 mal betrachtet
Re: Read-only Error in den Makros
Hier noch der SQL Code im Ececute Statment
- Dateianhänge
-
- 1.png (31.29 KiB) 2407 mal betrachtet
Re: Read-only Error in den Makros
Das Ganze scheint ja etwas zu sein, was erst einmal mit einem gesonderten Treiber läuft. Also nicht die interne Datenbank sondern Access, richtig?
Wenn Du als Antwort bekommst "No value given for one or more required paramters", dann fehlen da Angaben.
Du hast in dem Update-Befehl nicht nur eine Tabelle sondern greifst gleichzeitig noch auf andere Tabellen zu. Das kann nicht funktionieren.
Nach dem "and" muss ein Feldname der aktuellen Tabelle stehen ("IO_SIG") und der muss wohl einem Ergebnis entsprechen, das nur einen Wert wiedergibt. Die Beziehung zu der Tabelle "IO_SIG" ehältst Du, indem Du
UPDATE IO_SIG AS "a"
definierst. Dann kannst Du korrelierende Unterabfragen machen.
Wenn Du als Antwort bekommst "No value given for one or more required paramters", dann fehlen da Angaben.
Du hast in dem Update-Befehl nicht nur eine Tabelle sondern greifst gleichzeitig noch auf andere Tabellen zu. Das kann nicht funktionieren.
Nach dem "and" muss ein Feldname der aktuellen Tabelle stehen ("IO_SIG") und der muss wohl einem Ergebnis entsprechen, das nur einen Wert wiedergibt. Die Beziehung zu der Tabelle "IO_SIG" ehältst Du, indem Du
UPDATE IO_SIG AS "a"
definierst. Dann kannst Du korrelierende Unterabfragen machen.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Read-only Error in den Makros
Mit folgender SQL Anweisung funktioniert es die gewünschten Werte zu ändern, man muss den code jetzt halt einmal mit di/do/an/ai un cn durchführen, deswegen wäre meine Frage ob es möglcih ist das auf einmal zu machen? (die Befehle hintereinander zu schreiben funktioniert soweit ich es probiert habe nicht)
Aber im groben funktioniert es schon einmal, also danke für die Unterstützung!!!!
Update IO_SIG
Set SIG_TYPE = 'rtdi_'
WHERE SIG_ID IN (SELECT `IO_SIG`.`SIG_ID`
FROM `CNFG_CMP`, `OBJ_HIERARCHY`, `CNFG_IO`, `IO_SIG`, `OBJ_INFO`, `OBJ_HIERARCHY` `OBJ_HIERARCHY_1`, `CNFG_PAR`
WHERE
`CNFG_CMP`.`OBJ_ID` = `OBJ_HIERARCHY`.`OBJ_ID`
AND `CNFG_IO`.`COMP_ID` = `CNFG_CMP`.`COMP_ID`
AND `IO_SIG`.`SIG_ID` = `CNFG_IO`.`SIG_ID`
AND `OBJ_HIERARCHY`.`PAR_OBJ_ID` = `OBJ_INFO`.`OBJ_ID`
AND `OBJ_HIERARCHY_1`.`OBJ_ID` = `OBJ_INFO`.`OBJ_ID`
AND `CNFG_PAR`.`OBJ_ID` = `OBJ_HIERARCHY_1`.`PAR_OBJ_ID`
AND `OBJ_INFO`.`COM_CMP_ID` = 'PBHwObjects.PBFrame'
AND `IO_SIG`.`SIG_TYPE` = 'di_')
Aber im groben funktioniert es schon einmal, also danke für die Unterstützung!!!!
Update IO_SIG
Set SIG_TYPE = 'rtdi_'
WHERE SIG_ID IN (SELECT `IO_SIG`.`SIG_ID`
FROM `CNFG_CMP`, `OBJ_HIERARCHY`, `CNFG_IO`, `IO_SIG`, `OBJ_INFO`, `OBJ_HIERARCHY` `OBJ_HIERARCHY_1`, `CNFG_PAR`
WHERE
`CNFG_CMP`.`OBJ_ID` = `OBJ_HIERARCHY`.`OBJ_ID`
AND `CNFG_IO`.`COMP_ID` = `CNFG_CMP`.`COMP_ID`
AND `IO_SIG`.`SIG_ID` = `CNFG_IO`.`SIG_ID`
AND `OBJ_HIERARCHY`.`PAR_OBJ_ID` = `OBJ_INFO`.`OBJ_ID`
AND `OBJ_HIERARCHY_1`.`OBJ_ID` = `OBJ_INFO`.`OBJ_ID`
AND `CNFG_PAR`.`OBJ_ID` = `OBJ_HIERARCHY_1`.`PAR_OBJ_ID`
AND `OBJ_INFO`.`COM_CMP_ID` = 'PBHwObjects.PBFrame'
AND `IO_SIG`.`SIG_TYPE` = 'di_')
Re: Read-only Error in den Makros
Das jedes Mal neu zu schreiben ist doch ganz schön umständlich.
Das Makro gehört in die Datenbankdatei. Von da aus startest Du den Befehl. Und jetzt kannst Du einfach hintereinander die anderen Befehle da auch noch mit rein bauen und jedes Mal ein executeUpdate hinterher laufen lassen.
Code: Alles auswählen
SUB UpdateTable
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
oDatasource = thisDatabaseDocument.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
oSQL_Statement = oConnection.createStatement()
stSql = "Update IO_SIG Set SIG_TYPE = 'rtdi_' WHERE SIG_ID IN (SELECT `IO_SIG`.`SIG_ID` FROM `CNFG_CMP`, `OBJ_HIERARCHY`, `CNFG_IO`, `IO_SIG`, `OBJ_INFO`, `OBJ_HIERARCHY` `OBJ_HIERARCHY_1`, `CNFG_PAR` WHERE `CNFG_CMP`.`OBJ_ID` = `OBJ_HIERARCHY`.`OBJ_ID` AND `CNFG_IO`.`COMP_ID` = `CNFG_CMP`.`COMP_ID` AND `IO_SIG`.`SIG_ID` = `CNFG_IO`.`SIG_ID`
AND `OBJ_HIERARCHY`.`PAR_OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `OBJ_HIERARCHY_1`.`OBJ_ID` = `OBJ_INFO`.`OBJ_ID` AND `CNFG_PAR`.`OBJ_ID` = `OBJ_HIERARCHY_1`.`PAR_OBJ_ID` AND `OBJ_INFO`.`COM_CMP_ID` = 'PBHwObjects.PBFrame'
AND `IO_SIG`.`SIG_TYPE` = 'di_')"
oSQL_Statement.executeUpdate(stSql)
stSql = "…"
oSQL_Satement.executeUpdate(stSql)
END SUB
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Read-only Error in den Makros
Es funktioniert jetzt auf einmal.
Danke dir!!!!!!
Danke dir!!!!!!
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.